Остановка и запуск петель в Arduino - PullRequest
0 голосов
/ 10 июля 2019

Мне нужен двигатель для циклического движения вперед, а затем назад, когда пользователь нажимает один раз. проблема в том, что arduino будет работать в цикле после нажатия и не остановится.

Как я могу сделать так, чтобы он повторялся только один раз при каждом нажатии кнопки?

Я пытался выйти (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 голосов
/ 10 июля 2019

Вы слишком усложняете логику. Просто прочитайте состояние кнопки в вашей петле и, если это было 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();
    }
}
0 голосов
/ 10 июля 2019

Я предполагаю, что часть, которую вы хотите запустить один раз, находится в конце раздела в разделе if (on == true).Если вы не хотите, чтобы это повторялось, то как насчет установки на false в этом разделе.Затем в следующий раз цикл повторяется, он не войдет в этот раздел.

...