#include <Arduino.h>
// Konfigurasi LED sebagai output
const int led1 = 0; // GPIO 0
const int led2 = 1; // GPIO 1
const int led3 = 2; // GPIO 2
const int led4 = 3; // GPIO 3
volatile int x = 0; // Counter untuk interrupt
// Konfigurasi pin sebagai input (push button)
const int buttonPin = 4; // Push button di GPIO 4
// Pin buzzer
const int buzzerPin = 5; // Buzzer dihubungkan ke GPIO 5
bool controlLEDs = true; // Status kontrol LED
// Fungsi untuk menangani interrupt (Rising edge)
void eksternal1() {
x++;
controlLEDs = !controlLEDs; // Toggle kontrol LED saat interrupt
Serial.print("Push button mendapat pulsa high, ");
Serial.print("Jenis interrupt adalah Rising, ");
Serial.print("Sekarang interrupt ke- ");
Serial.println(x);
}
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(9600);
// Konfigurasi pin LED sebagai output
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
// Konfigurasi pin button sebagai input dengan Pull-Down
pinMode(buttonPin, INPUT_PULLDOWN);
// Konfigurasi pin buzzer sebagai output
pinMode(buzzerPin, OUTPUT);
// Menambahkan interrupt handler pada pin 4 (Rising edge)
attachInterrupt(digitalPinToInterrupt(buttonPin), eksternal1, RISING);
}
void loop() {
if (controlLEDs) {
// Semua LED menyala bersamaan
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
// Buzzer aktif
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(500);
// Program utama untuk menyalakan LED bergantian
digitalWrite(led1, LOW);
delay(200);
digitalWrite(led2, LOW);
delay(200);
digitalWrite(led3, LOW);
delay(200);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, HIGH);
delay(200);
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led4, HIGH);
delay(200);
// Mematikan buzzer
digitalWrite(buzzerPin, LOW);
}
}