Функция detachInterrupt()

arduino-logo

Описание функции 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;
}
Функция detachinterrupt в arduino ide
Отключение внешних прерываний в Ардуино
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии