我正在使用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次递增。我可以通过在按下按钮时递增来解决这个问题,但这意味着用户必须不断点击按钮才能操作时钟。
答案 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 ;
}
希望对你有所帮助。