// ini punya saya fungsi reset sama lompat 2 angka itu kalau button dilepas bang
// kalau dilepas 3 detik bakal lompat 2 angka, kalau 5 detik bakal ke reset
// gatau bang saya bingungggg gimana caranya biar ke resetnya pas button di klik lama
#include <Servo.h>
Servo MyServo;
int segA = 6;
int segB = 7;
int segC = 8;
int segD = 9;
int segE = 10;
int segF = 11;
int segG = 12;
int merah = 4;
int hijau = 5;
int button = 13;
int angka = 0;
int lastButtonState = HIGH;
unsigned long tekanMulai = 0;
void matikanSevenSeg() {
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
}
void setup() {
pinMode(button, INPUT_PULLUP);
MyServo.attach(3);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(merah, OUTPUT);
pinMode(hijau, OUTPUT);
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
matikanSevenSeg();
MyServo.write(0);
}
void resetSemua() {
angka = 0;
MyServo.write(0);
matikanSevenSeg();
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
}
void loop() {
int currentButtonState = digitalRead(button);
if (currentButtonState == LOW && lastButtonState == HIGH) {
tekanMulai = millis();
}
if (currentButtonState == HIGH && lastButtonState == LOW) {
unsigned long durasiTekan = millis() - tekanMulai;
if (durasiTekan >= 5000) {
resetSemua();
} else if (durasiTekan >= 3000) {
angka += 2;
if (angka > 9) angka = 1;
tampilangka(angka);
gerakServo(angka);
nyalakanLED(angka);
} else {
angka++;
if (angka > 9) angka = 1;
tampilangka(angka);
gerakServo(angka);
nyalakanLED(angka);
}
}
lastButtonState = currentButtonState;
delay(10);
}
void gerakServo(int digit) {
if (digit == 0) {
MyServo.write(0);
return;
}
int sudut = digit * 20;
MyServo.write(sudut);
}
void nyalakanLED(int digit) {
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
if (digit == 0) return;
for (int i = 1; i <= digit; i++) {
if (i % 2 == 1) {
digitalWrite(hijau, LOW);
digitalWrite(merah, HIGH);
} else {
digitalWrite(hijau, HIGH);
digitalWrite(merah, LOW);
}
delay(500);
}
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
}
void tampilangka(int digit) {
matikanSevenSeg();
if (digit == 0) return;
if (digit == 1) {
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
} else if (digit == 2) {
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segD, HIGH);
} else if (digit == 3) {
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
} else if (digit == 4) {
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
} else if (digit == 5) {
digitalWrite(segA, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
} else if (digit == 6) {
digitalWrite(segA, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
} else if (digit == 7) {
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
} else if (digit == 8) {
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
} else if (digit == 9) {
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
}
}