如何阻止循环arduino

Bee*_*eep 11 c loops arduino

我有这个循环,我将如何结束循环?

 void loop() {
      // read the pushbutton input pin:

       a ++;
      Serial.println(a);
        analogWrite(speakerOut, NULL);

      if(a > 50 && a < 300){
      analogWrite(speakerOut, 200);
      }

      if(a <= 49){
        analogWrite(speakerOut, NULL);
      }

      if(a >= 300 && a <= 2499){
          analogWrite(speakerOut, NULL);
      }
Run Code Online (Sandbox Code Playgroud)

小智 38

这不是在Arduino.cc上发布的,但实际上您可以通过简单的退出(0)退出循环例程;

这将在您的电路板列表中的几乎任何电路板上编译.我正在使用IDE 1.0.6.我用Uno,Mega,Micro Pro甚至是Adafruit Trinket进行了测试

void loop() {
// All of your code here

/* Note you should clean up any of your I/O here as on exit, 
all 'ON'outputs remain HIGH */

// Exit the loop 
exit(0);  //The 0 is required to prevent compile error.
}
Run Code Online (Sandbox Code Playgroud)

我在项目中使用它,我将按钮连接到复位引脚.基本上你的循环运行直到退出(0); 然后只是坚持到最后一个状态.我为我的孩子制作了一些机器人,每按一下按钮(重置),代码就从loop()函数的开头开始.


Mat*_*nen 9

Arduino绝对没有办法退出它们的loop功能,正如实际运行它的代码所展示的那样:

setup();

for (;;) {
    loop();
    if (serialEventRun) serialEventRun();
}
Run Code Online (Sandbox Code Playgroud)

此外,在微控制器上,首先没有任何东西可以退出.

你最接近的就是停止处理器.这将停止处理,直到它重置.

  • 如何停止处理器? (14认同)
  • @MohamedElShenawy:这只会从对“循环”函数的调用中返回,并返回到 main() 中的 for 循环。 (2认同)

Max*_*uez 9

Matti Virkkunen说得对,没有"体面"的方法来阻止循环.尽管如此,通过查看您的代码并做出一些假设,我想您正在尝试输出具有给定频率的信号,但您希望能够阻止它.

如果是这种情况,有几种解决方案:

  1. 如果要通过输入按钮生成信号,可以执行以下操作

    int speakerOut = A0;
    int buttonPin = 13;
    
    void setup() {
        pinMode(speakerOut, OUTPUT);
        pinMode(buttonPin, INPUT_PULLUP);
    }
    
    int a = 0;
    
    void loop() {
        if(digitalRead(buttonPin) == LOW) {
            a ++;
            Serial.println(a);
            analogWrite(speakerOut, NULL);
    
            if(a > 50 && a < 300) {
                analogWrite(speakerOut, 200);
            }
    
            if(a <= 49) {
                analogWrite(speakerOut, NULL);
            }
    
            if(a >= 300 && a <= 2499) {
                analogWrite(speakerOut, NULL);
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,我们使用按钮引脚作为INPUT_PULLUP.您可以阅读Arduino参考资料,了解有关此主题的更多信息,但简而言之,此配置设置了一个内部上拉电阻,这样您就可以将按钮接地,而无需外部电阻. 注意:这将反转按钮的级别,LOW将被按下HIGH并将被释放.

  2. 另一种选择是使用其中一个内置硬件定时器来获取一个周期性调用的函数.我不会深入去是这里的的它是什么以及如何使用它一个伟大的描述.