// GATAU BANG PUSHENGGG
#include <Servo.h>
Servo MyServo;
int button = 2;
int merah = 10;
int hijau = 11;
int segA = 3, segB = 4, segC = 5, segD = 6, segE = 7, segF = 8, segG = 9;
int angkasekarang = 0;
int posisiServo = 0;
int statusbuttonsebelum = LOW;
long waktuMulaiTekan = 0;
int pola7Segment[10][7] = {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
};
int pin7Seg[7] = {segA, segB, segC, segD, segE, segF, segG};
void setup() {
pinMode(button, INPUT);
pinMode(merah, OUTPUT);
pinMode(hijau, OUTPUT);
for (int i = 0; i < 7; i++) {
pinMode(pin7Seg[i], OUTPUT);
}
MyServo.attach(12);
MyServo.write(0);
digitalWrite(hijau, LOW);
digitalWrite(merah, LOW);
for (int i = 0; i < 7; i++) {
digitalWrite(pin7Seg[i], LOW);
}
}
void loop() {
int statusbuttonsekarang = digitalRead(button);
if (statusbuttonsekarang == HIGH && statusbuttonsebelum == LOW) {
delay(50);
if (digitalRead(button) == HIGH) {
waktuMulaiTekan = millis();
for (int i = 0; i < 7; i++) {
digitalWrite(pin7Seg[i], LOW);
}
MyServo.detach();
}
}
if (statusbuttonsekarang == LOW && statusbuttonsebelum == HIGH) {
long durasiTekan = millis() - waktuMulaiTekan;
MyServo.attach(12);
MyServo.write(posisiServo);
if (durasiTekan < 3000) {
tambahAngka();
} else if (durasiTekan >= 3000 && durasiTekan < 5000) {
lompatDuaAngka();
} else {
resetSemua();
}
}
statusbuttonsebelum = statusbuttonsekarang;
}
void tampilkanAngka(int angka) {
for (int i = 0; i < 7; i++) {
digitalWrite(pin7Seg[i], pola7Segment[angka][i]);
}
}
void tambahAngka() {
angkasekarang++;
if (angkasekarang > 9) {
angkasekarang = 1;
posisiServo = 0;
MyServo.write(posisiServo);
delay(300);
}
posisiServo += 20;
if (posisiServo > 180) posisiServo = 180;
MyServo.write(posisiServo);
delay(300);
tampilkanAngka(angkasekarang);
for (int i = 1; i <= angkasekarang; i++) {
if (i % 2 == 1) {
digitalWrite(hijau, HIGH);
digitalWrite(merah, LOW);
} else {
digitalWrite(hijau, LOW);
digitalWrite(merah, HIGH);
}
delay(300);
}
digitalWrite(hijau, LOW);
digitalWrite(merah, LOW);
}
void lompatDuaAngka() {
angkasekarang += 2;
if (angkasekarang > 9) {
angkasekarang = angkasekarang - 9;
}
posisiServo += 40;
if (posisiServo > 180) {
posisiServo = posisiServo - 180;
}
MyServo.write(posisiServo);
delay(300);
tampilkanAngka(angkasekarang);
for (int i = 1; i <= angkasekarang; i++) {
if (i % 2 == 1) {
digitalWrite(hijau, HIGH);
digitalWrite(merah, LOW);
} else {
digitalWrite(hijau, LOW);
digitalWrite(merah, HIGH);
}
delay(300);
}
digitalWrite(hijau, LOW);
digitalWrite(merah, LOW);
}
void resetSemua() {
angkasekarang = 0;
posisiServo = 0;
MyServo.write(posisiServo);
for (int i = 0; i < 7; i++) {
digitalWrite(pin7Seg[i], LOW);
}
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
}