#include <PinChangeInt.h>
const byte LED = 13, SW = 5;
volatile byte count = 0;
int lastCount = -1;
void handleSW() {
digitalWrite(LED, digitalRead(SW));
count++;
}
void handleOtherStuff() {
if (count != lastCount) {
Serial.print("Count ");
Serial.println(count);
Serial.println(PCintPort::pinState);
lastCount = count;
}
}
void setup() {
//Start up the serial port
Serial.begin(9600);
while (!Serial); // for Leonardo
Serial.println(F("Initialized example5"));
// configure the pins
pinMode(LED, OUTPUT);
pinMode(SW, INPUT_PULLUP);
// Attach the ISR
PCintPort::attachInterrupt(SW, handleSW, CHANGE);
}
void loop() {
handleOtherStuff();
}
For this example, we replace the external interrupt 0 used in experiments 3 and 4 with a pin change interrupt. Pin change interrupts are available on all pins of the ATmega328P chip used on an Arduino Uno. I changed from pin 2 to pin 5 in this example, but pin change works on pin 2 as well.