#include <TM1637Display.h>
#include <EEPROM.h> // Library untuk menggunakan EEPROM
// Pin untuk TM1637
#define CLK 2 // Pin clock untuk TM1637
#define DIO 3 // Pin data untuk TM1637
// Pin untuk tombol
#define COUNTER_BUTTON 4
#define STOP_BUTTON 5
#define RESET_BUTTON 6
// Pin untuk buzzer
#define BUZZER 7
// Inisialisasi TM1637 display (untuk 8 digit)
TM1637Display display(CLK, DIO);
// Variabel counter dan status
unsigned long counter = 0; // Menggunakan long untuk menangani lebih banyak digit
bool isCounting = true;
bool lastButtonState = HIGH; // Menyimpan status tombol terakhir
bool buttonPressed = false; // Status tombol saat ini
void setup() {
// Inisialisasi serial monitor untuk debugging
Serial.begin(9600);
// Inisialisasi tombol sebagai input
pinMode(COUNTER_BUTTON, INPUT_PULLUP);
pinMode(STOP_BUTTON, INPUT_PULLUP);
pinMode(RESET_BUTTON, INPUT_PULLUP);
// Inisialisasi buzzer sebagai output
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
// Membaca nilai counter dari EEPROM
counter = EEPROM.read(0) | (EEPROM.read(1) << 8) | (EEPROM.read(2) << 16) | (EEPROM.read(3) << 24); // Membaca 4 byte dari EEPROM
// Cek jika nilai counter tidak valid (0xFFFFFFFF atau 0xFF)
if (counter == 0xFFFFFFFF) {
counter = 0; // Inisialisasi counter ke 0 jika nilai tidak valid
}
// Inisialisasi display
display.setBrightness(7); // Set kecerahan (0-7)
display.showNumberDec(counter); // Menampilkan nilai counter pada 8 digit
// Debugging
Serial.println("Program started");
}
void loop() {
// Membaca status tombol COUNTER
bool currentButtonState = digitalRead(COUNTER_BUTTON);
// Mengecek apakah tombol ditekan
if (currentButtonState == LOW && lastButtonState == HIGH && !buttonPressed) {
// Tombol baru saja ditekan
buttonPressed = true;
counter += 100; // Tambah counter jika tombol ditekan
if (counter % 1000 == 0) {
activateBuzzer(); // Bunyi buzzer
}
display.showNumberDec(counter); // Update display dengan nilai counter
Serial.print("Counter: ");
Serial.println(counter);
// Simpan nilai counter ke EEPROM (Menyimpan 4 byte)
EEPROM.write(0, counter & 0xFF);
EEPROM.write(1, (counter >> 8) & 0xFF);
EEPROM.write(2, (counter >> 16) & 0xFF);
EEPROM.write(3, (counter >> 24) & 0xFF);
}
if (currentButtonState == HIGH) {
buttonPressed = false; // Reset status tombol jika dilepas
}
// Tombol stop
if (digitalRead(STOP_BUTTON) == LOW) {
delay(200); // Debounce
isCounting = !isCounting;
while (digitalRead(STOP_BUTTON) == LOW); // Tunggu tombol dilepas
}
// Tombol reset
if (digitalRead(RESET_BUTTON) == LOW) {
delay(200); // Debounce
counter = 0;
display.showNumberDec(counter); // Menampilkan nilai 0 pada display
// Simpan nilai reset ke EEPROM
EEPROM.write(0, counter & 0xFF);
EEPROM.write(1, (counter >> 8) & 0xFF);
EEPROM.write(2, (counter >> 16) & 0xFF);
EEPROM.write(3, (counter >> 24) & 0xFF);
while (digitalRead(RESET_BUTTON) == LOW); // Tunggu tombol dilepas
}
delay(50); // Delay sedikit untuk menghindari bouncing tombol
}
// Fungsi untuk mengaktifkan buzzer
void activateBuzzer() {
digitalWrite(BUZZER, HIGH);
delay(2000); // Buzzer berbunyi selama 2 detik
digitalWrite(BUZZER, LOW);
}