
Описание функции detachInterrupt
Функция detachInerrupt()
отключает обработку внешнего прерывания, которое можно задать функцией attachInterrupt().
Синтаксис
void detachInterrupt(uint8_t interruptNum)
Параметры
- interrupt — номер прерывания. Рекомендуется «оборачивать» в функцию
digitalPinToInterrupt()
, которая принимает номер цифрового контакта, а возвращает номер прерывания.
Что возвращает
Ничего
Пример использования функции detachInterrupt
bool flagInterrupt0 = false, flagInterrupt1 = false; // Флаги для отслеживания внешних прерываний void setup() { Serial.begin(9600); // Инициализация последовательного порта while(!Serial); // Ждем открытия порта Serial.println("--Включение и отключение внешних прерываний на ардуино нано.--"); attachInterrupt(digitalPinToInterrupt(2), handlerInterrupt0, CHANGE); // Задаем прерыванию 0 (на 2 цифровом контакте) функцию-обработчик handlerInterrupt0 при любом изменении состояния порта (c LOW на HIGH либо с HIGH на LOW) Serial.println("Внешнее прерывание " + (String) digitalPinToInterrupt(2) + " ВКЛЮЧЕНО"); attachInterrupt(digitalPinToInterrupt(3), handlerInterrupt1, RISING); // Задаем прерыванию 1 (на 3 цифровом контакте) функцию-обработчик handlerInterrupt1 при изменение на порте с LOW на HIGH Serial.println("Внешнее прерывание " + (String) digitalPinToInterrupt(3) + " ВКЛЮЧЕНО"); Serial.println("Ждем..."); } void loop() { /* Отслеживаем флаг внешнего прерывания 0. Если flagInterrupt0 = true, прерывание сработало */ if( flagInterrupt0 ) { Serial.println("Сработало внешнее прерывание 0"); // Выводим в порт flagInterrupt0 = false; // сбрасываем флаг detachInterrupt(digitalPinToInterrupt(2)); // Отключаем прерывание на втором пине Serial.println("Внешнее прерывание " + (String) digitalPinToInterrupt(2) + " ОТКЛЮЧЕНО."); } /* Отслеживаем флаг внешнего прерывания 1. Если flagInterrupt1 = true, прерывание сработало */ if( flagInterrupt1 ) { Serial.println("Сработало внешнее прерывание 1"); // Выводим в порт flagInterrupt1 = false; // сбрасываем флаг detachInterrupt(digitalPinToInterrupt(3)); // Отключаем прерывание на третьем пине Serial.println("Внешнее прерывание " + (String) digitalPinToInterrupt(3) + " ОТКЛЮЧЕНО"); } } /* Функция-обработчик для прерывания 0 */ void handlerInterrupt0() { flagInterrupt0 = true; } /* Функция-обработчик для прерывания 1 */ void handlerInterrupt1() { flagInterrupt1 = true; }