Реализация функции прерывания с помощью операторов if - PullRequest
0 голосов

Я хочу реализовать функцию interrupt (), но я не знаю точно, как ... В этом случае есть 2 для цикла, которые можно увидеть в коде: я хочу, чтобы при нажатии одной из 2 кнопок процессвнутри цикла, который должен быть немедленно прерван:

void loop() {
    int brightButton = digitalRead(K1);
    int ldrStatus = analogRead(ldrPin);

    if (brightButton == LOW && ldrStatus >= 200)
    {
        for (int i = 0; i < 10; i++)
        {
            digitalWrite(greenLed, HIGH);
            tone(buzzer,400);
            delay(500);
            noTone(buzzer);
            delay(500);
        }
    }
    else {
        digitalWrite(greenLed, LOW);
    }

    int tempButton = digitalRead(K2);
    int valNTC = analogRead(NTC);

    if (tempButton == LOW && valNTC > 512)
    {
        for (int i = 0; i <10; i++)
        {
            digitalWrite(redLed, HIGH);
            tone(buzzer,450);
            delay(300);
            noTone(buzzer);
            delay(1000);
        }
    }
    else {
        digitalWrite(redLed, LOW);
    }
}

1 Ответ

1 голос
/ 08 октября 2019

Пример кода из руководства Arduino:

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

Обратите внимание, что это прервет цикл for и вернется к нему после завершения процедуры обработки прерывания. Если вы хотите прервать цикл for, проверяйте состояние вывода в каждом цикле цикла и прерывайте, если вы хотите выйти из цикла for или вернуться, если вы хотите выйти из цикла (). Конечно, это не «сразу».

...