#include <Arduino.h>
#define TOMBOL 12 // Pin untuk tombol
#define LAMPU 13 // Pin untuk lampu
// Pin untuk seven-segment (a-g)
const byte sevenSegmentPins[7] = {2, 3, 4, 5, 6, 7, 8};
// Variabel
byte buttonState = LOW;
byte lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
byte pressCount = 0;
bool showChar = false;
// Pola angka dan huruf untuk seven-segment (0-9, A, I, U, E, O)
const byte digitPatterns[15] = {
1, // ini untuk angka 0
~(32+16), // ini untuk angka 1
16+2, // ini untuk angka 2
2+4, // ini untuk angka 3
0b1001100, // ini untuk angka 4
4+32, // ini untuk angka 5
32, // ini untuk angka 6
~(16+32+64), // ini untuk angka 7
0, // ini untuk angka 8
4+8, // ini untuk angka 9
8, // ini untuk huruf A
~(16+32), // ini untuk huruf I
64+1, // ini untuk huruf U
16+32, // ini untuk huruf E
64+32+2 // ini untuk huruf O
};
void setup() {
pinMode(TOMBOL, INPUT_PULLUP);
pinMode(LAMPU, OUTPUT);
for (byte pin : sevenSegmentPins)
digitalWrite(pin, 1),
pinMode(pin, OUTPUT);;
}
void loop() {
int reading = digitalRead(TOMBOL);
nyalakanSevenSegment();
// Debounce tombol
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) <= debounceDelay) {
lastButtonState = reading; return;
}
if (reading == buttonState) return;
buttonState = reading;
if (buttonState != LOW) return;
pressCount++;
// Semua LED menyala
if (pressCount == 1) {digitalWrite(LAMPU, HIGH); return;}
// Tampilkan angka 0-9 secara berurutan
if (pressCount == 2) {angka(); return;}
// Semua LED mati dan tampilkan huruf a, i, u, e, o
if (pressCount == 3) {
digitalWrite(LAMPU, LOW);
huruf(); pressCount = 0;
}
}
byte showIdx = 0;
byte showMax = 15;
void angka() { showIdx = 0; showMax = 10; showChar = true; }
void huruf() { showIdx = 10; showMax = 15; showChar = true; }
byte idxA = 0;
unsigned long lastExecuteTime = 0;
const unsigned long executeDelay = 700;
void nyalakanSevenSegment() {
if (!showChar) return;
if ((millis() - lastExecuteTime) < executeDelay)
return;
lastExecuteTime = millis();
if (showIdx == showMax) {
showChar = false;
showIdx = 0; showMax = 15;
for (byte i = 0; i < 7; i++)
digitalWrite(sevenSegmentPins[i], 1);
return;
}
for (byte i = 0; i < 7; i++)
digitalWrite(sevenSegmentPins[i], (digitPatterns[showIdx]<<i)&64);
showIdx += 1;
}