AttachInterrupt

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

attachInterrupt

Описание

Устанавливает функцию, которая будет вызываться при поступлении прерывания, заменяя при этом ранее установленную. Большинство плат Arduino имеют два внешних источника прерываний: 0 (на цифровом пине 2) и 1 (на цифровом пине 3). Arduino Mega имеет четыре дополнительных: 2 (пин 21), 3 (пин 20), 4 (пин 19) и 5 (пин 18).

Синтаксис

attachInterrupt(interrupt, function, mode)

Параметры

interrupt: номер прерывания (int)

function: имя функции, которая будет вызвана при поступлении прерывания; эта функция не должна принимать параметров и не должна ничего возвращать. Такие функции также известны как обработчики прерываний.

mode: определяет способ генерации прерывания. Всего существует четыре режима, для которых определены константы:

  • LOW прерывание генерируется при подаче на пин логического нуля
  • CHANGE прерывание генерируется при смене уровня на входе пина
  • RISING прерывание генерируется при смене уровня с нуля на единицу
  • FALLING прерывание генерируется при смене уровня с единицы на ноль

Возвращаемое значение

Отсутствует

Важные замечания

Внутри функции-обработчика не работает delay(), а значение millis() не увеличивается. Могут потеряться поступающие из последовательного порта данные. Все переменные, изменяемые в результате работы функции, должны быть объявлены с модификатором volatile.

Использование прерываний

Как правило, прерывания используют для решения задач, требующих оперативной реакции на внешние события. Например, это может быть считывание значения энкодера или мониторинг пользовательского ввода.

Может оказаться очень непросто написать программу, которой нужно проводить еще какие-либо операции кроме считывания импульсов энкодера - при условии, что нельзя пропустить ни одного из них. Сложность заключается в том, что программа вынуждена постоянно опрашивать состояние выхода энкодера, чтобы не пропустить событие. Похожая ситуация справедлива и для других датчиков, генерирующих короткий импульс - датчик звука в режиме обнаружения щелчков, инфракрасный прерыватель при обнаружении падения монеты и т.п. Во всех этих ситуациях использование механизма прерываний помогает освободить микроконтроллер для других задач и не пропустить при этом внешнее событие.

Пример

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.