#include <LiquidCrystal_I2C.h>
#define tombol 2 // pin 2 (pin interrupt) bernama tombol
#define motorPin 11 // pin 11 untuk motor
#define motorDelay 5000 // Waktu rotasi motor dalam milidetik
#define stopDelay 3000 // Waktu motor berhenti dalam milidetik
#define restartDelay 7000 // Waktu sebelum penghitungan dimulai ulang dalam milidetik
volatile int count = 50; // Mulai dari 50
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(tombol, INPUT);
pinMode(motorPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), tombol_ditekan, FALLING);
}
void loop() { // Main Program
// Rotasi motor ke kanan selama 5 detik
digitalWrite(motorPin, HIGH);
delay(motorDelay);
// Stop motor selama 3 detik
digitalWrite(motorPin, LOW);
delay(stopDelay);
// Rotasi motor ke kiri selama 5 detik
digitalWrite(motorPin, HIGH);
delay(motorDelay);
// Stop motor selama 3 detik
digitalWrite(motorPin, LOW);
delay(stopDelay);
// LCD menampilkan counting dari 50 sampai 0
lcd.setCursor(0, 0);
lcd.print("Count: ");
lcd.setCursor(0, 1);
lcd.print(count);
// Pengurangan integer count dengan angka 1
count -= 1;
// Jika count mencapai 0, reset kembali ke 50 dan tunggu 3 detik
if (count < 0) {
count = 50;
delay(stopDelay);
}
}
// Fungsi interrupt tombol ditekan
void tombol_ditekan() {
count = 50; // Mengatur ulang hitungan
delay(restartDelay);
}