Вопрос по прерываниям

Приветствую!
Плата arduino pro mini. Прошивается через ISP.
Нужно подключить Экран(пины А4, А5), два энкодера(пиныD2-D7) и радио HC-12(пины RX,TX).
Все это нужно вгонять в сон до сигнала с энкодера.

Планируемый алгоритм работы:
Спим. Пришло прерывание - смотрим с какого энкодера пришло и что там такое(кнопка, вращение). Обрабатываем = отправляем результат по радио, получаем по радио ответку и снова засыпаем.

Вопрос вот в чем: RX,TX висят на одном и тоже порту D, что и энкодеры. Можно ли так делать или будут конфликты? Энкодеры обрабатываю через прерывание ISR (PCINT2_vect)

Используй маску. Например:

PCIMSK2 |= 1 << D2; // включить прерывание только для D2

В общем разберешься, если сам пишешь.

2 лайка

Можно придраться? D2 - это что? Где искать?
Или же хочется помудрёней?

Можно.

PCIMSK2 |= 1 << PD2; // включить прерывание только для второго пина порта D

Я не понял к чему придирки?
D2 как на плате обозначено, на какой, ниипет…

Не, ну если можно, то давайте придираться по полной, чего мелочиться-то? :slight_smile:

  1. PCIMSK2 – нету такого регистра :frowning:
  2. А даже если написать название правильно, то у него нету ни бита D2, ни PD2. У него есть тока PCINTx :frowning:

Тю! Да разве ж енто придирки? Придёт настоящий зануда придиральщик и всё разложит по полочкам. А пока: среда Ардуино - есть, домохозяйки - есть, а здначицца надо использовать bitSet(PCMSK2, 2); , а не вот эти ваши закорючки. Вот!

1 лайк

attachInterrupt и не наводить тень на светлые образа! :slight_smile:

3 лайка

Что то он давно не появлялся

Блин, ну зачем так то?! Я хотел чтобы человек САМ открыл даташит, а так Вы всё за него сделали. Не интересно теперь…