const int d1 = 8;
const int d2 = 9;
const int segmentPins[] = {1, 2, 3, 4, 5, 6, 7, 0};
const byte digits[] = {
B11000000, //0
B11111001, //1
B10100100, //2
B10110000, //3
B10011001, //4
B10010010, //5
B10000010, //6
B11111000, //7
B10000000, //8
B10010000, //9
};
int ledm = 13; //lampu merah
int ledk = 12; //lampu kuning
int ledh = 11; //lampu hijau
void setup() {
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(ledm, OUTPUT);
pinMode(ledk, OUTPUT);
pinMode(ledh, OUTPUT);
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
for (int i = 2500; i >= 0; i--) {
displayNumber(d1, i / 1000);
delay(5);
displayNumber(d2,(i / 100) % 10) ;
delay(5);
// Traffic light logic
static int trafficState = 0; // 0: Red, 1: Yellow, 2: Green
static int trafficTimer = 0;
switch (trafficState) {
case 0: // Red
digitalWrite(ledm, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(ledh, LOW);
trafficTimer++;
if (trafficTimer >= 1000) { // 5 seconds
trafficState = 1;
trafficTimer = 0;
}
break;
case 1: // Yellow
digitalWrite(ledm, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(ledh, LOW);
trafficTimer++;
if (trafficTimer >= 500) { // 2 seconds
trafficState = 2;
trafficTimer = 0;
}
break;
case 2: // Green
digitalWrite(ledm, LOW);
digitalWrite(ledk, LOW);
digitalWrite(ledh, HIGH);
trafficTimer++;
if (trafficTimer >= 1000) { // 5 seconds
trafficState = 0;
trafficTimer = 0;
}
break;
}
}
}
void displayNumber(int digitPin, int number) {
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
for (int i = 0; i < 8; i++) {
if (bitRead(digits[number], i)) {
digitalWrite(segmentPins[i], HIGH);
} else {
digitalWrite(segmentPins[i], LOW);
}
}
digitalWrite(digitPin, HIGH);
}