#define BUTTON 2
#define BUZZER 4
#include <LiquidCrystal_I2C.h>
#include <GTimer.h>
#include <EncButton.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
GTimer<millis> backlight;
GTimer<millis> screen_show;
GTimer<millis> buz;
Button b(BUTTON, INPUT, HIGH);
bool alarm = false;
byte drop[] = {
B00100,
B01110,
B11111,
B11111,
B01110,
B00000,
B00000,
B00000
};
byte bell[] = {
B00100,
B01110,
B01110,
B11111,
B00100,
B00000,
B00000,
B00000
};
byte home[] = {
B00000,
B00100,
B01110,
B11111,
B11111,
B11111,
B11111,
B00000
};
byte window[] = {
B00000,
B11111,
B10101,
B11111,
B10101,
B11111,
B00000,
B00000
};
byte watch[] = {
B00000,
B01110,
B10011,
B10101,
B10001,
B01110,
B00000,
B00000
};
byte wind[] = {
B10000,
B01111,
B00000,
B11111,
B00000,
B01111,
B10000,
B00000
};
byte precipitation[] = {
B01000,
B11100,
B11100,
B01010,
B00111,
B00111,
B00010,
B00000
};
void setup() {
lcd.init();
lcd.backlight();
//lcd.noBacklight();
lcd.createChar(1, bell);
lcd.createChar(2, drop);
lcd.createChar(3, home);
lcd.createChar(4, window);
lcd.createChar(5, watch);
lcd.createChar(6, wind);
lcd.createChar(7, precipitation);
//backlight.setMode(GTMode::Timeout);
backlight.setMode(GTMode::Overflow);
backlight.setTime(15000);
backlight.start();
screen_show.setMode(GTMode::Overflow);
screen_show.setTime(10000);
screen_show.start();
screen_show.force();
buz.setMode(GTMode::Interval);
buz.setTime(1000);
buz.start();
pinMode(BUZZER, OUTPUT);
}
void loop() {
/*
b.tick();
alarm_check();
if (backlight) lcd.noBacklight();
else lcd.backlight();
if (b.click()) {
if (backlight) backlight.start();
else {
backlight.start();
if (screen_show) screen_show.start();
else screen_show.force();
}
}
if (b.hasClicks(2)) {
alarm = !alarm;
}
if (b.hasClicks(3)) {
lcd_screen_ip();
}
if (screen_show) lcd_screen_one();
else lcd_screen_two();
if (b.hold()) reset_wifi();
*/
lcd_screen_one();
delay(1000);
lcd_screen_two();
delay(1000);
}
void alarm_check() {
if (alarm) {
bool i = false;
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("21:30");
while(true) {
b.tick();
if (b.press()) {
alarm = !alarm;
digitalWrite(BUZZER, LOW);
screen_show.start();
break;
}
if (buz) i = !i;
if (i) {
lcd.backlight();
digitalWrite(BUZZER, HIGH);
lcd.setCursor(6, 1);
lcd.print("0w0");
} else {
lcd.noBacklight();
digitalWrite(BUZZER, LOW);
lcd.setCursor(6, 1);
lcd.print("-w-");
}
delay(0);
}
}
}
void lcd_screen_ip () {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("192.168.8.1");
lcd.setCursor(0, 1);
lcd.print("Open in browser");
int i = 10;
while (true) {
delay(1000);
i = i - 1;
if (i == 0) break;
}
backlight.start();
}
void lcd_screen_one () {
// первая строка
lcd.setCursor(0, 0);
if (alarm) lcd.write(1);
else lcd.print(" ");
lcd.print("21:30");
//lcd.setCursor(11, 0);
lcd.print(" ");
lcd.write(3);
lcd.print("1.1");
lcd.write(223);
lcd.print("C ");
// вторая строка
lcd.setCursor(0, 1);
lcd.print("17.07.22");
//lcd.setCursor(11, 1);
lcd.print(" ");
lcd.write(2);
lcd.print("56");
lcd.print("%");
lcd.print(" ");
}
void lcd_screen_two () {
// первая строка
lcd.setCursor(0, 0);
lcd.write(5);
lcd.print("11:20");
//lcd.setCursor(11, 0);
lcd.print(" ");
lcd.write(4);
lcd.print("-1.1");
lcd.write(223);
lcd.print("C");
// вторая строка
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print("Wed");
//lcd.setCursor(8, 1);
lcd.print(" ");
lcd.write(6);
lcd.print("10");
lcd.print("Km/h");
lcd.print(" ");
}
void reset_wifi () {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Reset Wi-Fi? ");
lcd.setCursor(0, 1);
lcd.print("Tap-No Hold-Yes");
while(true) {
b.tick();
if (b.click()) break;
if (b.hold()) {
break;
}
delay(0);
}
backlight.start();
}