【问题标题】:How do you make a toggle button with in a for loop?如何在 for 循环中制作切换按钮?
【发布时间】:2018-04-23 06:51:10
【问题描述】:

我正在使用 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 次增量。我可以通过在按下按钮时递增来解决这个问题,但这意味着用户必须连续单击按钮才能运行时钟。

【问题讨论】:

    标签: c++ nucleo


    【解决方案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 ;
    }
    

    希望对你有所帮助。

    【讨论】:

    • 这确实有效,但无论如何我可以在 if 语句块之外递增。我计划在 3 个嵌套的四个循环中使用按钮切换,并需要它们连续运行。基本上我正在做的是制作一个时钟程序,最外面的 for 循环计数小时,然后是一个 for 循环计数分钟,另一个计数秒。我想使用按钮切换来切换显示功能。
    • 对不起,我真的没有得到你想要达到的目标。你能用这个“3个嵌套for循环”的例子来编辑这个问题,然后我可以帮助你更多。
    • 我编辑了问题以添加更多详细信息。我遇到的问题是在最里面的循环中我应该有 ss 增量,以保持时钟连续,同时还允许切换操作工作。
    • 现在,情况完全不同了。不要将for 循环与计时器混淆。
    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多