#include <SevSeg.h>
SevSeg sevseg; // Inisialisasi seven segment
const int ledMerah = 2;
const int ledKuning = 3;
const int ledHijau = 4;
const int buttonPin = 7;
int buttonState = 0;
bool interrupt = false;
int countdown = 20;
unsigned long previousMillis = 0;
const long interval = 1000; // Interval untuk countdown (1 detik)
// Setup
void setup() {
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
// Konfigurasi seven segment
byte numDigits = 2;
byte digitPins[] = {6, 5}; // Pin Arduino untuk 7 segmen
byte segmentPins[] = {11, 10, 9, 8, A0, A1, A2, A3}; // Pin segmen A hingga G
bool resistorsOnSegments = true;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = true;
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
// Fungsi untuk mengupdate lampu lalu lintas
void updateTrafficLight() {
if (!interrupt) {
digitalWrite(ledHijau, HIGH);
delay(5000); // Hijau nyala selama 5 detik
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
delay(2000); // Kuning nyala selama 2 detik
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
delay(5000); // Merah nyala selama 5 detik
digitalWrite(ledMerah, LOW);
}
}
// Loop utama
void loop() {
buttonState = digitalRead(buttonPin);
// Jika tombol ditekan
if (buttonState == LOW && !interrupt) {
interrupt = true;
countdown = 20; // Set countdown dari 20
}
// Jika dalam mode interrupt, lakukan counting down
if (interrupt) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
sevseg.setNumber(countdown);
sevseg.refreshDisplay();
countdown--;
// Jika countdown selesai, reset interrupt
if (countdown < 0) {
interrupt = false;
sevseg.setNumber(0);
sevseg.refreshDisplay();
}
}
} else {
updateTrafficLight(); // Traffic light normal berfungsi
}
}