在arduino中停止和启动循环

Stopping and starting loops in arduino

我需要一个电机向前循环,然后在用户按下一次时向后循环。问题是,arduino 在按下后会 运行 循环并且不会停止。

如何让它在每次按下按钮时只循环一次?

我试过 exit(0)、stop_it 等,但这些只是退出循环,而不是在再次按下按钮时重新启动。

const int pwm_pin = 9;
const int dir_1a_pin = 8;
const int dir_2a_pin = 7;
int buttonPin = 2;
boolean on=false;
int buttonState = 0;

void setup() {
pinMode(buttonPin, INPUT);
pinMode(pwm_pin, OUTPUT);
pinMode(dir_1a_pin, OUTPUT);
pinMode(dir_2a_pin, OUTPUT);

}

void loop() {

buttonState = digitalRead(buttonPin);

if (buttonState == HIGH){
  if (on==true){
    on=false;
  } else{
    on=true;
  }
 }
if(on == true){ 
digitalWrite(dir_1a_pin, HIGH);
digitalWrite(dir_2a_pin, LOW);
analogWrite(pwm_pin, 255);
delay (8000);

digitalWrite(dir_1a_pin, LOW);
digitalWrite(dir_2a_pin, HIGH);
analogWrite(pwm_pin, 255);
delay (12000);

}
}

我假设您想要 运行 一次的部分位于 if(on == true) 部分末尾的部分中。如果您不想重复,那么在该部分中设置为 false 怎么样。然后下次循环重复它不会进入该部分。

你把逻辑搞得太复杂了。只需阅读循环中的按钮状态,如果它是 HIGH 就做你的摩托车工作。下一次循环运行,因为你没有按下按钮,它将变成 LOW 并且不会进入 if 语句。

const int pwm_pin = 9;
const int dir_1a_pin = 8;
const int dir_2a_pin = 7;
int buttonPin = 2;

void MotorCycle()
{
    digitalWrite(dir_1a_pin, HIGH);
    digitalWrite(dir_2a_pin, LOW);
    analogWrite(pwm_pin, 255);
    delay(8000);

    digitalWrite(dir_1a_pin, LOW);
    digitalWrite(dir_2a_pin, HIGH);
    analogWrite(pwm_pin, 255);
    delay(12000);
}

void setup()
{
    pinMode(buttonPin, INPUT);
    pinMode(pwm_pin, OUTPUT);
    pinMode(dir_1a_pin, OUTPUT);
    pinMode(dir_2a_pin, OUTPUT);
}

void loop()
{
    // if button pressed
    if (digitalRead(buttonPin) == HIGH)
    {
        MotorCycle();
    }
}