Поиск…


Синтаксис

  • 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.
}

Один из примеров этого простого примера состоит в том, что кнопки имеют тенденцию отскакивать, что означает, что при нажатии или отпускании схема открывается и закрывается более одного раза, прежде чем она оседает в конечное закрытое или открытое состояние. Этот пример не учитывает это. В результате иногда нажатие кнопки будет переключать светодиод несколько раз, вместо ожидаемого один раз.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow