#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int led1=13;
int led2=12;
int led3=11;
int btn1=2;
int btn2=3;
int btn3=4;
double ledblink=160;
bool btnsta1=0;
bool btnprevsta1=0;
bool ledsta1=0;
bool btnsta2=0;
bool btnprevsta2=0;
bool ledsta2=0;
bool btnsta3=0;
bool btnprevsta3=0;
bool ledsta3=0;
unsigned long settime=60000; //ตั้งเวลา
unsigned long starttime1=0;
unsigned long starttime2=0;
unsigned long starttime3=0;
unsigned long elapetime1=0;
unsigned long elapetime2=0;
unsigned long elapetime3=0;
unsigned long oldelapetime1=0;
unsigned long oldelapetime2=0;
unsigned long oldelapetime3=0;
unsigned long minelapetime1=0;
unsigned long oldminelapetime1=0;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
pinMode(btn3, INPUT);
// Init
lcd.init();
lcd.backlight();
// Print something
lcd.setCursor(0, 0);
lcd.print("Hello, world!");
lcd.setCursor(0, 1);
lcd.print("V0.1 07/11/23");
delay(500);
lcd.clear();
}
void loop() {
btnsta1=digitalRead(btn1);
btnsta2=digitalRead(btn2);
btnsta3=digitalRead(btn3);
if(btnsta1==1){
checkled1();
}
else{
digitalWrite(led1, LOW);
//Serial.println("Tray_1 Cooling stop");
btnprevsta1=0;
starttime1=millis();
}
if(btnsta2==1){
checkled2();
}
else{
digitalWrite(led2, LOW);
//Serial.println("Tray_2 Cooling stop");
btnprevsta2=0;
starttime2=millis();
}
if(btnsta3==1){
checkled3();
}
else{
digitalWrite(led3, LOW);
//Serial.println("Tray_3 Cooling stop");
btnprevsta3=0;
starttime3=millis();
}
display();
//Serial.print("oldminelapetime1=");
//Serial.println(oldminelapetime1);
//delay(1000);
}
void checkled1(){
if(btnprevsta1=0){
starttime1=millis();
digitalWrite(led1, HIGH);
}
else{
minelapetime1=elapetime1/36000;
elapetime1=millis()-starttime1;
if(elapetime1>=settime){
digitalWrite(led1, LOW);
delay(ledblink);
digitalWrite(led1, HIGH);
delay(ledblink);
digitalWrite(led1, LOW);
//Serial.println("Tray_1 Overtime");
//lcd.setCursor(0, 0);
//lcd.print("Hello, world!");
//minelapetime1=elapetime1/36000;
oldminelapetime1=elapetime1/36000;
}
else{
//Serial.println("Tray_1 Cooling start");
//lcd.clear();
//lcd.setCursor(0, 0);
//lcd.print("Tray_1 Start");
digitalWrite(led1, HIGH);
}
oldminelapetime1=elapetime1/36000;
Serial.print("elapetime1=");
Serial.println(elapetime1);
Serial.print("min1=");
Serial.println(minelapetime1);
}
//Serial.print("elapetime1=");
//Serial.println(elapetime1);
}
void checkled2(){
if(btnprevsta2=0){
starttime2=millis();
digitalWrite(led2, HIGH);
}
else{
elapetime2=millis()-starttime2;
if(elapetime2>=settime){
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
//Serial.println("Tray_2 Overtime");
}
else{
//Serial.println("Tray_2 Cooling start");
digitalWrite(led2, HIGH);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tray2=");
lcd.setCursor(7, 0);
lcd.print(settime/1000-elapetime2/1000);
delay(500);
}
}
void checkled3(){
if(btnprevsta3=0){
starttime3=millis();
digitalWrite(led3, HIGH);
}
else{
elapetime3=millis()-starttime3;
if(elapetime3>=settime){
digitalWrite(led3, LOW);
delay(150);
digitalWrite(led3, HIGH);
delay(150);
digitalWrite(led3, LOW);
Serial.println("Tray_3 Overtime");
}
else{
//Serial.println("Tray_3 Cooling start");
digitalWrite(led3, HIGH);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tray3=");
lcd.setCursor(7, 0);
lcd.print(settime/1000-elapetime3/1000);
delay(500);
}
}
void display(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T1=");
lcd.setCursor(5, 0);
lcd.print("T2=");
lcd.setCursor(0, 1);
lcd.print("T3=");
lcd.setCursor(5, 1);
lcd.print("T4=");
}