Я використовую Arduino Uno і вже встановити його до роботи з перериваннями на цифрових штирів 2, 3, 4 і 5 в відповідно до поясненням 1 я знайшов.
void setup()
містить наступний код для настройки переривань.
//Endable Interrupts for PCIE2 Arduino Pins (D0-7)
PCICR |= (1<<PCIE2);
//Setup pins 2,3,4,5
PCMSK2 |= (1<<PCINT18);
PCMSK2 |= (1<<PCINT19);
PCMSK2 |= (1<<PCINT20);
PCMSK2 |= (1<<PCINT21);
//Trigger Interrupt on rising edge
MCUCR = (1<<ISC01) | (1<<ISC01);
А тепер функція ISR (PCINT2_vect) спрацьовує при кожному перериванні. Це працює як шарм. Моє запитання: який найкращий / найшвидший спосіб дізнатися, який штифт був спрацьований?
Я знайшов щось у Re: Чи краще використовувати ISR (PCINT2_vect) або приєднати Interterrupt на шпилях 2, 3? , але я не розумію код і він не працює з коробки. Але це виглядає вражаюче ...
Яке рішення?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
Редагувати:
На даний момент я читаю стан контактів із реєстру вхідних штифтів:
if (PIND & 0b00000100)
Serial.println( "PIN 2" );
if (PIND & 0b00001000)
Serial.println( "PIN 3" );
if (PIND & 0b00010000)
Serial.println( "PIN 4" );
if (PIND & 0b00100000)
Serial.println( "PIN 5" );
Врешті-решт, я хочу порахувати переривання на штирях. Але як я можу запевнити, що їх двічі не рахують?