#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int vpot1 = A3;
const int vpot2 = A2;
const int button1 = 2;
const int button2 = 3;
const int ledPin = 4;
const int bzrPin = 5;
volatile bool isr1Active = false;
volatile bool isr2Active = false;
unsigned long isr1StartTime = 0;
unsigned long isr2StartTime = 0;
bool lcdPrinted = false;
void X1() {
isr1Active = true;
isr1StartTime = millis();
}
void X2() {
isr2Active = true;
isr2StartTime = millis();
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(bzrPin, OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(button1), X1, FALLING);
attachInterrupt(digitalPinToInterrupt(button2), X2, FALLING);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Ready");
delay(2000);
lcd.clear();
}
void loop() {
unsigned long currentTime = millis();
if (!isr1Active && !isr2Active && lcdPrinted) {
lcd.clear();
lcdPrinted = false;
}
// LOGIK UNTUK BUTTON 1 (ISR 1) - LED Menyala 7 saat (Ikut Lab Assessment)
if (isr1Active && (currentTime - isr1StartTime < 7000)) {
digitalWrite(ledPin, HIGH);
if (!lcdPrinted) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LED ISR1 ON");
lcd.setCursor(0, 1);
lcd.print("7 Seconds");
lcdPrinted = true;
}
}
// LOGIK UNTUK BUTTON 2 (ISR 2) - Buzzer Berbunyi 6 saat
else if (isr2Active && (currentTime - isr2StartTime < 6000)) {
tone(bzrPin, 1000); // Guna tone supaya bunyi keluar di Wokwi
if (!lcdPrinted) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BZR ISR2 ON");
lcd.setCursor(0, 1);
lcd.print("6 Seconds");
lcdPrinted = true;
}
}
// KEADAAN ASAL / TAMAT TEMPOH - Papar Bacaan Potentiometer
else {
digitalWrite(ledPin, LOW);
noTone(bzrPin); // Matikan tone buzzer dengan betul
isr1Active = false;
isr2Active = false;
lcdPrinted = false;
// Mengekalkan kod paparan Potentiometer asal anda di bawah ini:
int adc1 = analogRead(vpot1);
float volt1 = (adc1 / 1023.0) * 2.5;
int adc2 = analogRead(vpot2);
float volt2 = (adc2 / 1023.0) * 5.0;
lcd.setCursor(0, 0);
lcd.print("POT1: ");
lcd.print(volt1, 1);
lcd.print("V, ");
lcd.print(adc1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("POT2: ");
lcd.print(volt2, 1);
lcd.print("V, ");
lcd.print(adc2);
lcd.print(" ");
delay(200);
}
}