#include <LiquidCrystal_I2C.h> // LiquidCrystal I2C - Version: 1.1.1
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // LCD HEX address 0x27
#define Menu_inc 5
#define Menu_dec 4
#define Menu 2
int Menu_Up = 0;
int Menu_Dn = 0;
int Menu_Sel = 0;
unsigned long a = 0; //
unsigned long b = 250; // time for long press on menu button
unsigned long Sec = 0;
unsigned long Mins = 0;
unsigned long Hours = 0;
int activetime = 0;
int starttime = 0;
int prevoustime = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
int h = 0;
unsigned long startTime = 0;
unsigned long elapsedTime = 0;
boolean buttonState = LOW;
boolean lastButtonState = LOW;
boolean lastMenuState = LOW;
boolean MenuState = LOW;
void setup() {
Serial.begin(9600);
pinMode(Menu_inc, INPUT_PULLUP);
pinMode(Menu_dec, INPUT_PULLUP);
pinMode(Menu, INPUT_PULLUP);
a = millis();
lcd.init(); // initialize the lcd
lcd.backlight(); // turns on the backlight
lcd.setCursor(0, 0); // set cursor to first row
lcd.print("Anne and Johns"); // print out to LCD
lcd.setCursor(0, 1); // set cursor to first row
lcd.print("Heating "); // print out to LCD
delay(1000);
lcd.clear();
}
void loop() {
Menu_Up = digitalRead(Menu_inc);
Menu_Dn = digitalRead(Menu_dec);
Menu_Sel = digitalRead(Menu);
buttonState = digitalRead(Menu);
MenuState = digitalRead(Menu);
//+++++++++++++++++++++Setting the timer for the menu++++++++++++++++++++++++++++++++++++++++++
if (buttonState != lastButtonState and d == 0) {
if (buttonState == LOW) startTime = millis();
}
if (buttonState == HIGH and d == 0) elapsedTime = 0;
if (buttonState == LOW and d == 0) elapsedTime = millis() - startTime;
lastButtonState = buttonState;
//==============================================================================================
if (elapsedTime > b and d == 0) d++, lcd.clear();
if (d == 0) {
activetime = (millis() / 1000) - starttime;
if (prevoustime < activetime) Sec++, prevoustime = activetime;
if (Sec > 59) Mins++, Sec = 0;
if (Mins > 59) Hours++, Mins = 0;
if (Hours > 23) Hours = 0;
if (Hours < 10) lcd.setCursor(0, 0), lcd.print("0"), lcd.setCursor(1, 0);
if (Hours >= 10) lcd.setCursor(0, 0);
lcd.print(Hours);
lcd.setCursor(2, 0);
lcd.print(":");
if (Mins < 10) lcd.setCursor(3, 0), lcd.print("0"), lcd.setCursor(4, 0), lcd.print(Mins);
if (Mins >= 10) lcd.setCursor(3, 0), lcd.print(Mins);
lcd.setCursor(5, 0);
lcd.setCursor(8, 0);
lcd.print("Heating:");
//set the clock so that the time shifts to most relavent number leading zero (01) (10)
//below 10
Serial.print(d);
Serial.print(" Elapsed Timer =");
Serial.print(elapsedTime);
Serial.print(" C =");
Serial.println(c);
}
while (d == 1){
Menu_Sel = digitalRead(Menu);
Menu_Up = digitalRead(Menu_inc);
Menu_Dn = digitalRead(Menu_dec);
MenuState = digitalRead(Menu);
buttonState = digitalRead(Menu);
if (e == 0) {
lcd.clear(), lcd.setCursor(0, 0), lcd.print("Set Time"), e = 1;
}
if(Menu_Dn == LOW) Hours++, delay(250);
if (Hours > 23) Hours = 0;
if (Hours < 10) lcd.setCursor(4, 2), lcd.print("0"), lcd.setCursor(5, 2), lcd.print(Hours);
if (Hours >= 10) lcd.setCursor(4, 2), lcd.print(Hours);
lcd.setCursor(6, 2), lcd.print(":");
if (Mins < 10) lcd.setCursor(7, 2), lcd.print("0"), lcd.setCursor(8, 2), lcd.print(Mins);
if (Mins >= 10) lcd.setCursor(7, 2), lcd.print(Mins);
Serial.print(" d =");
Serial.println(d);
if (Menu_Up == LOW) lcd.clear(), d = 0, e = 0;
break;
}
}