где то видел, что у Uno только один такой вход.в контроллере на каждый вход можно сделать прерывание при помощи attachinterrupt
у мега 328, а не уно каждый цифровой вход может генерировать аппаратное прерываниечто у Uno только один такой вход.
т.е. Uno R3 не пойдет.у мега 328, а не уно каждый цифровой вход может генерировать аппаратное прерывание
это старые контроллеры имели их 2
Все пины "закреплены" за своим вектором в 3 группы.ARDUINO PIN INTERRUPT VECTOR MAPPING
--------------------------------------
D0 PCINT16 (PCMSK2 / PCIF2 / PCIE2)
D1 PCINT17 (PCMSK2 / PCIF2 / PCIE2)
D2 PCINT18 (PCMSK2 / PCIF2 / PCIE2)
D3 PCINT19 (PCMSK2 / PCIF2 / PCIE2)
D4 PCINT20 (PCMSK2 / PCIF2 / PCIE2)
D5 PCINT21 (PCMSK2 / PCIF2 / PCIE2)
D6 PCINT22 (PCMSK2 / PCIF2 / PCIE2)
D7 PCINT23 (PCMSK2 / PCIF2 / PCIE2)
D8 PCINT0 (PCMSK0 / PCIF0 / PCIE0)
D9 PCINT1 (PCMSK0 / PCIF0 / PCIE0)
D10 PCINT2 (PCMSK0 / PCIF0 / PCIE0)
D11 PCINT3 (PCMSK0 / PCIF0 / PCIE0)
D12 PCINT4 (PCMSK0 / PCIF0 / PCIE0)
D13 PCINT5 (PCMSK0 / PCIF0 / PCIE0)
A0 PCINT8 (PCMSK1 / PCIF1 / PCIE1)
A1 PCINT9 (PCMSK1 / PCIF1 / PCIE1)
A2 PCINT10 (PCMSK1 / PCIF1 / PCIE1)
A3 PCINT11 (PCMSK1 / PCIF1 / PCIE1)
A4 PCINT12 (PCMSK1 / PCIF1 / PCIE1)
A5 PCINT13 (PCMSK1 / PCIF1 / PCIE1)
// запуск обработки прерываний D6, D7 крайние положения курка
pinMode (Zerro_Speed_Btn, INPUT_PULLUP);
pinMode (Msx_Speed_Btn, INPUT_PULLUP);
PCMSK2 |= bit (PCINT22); //
PCMSK2 |= bit (PCINT23); //
PCIFR |= bit (PCIF2); //
PCICR |= bit (PCIE2); //
// это будет доп прерывания
// запуск обработки прерываний D8 реверс!
pinMode (Revers_Btn, INPUT_PULLUP);
PCMSK0 |= bit (PCINT0); //
PCIFR |= bit (PCIF0); //
PCICR |= bit (PCIE0); //
// тут конец подключения
Это процедуры обработки соотв. изменений на пинах
//========================== ОБРАБОТКА КНОПОК D6 D7 =========================== //
ISR (PCINT2_vect, ISR_BLOCK)
{
// кнопки стоят как пулап, при подключении через триггер шмитта убрать!
if (!(128 & PIND)){Speed_Pos = Max_Speed_Pos;};
if (!(64 & PIND)){Speed_Pos = 0;};
}
//-------------------------- ОБРАБОТКА КНОПОК D6 D7---------------------------- //
//========================== ОБРАБОТКА КНОПОК D8 ============================ //
ISR (PCINT0_vect, ISR_BLOCK)
{
if (Speed_Pos = 0)
{ if (1 % PINB)
{
trans_data[2] = trans_data[1] & Revers_ID;
}
else {
trans_data[2] = trans_data[1] & (255 - Revers_ID);
};
//PINB
};
}
//-------------------------- ОБРАБОТКА КНОПОК D8 ---------------------------- //
Спасибо за наводку, то что Вы предложили пока для меня сложновато, я решил при помощи "PinChangeInterrupt.h"Прерывания в ардуино интересная штука. прерывания 0 и 1 (2-ой и 3-ий пины соотв) можно использовать аттачем, можно проверять на низкое, высокое значени, повышение или снижение. а так же изменение состояния. На остальных пинах прерывания идут только на изменение состояния
есть такая табличка
я про это и говориля решил при помощи "PinChangeInterrupt.h"
я про это и говорил
а на это можно было ткнуть "PinChangeInterrupt "на твоей плате куча входов, которые могут генерировать прерывания
нужно только включить этот режим для них