// Task 4: Interrupt Handling using a Button Press
const int buttonPin = 2; // Interrupt pin (INT0)
const int ledInterrupt = 12; // LED toggled by interrupt
const int ledMain = 13; // LED blinking in main loop
volatile bool ledState = false; // Must be volatile since used in ISR
unsigned long previousMillis = 0;
const long interval = 500; // Blink interval for main LED (in ms)
// Interrupt Service Routine (ISR)
void toggleLED() {
ledState = !ledState; // Toggle LED state
digitalWrite(ledInterrupt, ledState);
}
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Internal pull-up resistor
pinMode(ledInterrupt, OUTPUT);
pinMode(ledMain, OUTPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), toggleLED, FALLING);
Serial.begin(9600);
Serial.println("Interrupt test started...");
}
void loop() {
// Main loop LED blink using millis() (non-blocking)
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(ledMain, !digitalRead(ledMain)); // Toggle LED
}
// Print status (optional)
Serial.print("Main LED: ");
Serial.print(digitalRead(ledMain));
Serial.print(" | Interrupt LED: ");
Serial.println(digitalRead(ledInterrupt));
}