在arduino中停止和启动循环

时间:2019-07-10 02:32:13

标签: c arduino microcontroller

我需要一个电动机来向前循环,然后在用户按一次时向后循环。问题是,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);

}
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您使逻辑变得过于复杂。只需阅读循环中的按钮状态,然后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();
    }
}