#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// lcd object (i2c)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Seven segment display dengan push button, animasi loading, dan LCD
// Oleh Kelompok 5, Kelas XI-10
// Gunakan tombol merah untuk menambah angka dan biru untuk mengurangi angka!
// SHORTCUT: 1 untuk menambah dan 2 untuk mengurangi (pastikan klik dulu window bagian simulation).
// pin-pin untuk seven segment display
int A = 2;
int B = 3;
int C = 4;
int D = 6;
int DP = 5;
int E = 7;
int F = 8;
int G = 9;
int switchUpPin = 13; // pin untuk tombol naik
int switchDownPin = 12; // pin untuk tombol turun
int buzzerPin = 10; // pin untuk buzzer
int counter = 0;
int buttonUpState = 0;
int lastButtonUpState = 0;
int buttonDownState = 0;
int lastButtonDownState = 0;
unsigned long previousMillis = 0;
const long interval = 500; // interval kedip (dalam ms)
bool lcdState = false;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
// set pin mode untuk seven segment display
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(DP, HIGH); // matikan decimal point
Serial.println("!!! Code modified by Bhagaskara !!!");
delay(1000);
Serial.println("Loading...");
loadingAnimation();
Serial.println("Seven Segment Counter siap digunakan!");
Serial.println("Tekan tombol UP (warna biru) untuk menambah angka, DOWN (warna merah) untuk mengurangi.");
Serial.println("Angka saat ini: 0");
// tulisan di lcd
lcd.setCursor(0, 0);
lcd.print("Kelompok 5");
lcd.setCursor(0, 1);
lcd.print("Kelas XI-10");
}
void loop()
{
unsigned long currentMillis = millis();
// kedip kedip lcd
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (lcdState) {
lcd.noDisplay();
} else {
lcd.display();
}
lcdState = !lcdState;
}
buttonUpState = digitalRead(switchUpPin);
buttonDownState = digitalRead(switchDownPin);
// cek tombol naik
if (buttonUpState != lastButtonUpState)
{
if (buttonUpState == HIGH)
{
if(counter == 9)
{
counter = -1;
}
counter++;
Serial.print("Angka naik: ");
Serial.println(counter);
changeNumber(counter);
buzz();
delay(300);
}
delay(50);
}
// cek tombol turun
if (buttonDownState != lastButtonDownState)
{
if (buttonDownState == HIGH)
{
if(counter == 0)
{
counter = 10;
}
counter--;
Serial.print("Angka turun: ");
Serial.println(counter);
changeNumber(counter);
buzz();
delay(300);
}
delay(50);
}
lastButtonUpState = buttonUpState;
lastButtonDownState = buttonDownState;
changeNumber(counter);
}
void changeNumber(int buttonPress)
{
switch (buttonPress)
{
// konfigurasi untuk setiap angka 0-9
case 0:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 1:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 2:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
break;
case 3:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
break;
case 4:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 5:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 6:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 7:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 8:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 9:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
}
}
void buzz()
{
// bunyikan buzzer sebentar
tone(buzzerPin, 68);
delay(50);
noTone(buzzerPin);
}
void loadingAnimation()
{
// anim loading
for (int i = 0; i < 3; i++) { // loop 3x
digitalWrite(A, LOW); delay(100); digitalWrite(A, HIGH);
digitalWrite(B, LOW); delay(100); digitalWrite(B, HIGH);
digitalWrite(C, LOW); delay(100); digitalWrite(C, HIGH);
digitalWrite(D, LOW); delay(100); digitalWrite(D, HIGH);
digitalWrite(E, LOW); delay(100); digitalWrite(E, HIGH);
digitalWrite(F, LOW); delay(100); digitalWrite(F, HIGH);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
delay(200);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
delay(200);
}
}