const int d1 = 42;
const int d2 = 43;
const int d3 = 44;
const int d4 = 45;
const int d5 = 46;
const int d6 = 47;
const int sp1[] = {4, 3, 2, 1, 48, 40, 41, 0};
const int sp2[] = {22, 23, 24, 25, 26, 27, 28, 0};
const int sp3[] = {32, 33, 34, 30, 36, 37, 38, 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
int ledmm = 10;
int ledkk = 9;
int ledhh = 8;
int ledmmm = 7;
int ledkkk = 6;
int ledhhh = 5;
void setup() {
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(d5, OUTPUT);
pinMode(d6, OUTPUT);
pinMode(ledm, OUTPUT);
pinMode(ledk, OUTPUT);
pinMode(ledh, OUTPUT);
pinMode(ledmm, OUTPUT);
pinMode(ledkk, OUTPUT);
pinMode(ledhh, OUTPUT);
pinMode(ledmmm, OUTPUT);
pinMode(ledkkk, OUTPUT);
pinMode(ledhhh, OUTPUT);
for (int i = 0; i < 8; i++) {
pinMode(sp1[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(sp2[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(sp3[i], OUTPUT);
}
}
void loop() {
for (int i = 2500; i >= 0; i--) {
displayNumber(d1, i / 1000);
delay(1);
displayNumber(d2, (i / 100) % 10);
delay(1);
displayNumber(d3, i / 1000);
delay(1);
displayNumber(d4, (i / 100) % 10);
delay(1);
displayNumber(d5, i / 1000);
delay(1);
displayNumber(d6, (i / 100) % 10);
delay(1);
// Traffic light logic
static int ts = 0; // 0: Red, 1: Yellow, 2: Green
static int tt = 0;
switch (ts) {
case 0: // green
digitalWrite(ledm, LOW);
digitalWrite(ledk, LOW);
digitalWrite(ledh, HIGH);
digitalWrite(ledmm, HIGH);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, HIGH);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 1000) { // 5 seconds
ts = 1;
tt = 0;
}
break;
case 1: // Yellow
digitalWrite(ledm, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, HIGH);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, HIGH);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 500) {
ts = 2;
tt = 0;
}
break;
case 2: // red
digitalWrite(ledm, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, LOW);
digitalWrite(ledkk, HIGH);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, HIGH);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 500) {
ts = 3;
tt = 0;
}
break;
case 3: // yellow2
digitalWrite(ledm, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, LOW);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, HIGH);
digitalWrite(ledmmm, HIGH);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 1000) {
ts = 4;
tt = 0;
}
break;
case 4: // green2
digitalWrite(ledm, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, LOW);
digitalWrite(ledkk, HIGH);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, LOW);
digitalWrite(ledkkk, HIGH);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 500) {
ts = 5;
tt = 0;
}
break;
case 5: // yel2
digitalWrite(ledm, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, HIGH);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, LOW);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, HIGH);
tt++;
if (tt >= 1000) {
ts = 6;
tt = 0;
}
break;
case 6: // yel3
digitalWrite(ledm, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(ledh, LOW);
digitalWrite(ledmm, HIGH);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, LOW);
digitalWrite(ledkkk, HIGH);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 500) {
ts = 7;
tt = 0;
}
break;
case 7: // green3
digitalWrite(ledm, LOW);
digitalWrite(ledk, LOW);
digitalWrite(ledh, HIGH);
digitalWrite(ledmm, HIGH);
digitalWrite(ledkk, LOW);
digitalWrite(ledhh, LOW);
digitalWrite(ledmmm, HIGH);
digitalWrite(ledkkk, LOW);
digitalWrite(ledhhh, LOW);
tt++;
if (tt >= 1000) {
ts = 1;
tt = 0;
}
break;
}
}
}
void displayNumber(int digitPin, int number) {
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
digitalWrite(d5, LOW);
digitalWrite(d6, LOW);
for (int i = 0; i < 8; i++) {
if (bitRead(digits[number], i)) {
digitalWrite(sp1[i], HIGH);
digitalWrite(sp2[i], HIGH);
digitalWrite(sp3[i], HIGH);
} else {
digitalWrite(sp1[i], LOW);
digitalWrite(sp2[i], LOW);
digitalWrite(sp3[i], LOW);
}
}
digitalWrite(digitPin, HIGH);
}