Инструкции

Справочный раздел

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

Разделы инструкций

В сети

Пользователей: 221
Из них просматривают:
Аналоги: 65. Даташиты: 112. Инструкции: 6. Магазин: 1. Новости: 10. Остальное: 6. Программы: 2. Производители: 1. Теги: 1. Торрент: 1. Форум: 16.
Участников: 2
Гостей: 219

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

attachInterrupt()

Описание
Первый параметр attachInterrupt() - это номер прерывания. Обычно вы должны использовать digitalPinToInterrupt(pin), чтобы преобразовать фактический цифровой вывод в конкретный номер прерывания. Например, если вы подключаетесь к выводу 3, используйте digitalPinToInterrupt(3) в качестве первого параметра для attachInterrupt().

 

BoardЦифровые выводы,
используемые для прерываний

Uno, Nano, Mini, и другие на базе 328

2, 3

Uno WiFi Rev.2

все цифровые выводы

Mega, Mega2560, MegaADK

2, 3, 18, 19, 20, 21

Micro, Leonardo, и другие на базе 32u4

0, 1, 2, 3, 7

Zero

все цифровые выводы, кроме 4

Семейство плат MKR

0, 1, 4, 5, 6, 7, 8, 9, A1, A2

Due

все цифровые выводы

101

все цифровые выводы (только выводы 2, 5, 7, 8, 10, 11, 12, 13 работают с CHANGE)

 

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

Использование прерываний
Прерывания полезны для автоматического выполнения задач в программах микроконтроллеров и могут помочь решить проблемы синхронизации. Хорошие задачи для использования прерывания могут включать в себя чтение поворотного датчика или мониторинг ввода пользователя.
 
Если вы хотите убедиться, что программа всегда улавливает импульсы от вращающегося энкодера, чтобы она никогда не пропускала импульс, было бы очень сложно написать программу для выполнения чего-либо еще, потому что программе нужно было бы постоянно опрашивать выход энкодера, чтобы уловить импульсы при их появлении. Другие датчики также имеют похожую динамику интерфейса, например, пытаются прочитать звуковой датчик, который пытается поймать щелчок. Во всех этих ситуациях использование прерывания может освободить микроконтроллер для выполнения некоторой другой работы, не пропуская ввод.
 
Синтаксис
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); (рекомендуемый)
attachInterrupt(interrupt, ISR, mode); (не рекомендуемый)
attachInterrupt(pin, ISR, mode); (не рекомендуемый. Этот синтаксис работает только на Arduino SAMD Boards, Uno WiFi Rev2, Due, и 101.)
 
Параметры
interrupt — номер прерывания (int)
pin — номер контакта (только для Due, Zero)
ISR — ISR, которая будет вызываться при возникновении прерывания; у этой функции не должно быть параметров и, к тому же, она не должна ничего возвращать; кроме того, иногда эту функцию также называют «обработчиком прерываний»
mode — определяет, когда должно сработать прерывание; работает, как правило, с четырьмя константами:

LOW — прерывание срабатывает, когда контакт переключается в значение LOW
CHANGE — прерывание срабатывает, когда значение контакта меняется
RISING — прерывание срабатывает, когда контакт переключается из LOW в HIGH
FALLING — прерывание срабатывает, когда контакт переключается из HIGH в LOW
HIGH (только для Due, Zero) — прерывание срабатывает, когда контакт переключается в HIGH

Возвращаемые значения
Нет

Пример

 

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

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

void blink() {
  state = !state;
}

 

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

Однако старые скетчи часто имеют прямые номера прерываний. Часто использовался номер 0 (для цифрового контакта 2) или номер 1 (для цифрового контакта 3). В таблице ниже показаны доступные контакты прерываний на различных платах.


Обратите внимание, что в приведенной ниже таблице номера прерываний относятся к номеру, передаваемому в attachInterrupt (). По историческим причинам эта нумерация не всегда напрямую соответствует нумерации прерываний на чипе ATmega (например, int.0 соответствует INT4 на чипе ATmega2560).

Платаint.0int.1int.2int.3int.4int.5

Uno, Ethernet

2

3

Mega2560

2

3

21

20

19

18

32u4 (Leonardo, Micro)

3

2

0

1

7

        

Для плат Uno WiFiRev.2, Due, Zero, MKR Family и 101 номер прерывания = номер контакта.
 
Плата Arduino Due предоставляет больше возможностей по работе с прерываниями, поскольку позволяют ассоциировать функцию-обработчик прерывания с любым из доступных выводов. При этом в функции attachInterrupt() можно непосредственно указывать номер вывода.

 

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

Интересно

Если "ревёт" один из дросселей резонансного стабилизатора, забейте деревянный клин между его катушками.

Похожие инструкции