arduino                
            Прерывания
        
        
            
    Поиск…
Синтаксис
digitalPinToInterrupt (контактный); // преобразует идентификатор контакта в идентификатор прерывания, для использования с
attachInterrupt()иdetachInterrupt().attachInterrupt (digitalPinToInterrupt (pin), ISR, режим); // рекомендуемые
attachInterrupt (прерывание, ISR, режим); // не рекомендуется
detachInterrupt (digitalPinToInterrupt (контактный));
detachInterrupt (прерывание);
noInterrupts (); // отключает прерывания
прерывания (); // повторно активировать прерывания после
noInterrupts().
параметры
| параметр | Заметки | 
|---|---|
| прерывание | Id прерывания. Нельзя ошибиться с количеством контактов. | 
| ISR | Процедура обслуживания прерываний. Это метод, который будет выполняться при возникновении прерывания. | 
| Режим | Что должно вызывать прерывание. Один из LOW, CHANGE, RISING или FALLING. Доски также позволяют HIGH. | 
замечания
Процедуры обслуживания прерываний (ISR) должны быть как можно короче, поскольку они приостанавливают выполнение основной программы и, таким образом, могут заворачивать зависящий от времени код. Как правило, это означает, что в ISR вы устанавливаете флаг и выходите, а в цикле основной программы вы проверяете флаг и выполняете то, что должен делать этот флаг.
 Вы не можете использовать delay() или millis() в ISR, потому что сами эти методы полагаются на прерывания. 
Нажмите кнопку «Прерывание»
В этом примере используется кнопка (тактовый переключатель), подключенная к цифровому выходу 2 и GND, с использованием внутреннего подтягивающего резистора, поэтому контакт 2 является ВЫСОКО, когда кнопка не нажата.
const int LED_PIN = 13;
const int INTERRUPT_PIN = 2;
volatile bool ledState = LOW;
void setup() {
    pinMode(LED_PIN, OUTPUT);
    pinMode(INTERRUPT_PIN, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), myISR, FALLING); // trigger when button pressed, but not when released.
}
void loop() {
    digitalWrite(LED_PIN, ledState);
}
void myISR() {
    ledState = !ledState;
    // note: LOW == false == 0, HIGH == true == 1, so inverting the boolean is the same as switching between LOW and HIGH.
}
 Один из примеров этого простого примера состоит в том, что кнопки имеют тенденцию отскакивать, что означает, что при нажатии или отпускании схема открывается и закрывается более одного раза, прежде чем она оседает в конечное закрытое или открытое состояние. Этот пример не учитывает это. В результате иногда нажатие кнопки будет переключать светодиод несколько раз, вместо ожидаемого один раз.