# include <Wire.h>
# include <LiquidCrystal_I2C.h>
# include <TimeLib.h>
# define BUTTON_PIN A0
# define NO_BUTTON 0
# define BUTTON1 1
# define BUTTON2 2
# define BUTTON3 3
# define DELAY_TIME 100
# define STARTING " starting ... "
# define TIME_OFFSET 1672531200
# define TIME_LINE 0
LiquidCrystal_I2C lcd (0x27, 16, 2);
time_t current_time = 0;
bool time_has_moved = false;
unsigned short button_pressed = 0;
unsigned short button_clicked = 0;
//const char *ALL_MENU[] = {};
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.display();
lcd.clear();
lcd.print(STARTING);
setup_time();
Serial.begin(9600);
}
void setup_time(){
setTime(TIME_OFFSET);
}
void loop()
{
get_current_time();
capture_button_click();
//if (time_has_moved) display_current_time();
if (button_clicked) print_button_clicked();
delay(DELAY_TIME);
}
void capture_button_click(){
int temp = analogRead(BUTTON_PIN);
if (temp < 200){
if (button_pressed == NO_BUTTON){
button_clicked = NO_BUTTON;
}
else if (button_clicked == NO_BUTTON){
button_clicked = button_pressed;
}
button_pressed = NO_BUTTON;
}
else if (temp < 400)
button_pressed = BUTTON1;
else if (temp < 1000)
button_pressed = BUTTON2;
else
button_pressed = BUTTON3;
Serial.println(button_clicked);
}
void print_button_clicked(){
char buffer[10];
sprintf(buffer, "Clicked B%d", button_clicked);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print(buffer);
}
void get_current_time(){
time_t t = now();
if (t != current_time ){
current_time = t;
time_has_moved = true;
}
else
time_has_moved = false;
}
void display_current_time(){
char buffer[16];
int h = hour(current_time);
int m = minute(current_time);
int s = second(current_time);
int w = weekday(current_time);
int D = day(current_time);
int M = month(current_time);
sprintf(buffer, "%02d/%02d %02d:%02d:%02d", D, M, h, m, s);
lcd.setCursor(0, TIME_LINE);
lcd.print(buffer);
}