#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address, columns, rows
const int buttonLeftPin = 2; // Pin for left button (mode selection)
const int buttonRightPin = 3; // Pin for right button (mode selection)
const int buttonStartPin = 4; // Pin for start button
bool mc=0;
const int potPin = A0; // Pin for potentiometer
const int buzzerPin = 5; // Pin for the buzzer
const int S_pin = 6; // Pin for the buzzer
int prevA0 = 0;
int mode = 0; // Current food mode
int timer = 0; // Timer for the selected food
bool timerStarted = false;
unsigned long previousMillis = 0;
const long interval = 1000; // Interval for timer update in milliseconds
void setup() {
lcd.begin(16, 2);
lcd.backlight(); // Turn on the backlight
lcd.print("Food Alarm");
pinMode(buttonLeftPin, INPUT_PULLUP);
pinMode(buttonRightPin, INPUT_PULLUP);
pinMode(buttonStartPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(S_pin, OUTPUT);
}
void loop() {
if(!digitalRead(buttonStartPin)){
lcd.clear();
digitalWrite(S_pin, HIGH);
lcd.setCursor(0, 0);
lcd.print("Timer Started");
for(int k=timer;k>1;k--){
lcd.setCursor(0, 1);
lcd.print("Timeout In:");
lcd.print(k);
lcd.print(" ");
delay(1000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Food Ready");
digitalWrite(buzzerPin, HIGH);
delay(5000);
digitalWrite(buzzerPin, LOW);
digitalWrite(S_pin, LOW);
}
if(!digitalRead(buttonLeftPin)){
delay(500);
mode--;
if(mode<0){
mode=0;
}
mc=1;
lcd.clear();
}
if(!digitalRead(buttonRightPin)){
delay(500);
mode++;
if(mode>6){
mode=6;
}
mc=1;
lcd.clear();
}
if (mc){
if(mode==0){
lcd.setCursor(0, 0);
lcd.print("0. Dosa");
lcd.setCursor(0, 1);
lcd.print("Time=7");
lcd.print(" ");
timer=7;
}
if(mode==1){
lcd.setCursor(0, 0);
lcd.print("1. Idli");
lcd.setCursor(0, 1);
lcd.print("Time=10");
timer=10;
}
if(mode==2){
lcd.setCursor(0, 0);
lcd.print("2. Biryani");
lcd.setCursor(0, 1);
lcd.print("Time=12");
timer=12;
}
if(mode==3){
lcd.setCursor(0, 0);
lcd.print("3. Chapathi");
lcd.setCursor(0, 1);
lcd.print("Time=15");
timer=15;
}
if(mode==4){
lcd.setCursor(0, 0);
lcd.print("4. Kadala");
timer=18;
lcd.setCursor(0, 1);
lcd.print("Time=18");
}
if(mode==5){
lcd.setCursor(0, 0);
lcd.print("5. Puttu");
timer=20;
lcd.setCursor(0, 1);
lcd.print("Time=20");
}
if(mode==6){
lcd.setCursor(0, 0);
lcd.print("6. Mannual");
lcd.setCursor(0, 1);
lcd.print("Time=");
lcd.print(timer);
lcd.print(" ");
}
mc=0;
}
if(mode==6){
// Read the current analog value from pin A0
int currentA0 = analogRead(A0);
// Check if the current reading is different from the previous reading by more than ±10
if (abs(currentA0 - prevA0) > 10) {
// Your code here to handle the condition when the difference is more than ±10
// Update the previous analog reading
prevA0 = currentA0;
mc=1;
timer = map(currentA0, 0, 1023, 1, 60); // Map pot value to timer range (1 to 60 minutes)}
}}
}