//pin change interrupt - purwarupa3d
#include <avr/sleep.h>
#define LED1 13
#define LED2 8
#define BUTTON1 5
#define BUTTON2 9
volatile bool buttonPressed = false; // Variabel volatile untuk menandai interrupt
// ISR untuk pin change interrupt pada PCINT2
ISR(PCINT2_vect) {
if (digitalRead(BUTTON1) == LOW) {
buttonPressed = true;
}
}
void setup() {
pinMode(LED1, OUTPUT); // Mengatur LED1 sebagai output
pinMode(LED2, OUTPUT); // Mengatur LED2 sebagai output
pinMode(BUTTON1, INPUT); // Mengatur tombol 1 sebagai input
pinMode(BUTTON2, INPUT); // Mengatur tombol 2 sebagai input
// Mengaktifkan pin change interrupt pada pin BUTTON
// pin change interrupt (example for D5)
PCMSK2 |= bit (PCINT21); // want pin 5
PCIFR |= bit (PCIF2); // clear any outstanding interrupts
PCICR |= bit (PCIE2); // enable pin change interrupts for D0 to D7
//sei(); // Mengaktifkan interrupt global
}
void loop() {
if (!buttonPressed) {
// Blinking LED1 jika tombol tidak ditekan
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
delay(500);
digitalWrite(LED1, LOW);
delay(500);
} else {
// Menyalakan LED2 dan mematikan LED1 jika tombol ditekan
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
if (digitalRead(BUTTON2) == LOW) {
buttonPressed = false;
}
}