#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C (alamat 0x27 dan ukuran 16x2)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi pin push button
const int button1Pin = 2; // Pin untuk push button 1 (menambah angka)
const int button2Pin = 3; // Pin untuk push button 2 (mengurangi angka)
const int button3Pin = 4; // Pin untuk push button 3 (reset dan menambah 1 setiap 1,5 detik sampai angka maksimal)
const int button4Pin = 5; // Pin untuk push button 4 (nilai maksimal dan mengurangi angka dengan delay 1,5 detik)
// Variabel untuk menyimpan angka yang ditampilkan
int number = 0;
// Nilai maksimal
const int maxNumber = 18;
void setup() {
// Inisialisasi pin push button sebagai input
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(button3Pin, INPUT_PULLUP);
pinMode(button4Pin, INPUT_PULLUP);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Tampilkan nama dan tanggal lahir pada LCD
lcd.setCursor(0, 0);
lcd.print("M.Rakha Atthala"); // Ganti "Your Name" dengan nama Anda
lcd.setCursor(0, 1);
lcd.print("Tgl : 13/05/2008"); // Ganti "DD/MM/YYYY" dengan tanggal lahir Anda
// Delay 1,5 detik sebelum menampilkan teks "Counter"
delay(1500);
displayCounter();
}
void loop() {
static bool incrementMode = false;
static bool decrementMode = false;
static unsigned long lastIncrementTime = 0;
static unsigned long lastDecrementTime = 0;
// Membaca status push button
if (digitalRead(button1Pin) == LOW) {
number++;
if (number > maxNumber) {
number = 18;
}
displayCounter();
delay(200); // Debouncing delay
incrementMode = false;
decrementMode = false;
}
if (digitalRead(button2Pin) == LOW) {
number--;
if (number < 0) {
number = 0;
}
displayCounter();
delay(200); // Debouncing delay
incrementMode = false;
decrementMode = false;
}
if (digitalRead(button3Pin) == LOW) {
number = 0;
displayCounter();
incrementMode = true;
decrementMode = false;
lastIncrementTime = millis();
delay(200); // Debouncing delay
}
if (digitalRead(button4Pin) == LOW) {
number = maxNumber;
displayCounter();
incrementMode = false;
decrementMode = true;
lastDecrementTime = millis();
delay(200); // Debouncing delay
}
// Mode penambahan angka dengan delay 1,5 detik
if (incrementMode) {
if (millis() - lastIncrementTime >= 1500) {
number++;
if (number > maxNumber) {
number = 18;
}
displayCounter();
lastIncrementTime = millis();
}
}
// Mode pengurangan angka dengan delay 1,5 detik
if (decrementMode) {
if (millis() - lastDecrementTime >= 1500) {
number--;
if (number < 0 ) {
number = 0;
}
displayCounter();
lastDecrementTime = millis();
}
}
}
// Fungsi untuk menampilkan counter pada LCD
void displayCounter() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("M.Rakha Atthala");
lcd.setCursor(0, 1);
lcd.print("Counter:");
lcd.print(number);
}