Описание функции 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;
}




