boolean pinState;
int8_t interruptPin = 19;
volatile int8_t pinStateChanged = false;
void setup()
{
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), on_change_state, CHANGE);
Serial.begin(115200);
Serial.print(F("Pin "));
Serial.print(interruptPin);
Serial.print(F(" have interrupt "));
Serial.println(digitalPinToInterrupt(interruptPin));
interrupts();
}
void loop()
{
if (pinStateChanged)
{
pinStateChanged = false;
Serial.println();
Serial.print(F("Arduino pin: "));
Serial.print(interruptPin);
Serial.write(': ');
pinState = digitalRead(interruptPin);
if (pinState)
Serial.print(F("HIGH "));
else
Serial.print(F("LOW "));
Serial.println(digitalRead(interruptPin), BIN);
Serial.print(F("Atmega 2560 pin for it is 45, PD2:"));
// For Arduino Mega 2560 and pin 19, related chip pin is PD2.
// Following should generate the same machine code
// pinState = PIND & (1 << PD2);
pinState = bitRead(PIND, PD2);
if (pinState)
Serial.print(F("HIGH "));
else
Serial.print(F("LOW "));
Serial.println(PORTD, BIN);
}
};
void on_change_state() {
pinStateChanged = true;
}