如何在for循环中创建切换按钮?

时间:2018-04-22 18:51:49

标签: c++ nucleo

我正在使用NUCLEO F401R0微控制器制作时钟。它有一个物理按钮,当按下我已经初始化的“按钮”对象时输出1。有3个嵌套的四个循环控制小时,分钟和秒增量。我试图在最内部的for循环中编程一个切换按钮来控制秒数。按下按钮时,我想在两个将显示出来的变量之间切换。如何在保持循环连续的同时在最内层for循环中进行切换操作?

int oldstate;
string unit;

DigitalIn  button(USER_BUTTON); 

for(int hh = 12; hh <= 13; hh++)
{

    for(int mm = 0; mm < 60; mm++)
    {

        for(int ss =0; ss < 60; ss++)
        {
            int currentState = button;

            if (currentState == 1 && oldState == 0) 
                {          
                    check = !check;
                }

            oldState = currentState ;

            if(check == 0)
                {
                    unit = "C";
                }
            else
                {
                    unit = "F";
                }


            cout << "\n\r Time: " << hh << ":" << mm << ":" << ss << " " << unit << flush;

        }
    }
}

我目前使用上述代码的问题是,如果我在for循环中保持ss的增量,它会一次执行60次递增。我可以通过在按下按钮时递增来解决这个问题,但这意味着用户必须不断点击按钮才能操作时钟。

1 个答案:

答案 0 :(得分:1)

  

它在一次迭代后终止循环。

不,它没有。它实际上完成了所有59次迭代,但是处于相同的按钮状态(太快)。为了只允许59次按钮,您只需要在每次新点击时增加迭代次数。以下是:

DigitalIn  button(USER_BUTTON); 

for ( int i = 0; i < 59 ; ) {
     int currentState = button;

      if (currentState == 1 && oldState == 0) {          
          check = !check;
          cout << "\r\n" << check << flush;

          ++i; // Here
      }

      oldState = currentState ;
}

希望对你有所帮助。