#include <LiquidCrystal_I2C.h>
#include <EncButton.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
EncButton eb(7, 6, 8);
Button butt(4);
int flag = 0;
uint32_t tmr;
uint32_t tmr1;
int ticket = 1;
int h;
int m;
int cursor = 0;
int il;
byte on;
uint32_t times;
byte time_mode;
uint32_t timer;
byte rel_on;
void setup() {
Serial.begin(9600);
butt.setButtonLevel(HIGH);
eb.setButtonLevel(HIGH);
eb.setEncType(EB_STEP);
pinMode(5, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Start System...");
delay(1500);
lcd.clear();
}
void loop() {
Serial.println(time_mode);
eb.tick();
butt.tick();
if (eb.right() && cursor == 0) {
flag ++;
lcd.clear();
if (flag > 2) {
flag = 2;
}
}
if (eb.left() && cursor == 0) {
lcd.clear();
flag --;
if (flag < 0) {
flag = 0;
}
}
if (eb.rightH()) {
cursor ++;
if (flag == 2) {
if (cursor > 2) {
cursor = 2;
}
}
if (flag == 1 || flag == 0) {
if (cursor > 1) {
cursor = 1;
}
}
aboba();
}
if (eb.leftH()) {
cursor --;
if (cursor < 0) {
cursor = 0;
}
aboba();
}
if (flag == 0) {
lcd.setCursor(14, 0);
lcd.print("M1");
lcd.setCursor(1, 1);
lcd.print("Ticket:" + String(ticket) + " ");
if (butt.click()) {
ticket --;
if (ticket < 0) {
ticket = 0;
}
}
if (ticket == 0) {
if (il < 10) {
if (millis() - tmr >= 500) {
tmr = millis();
digitalWrite(5, !on);
on = !on;
il += 1;
}
}
}
if (eb.right() && cursor == 1) {
ticket ++;
il = 0;
if (ticket > 100) {
ticket = 100;
}
}
if (eb.left() && cursor == 1) {
ticket --;
il = 0;
if (ticket < 1) {
ticket = 1;
}
}
}
if (flag == 1) {
lcd.setCursor(14, 0);
lcd.print("M2");
lcd.setCursor(1, 1);
lcd.print("Time:" + String(h) + ":" + String(m) + " ");
lcd.setCursor(15, 1);
lcd.print(time_mode);
times = (h * 60 + m) * 60000;
if (eb.right() && cursor == 1) {
m ++;
if (m > 59 && h < 23) {
m = 0;
h += 1;
if (h > 23) {
h = 23;
}
}
}
if (eb.left() && cursor == 1) {
m --;
if (h == 0 && m < 0) {
m = 0;
}
if (m < 0 && h > 0) {
m = 59;
h -= 1;
if (h < 0) {
h = 0;
}
}
}
if (butt.click()) {
time_mode = 1;
timer = millis();
}
if (time_mode == 1) {
if (millis() - timer >= times) {
digitalWrite(5, 1);
//
}
if (millis() - timer >= (times + 10000)) {
digitalWrite(5, 0);
time_mode = 0;
}
}
}
if (flag == 2) {
lcd.setCursor(14, 0);
lcd.print("M3");
lcd.setCursor(1, 1);
lcd.print("Pl:" + String(ticket) + " ");
lcd.setCursor(8, 1);
lcd.print("Tm:" + String(h) + ":" + String(m) + " ");
times = (h * 60 + m) * 60000;
if (butt.click()) {
ticket --;
if (ticket < 0) {
ticket = 0;
}
}
if (ticket == 0) {
tmr1 = millis();
if (il < 10) {
if (millis() - tmr >= 500) {
tmr = millis();
digitalWrite(5, !on);
on = !on;
il += 1;
}
}
if (millis() - tmr1 > 10000) {
rel_on = 1;
timer = millis();
}
if (rel_on == 1) {
if (millis() - timer >= times) {
digitalWrite(5, 1);
}
if (millis() - timer >= (times + 10000)) {
digitalWrite(5, 0);
rel_on = 0;
}
}
}
if (eb.left()) {
if (cursor == 1) {
ticket ++;
il = 0;
if (eb.fast()) {
ticket += 5;
}
if (ticket > 100) {
ticket = 100;
}
}
if (cursor == 2) {
m ++;
if (eb.fast()) {
m += 5;
}
if (m > 59 && h < 23) {
m = 0;
h += 1;
}
if (h > 23) {
h = 23;
}
}
}
if (eb.right()) {
if (cursor == 1) {
ticket -= 1;
il = 0;
if (eb.fast()) {
ticket -= 5;
}
if (ticket < 1) {
ticket = 1;
}
}
if (cursor == 2) {
m ++;
if (eb.fast()) {
m += 5;
}
if (h == 0 && m < 0) {
m = 0;
}
if (m < 0 && h > 0) {
m = 59;
h -= 1;
if (h < 0) {
h = 0;
}
}
}
}
}
}
void aboba() {
if (cursor == 0 && (flag == 0 || flag == 1 || flag == 2)) {
print_1();
print_2clr();
}
if (cursor == 1 && (flag == 0 || flag == 1)) {
print_2();
print_1clr();
}
if (cursor == 2 && flag == 2) {
print_3();
print_2clr();
}
if (cursor == 1 && flag == 2) {
print_2();
print_1clr();
print_3clr();
}
}
void print_1() {
lcd.setCursor(0, 0);
lcd.print(">");
}
void print_2() {
lcd.setCursor(0, 1);
lcd.print(">");
}
void print_3() {
lcd.setCursor(7, 1);
lcd.print(">");
}
void print_1clr() {
lcd.setCursor(0, 0);
lcd.print(" ");
}
void print_2clr() {
lcd.setCursor(0, 1);
lcd.print(" ");
}
void print_3clr() {
lcd.setCursor(7, 1);
lcd.print(" ");
}