#include <LiquidCrystal.h>
// Initialize the non-I2C LCD (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(13,12, 11, 10, 9, 8);
// Define analog inputs
#define POT1 A3
#define POT2 A1
// Define digital pins
#define BUTTON1 2
#define LED1 4
#define BUTTON2 3
#define BUZZER 5
volatile bool ledTriggered = false;
volatile bool buzzerTriggered = false;
unsigned long ledStartTime = 0;
unsigned long buzzerStartTime = 0;
bool ledActive = false;
bool buzzerActive = false;
void ISR1() {
ledTriggered = true;
ledStartTime = millis();
ledActive = true;
}
void ISR2() {
buzzerTriggered = true;
buzzerStartTime = millis();
buzzerActive = true;
}
void setup() {
lcd.begin(16, 2);
pinMode(POT1, INPUT);
pinMode(POT2, INPUT);
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
attachInterrupt(digitalPinToInterrupt(BUTTON1), ISR1, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON2), ISR2, FALLING);
}
void loop() {
float pot1Value = analogRead(POT1) * (2.5 / 1023.0);
int pot1Digital = analogRead(POT1);
float pot2Value = analogRead(POT2) * (5.0 / 1023.0);
int pot2Digital = analogRead(POT2);
if (!ledActive && !buzzerActive) {
lcd.setCursor(0, 0);
lcd.print("POT1: ");
lcd.print(pot1Value, 1);
lcd.print("V ");
lcd.print(pot1Digital);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("POT2: ");
lcd.print(pot2Value, 1);
lcd.print("V ");
lcd.print(pot2Digital);
lcd.print(" ");
}
// Handle LED logic
if (ledTriggered) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LED ISR1 ON");
lcd.setCursor(0, 1);
lcd.print("8 Seconds");
digitalWrite(LED1, HIGH);
ledTriggered = false;
}
if (ledActive && millis() - ledStartTime >= 7000) {
digitalWrite(LED1, LOW);
ledActive = false;
lcd.clear();
}
// Handle Buzzer logic
if (buzzerTriggered) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BZR ISR2 ON");
lcd.setCursor(0, 1);
lcd.print("6 Seconds");
digitalWrite(BUZZER, HIGH);
buzzerTriggered = false;
}
if (buzzerActive && millis() - buzzerStartTime >= 6000) {
digitalWrite(BUZZER, LOW);
buzzerActive = false;
lcd.clear();
}
delay(500);
}