C Arduino-如何停止循环并等待下一个命令?

C Arduino-如何停止循环并等待下一个命令?,c,arduino,arduino-uno,C,Arduino,Arduino Uno,我希望我的代码在代码的第一部分结束后停止,并等待开关改变状态。。。我似乎找不到能做这件事的指挥官!谢谢你的帮助。 我已将代码标记到一半,希望它停止 int switchState = 0; void setup() { pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(2,INPUT); } void loop() { switchState = digitalRead(2); if (sw

我希望我的代码在代码的第一部分结束后停止,并等待开关改变状态。。。我似乎找不到能做这件事的指挥官!谢谢你的帮助。 我已将代码标记到一半,希望它停止

int switchState = 0;
void setup() {
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(2,INPUT);
}

void loop() {
  switchState = digitalRead(2);
  if (switchState == LOW) {
    // The button is not pressed
    delay(250);
    digitalWrite(3, HIGH);
    delay(250);
    digitalWrite(4, HIGH);
    delay(250);
    digitalWrite(5, HIGH);
    delay(500);
    digitalWrite(3, LOW);
    delay(250);
    digitalWrite(4, LOW);
    delay(250);
    digitalWrite(5, LOW);
    delay(1000);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(1000);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
// HERE IS WHERE I WANT TO HALT THE EXECUTION OF THE FIRST PART OF THE CODE
  }
  else {
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(250); // wait quarter of a second
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, LOW); // red LED
    delay(250); // wait quarter of a second
  }

} // go back to beginning of loo
我希望我的代码在代码的第一部分结束后停止,并等待开关改变状态。。。我似乎找不到能做这件事的指挥官!谢谢你的帮助。
我已将代码标记到一半,希望它停止。

您可以使用最后一个状态变量轻松实现这一点:

int switchState = 0;
void setup() {
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(2,INPUT);
}

void loop() {
  switchState = digitalRead(2);
  if (switchState == LOW) {
    // The button is not pressed
    delay(250);
    digitalWrite(3, HIGH);
    delay(250);
    digitalWrite(4, HIGH);
    delay(250);
    digitalWrite(5, HIGH);
    delay(500);
    digitalWrite(3, LOW);
    delay(250);
    digitalWrite(4, LOW);
    delay(250);
    digitalWrite(5, LOW);
    delay(1000);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(100);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(100);
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
    delay(1000);
    digitalWrite(3, HIGH); // green LED
    digitalWrite(4, LOW); // red LED
    digitalWrite(5, LOW); // red LED
// HERE IS WHERE I WANT TO HALT THE EXECUTION OF THE FIRST PART OF THE CODE
  }
  else {
    digitalWrite(3, LOW); // green LED
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, HIGH); // red LED
    delay(250); // wait quarter of a second
    digitalWrite(4, HIGH); // red LED
    digitalWrite(5, LOW); // red LED
    delay(250); // wait quarter of a second
  }

} // go back to beginning of loo
int switchState=0;
int lastSwitchState=2;
无效设置(){
pinMode(3,输出);
pinMode(4,输出);
pinMode(5,输出);
pinMode(2,输入);
}
void循环(){
开关状态=数字读取(2);
如果(switchState!=lastSwitchState){
如果(开关状态==低){
//按钮没有按下
延迟(250);
数字写入(3,高);
// ...
//这里是我想要停止执行代码第一部分的地方
lastSwitchState=开关状态;
}否则{
// ...  
digitalWrite(5,低);//红色LED
延迟(250);//等待四分之一秒
lastSwitchState=开关状态;
}
}否则{
//执行省电状态或空闲过程
}
}//返回到循环的开头

这段代码只是检查当前值是否等于最后一个值。它只在核心代码不同时执行它们。如果它们(
switchState
lastSwitchState
)相同,您可以进入一个powersave过程,或者只是进入一个无限循环。因此,除非值已更改,否则循环将在下一次迭代时“暂停”。

没错。不,没有。循环是一个无止境的循环,因此我提到了powersave/idle模式。循环无休止地重复,但如果状态保持不变,则忽略主代码。第一个谷歌链接返回。选择最适合您的场景的方法。好的-代码会执行,但不会等待,它会直接跳转到下一个例程。我希望它在第一段代码中循环而不循环。然后等待,直到按下开关。然后执行下一段代码。没有“好的”等待函数。您可以
delay()
执行,但使用上述一些睡眠模式最多只能实现等待。使用无止境循环的“等待”将耗电,并会阻塞其他所有内容。因此,请在
else
代码中指定可以解锁“等待”的事件/中断。这可能是您提到的触发一个事件的开关。因此,您可以通过对硬件或软件中断作出反应来“释放”等待。这就是要走的路。停止主循环是一个可怕的想法。阅读328P的数据表和应用说明,了解其工作原理,然后重新思考您的想法。