0

我正在使用 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;

        }
    }
}

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

4

1 回答 1

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 ;
}

希望对您有所帮助。

于 2018-04-22T18:58:55.517 回答