//โปรแกรมย่อย
ตั้งค่าเวลาแสดงผลของไฟ LCD
void setBLTime(){
timeRefBL = millis() + 5000;
}
//โปรแกรมย่อยเปลี่ยนสถานะของตัวเครื่อง
ตามปุ่มที่กด
void transition(int xbutton)
{
switch (state)
{
case MAIN_DISPLAY:
if
(xbutton==btnSELECT){state=ALARM_NO; itmMnu=1;}
break;
case ALARM_NO:
if
(xbutton==btnRIGHT){state=ALARM_SET_MENU;}
break;
case ALARM_SET_MENU:
if (xbutton==btnRIGHT)
{
switch (itmMnu)
{
case 1:
state=SET_AL_STATE;
break;
case 2:
state=SET_TIME;
break;
case 3:
state=SET_TIME;
break;
}
}
else
if(xbutton==btnLEFT)
{
state=ALARM_NO;
}
break;
case SET_AL_STATE:
if ((xbutton==btnRIGHT)
|| (xbutton==btnLEFT)){state=ALARM_SET_MENU;lcd.noBlink();}
break;
case SET_TIME:
if ((xbutton==btnRIGHT)
|| (xbutton==btnLEFT)){state=ALARM_SET_MENU;lcd.noBlink();}
break;
}
}
//โปรแกรมย่อย ตั้งค่าเวลา
รวมเอาทั้งส่วนเวลาเปิด และเวลาปิดเข้าด้วยกันเลย
void setALTime()
{
boolean timeOut=false;
int valHR=0;
int valMIN=0;
int valSet=0;
int rowSet=0;
int colSet=0;
unsigned int maxVal;
boolean setHR=true;
lcd.clear();
lcd.setCursor(0,0);
if(itmMnu==2){lcd.print("START time " + String(SetRelayNumber,DEC));}
else{lcd.print("STOP
time " +
String(SetRelayNumber,DEC));}
lcd.setCursor(0,1);
if(itmMnu==2){
valHR=OAlarmHH[SetRelayNumber-1];
valMIN=OAlarmMM[SetRelayNumber-1];
}else{
valHR=FAlarmHH[SetRelayNumber-1];
valMIN=FAlarmMM[SetRelayNumber-1];
}
lcd.print("HR:00 MIN:00
");
lcd.setCursor(3,1);
lcd.print((valHR < 10 ? "0" : "") + String(valHR));
lcd.setCursor(11,1);
lcd.print((valMIN < 10 ? "0" : "") + String(valMIN));
lcd.blink();
timeRef = millis();
LoopChk:
if(setHR==true)
{
maxVal=23;
colSet=3;
rowSet=1;
valSet=valHR;
}
else
{
maxVal=59;
colSet=11;
rowSet=1;
valSet=valMIN;
}
while ( (unsigned
long)(millis() - timeRef) < 10000 )
{
lcd.setCursor(colSet,rowSet);
button = read_LCD_buttons();
waitButtonRelease();
if (button == btnUP )
{
valSet < maxVal ? valSet++
: valSet=maxVal ;
timeRef = millis();
}
else if(button==btnDOWN)
{
valSet > 0 ? valSet-- : valSet ;
timeRef = millis();
}
else if(button == btnRIGHT)
{
if(setHR){valHR=valSet;
setHR=false; timeRef = millis(); goto LoopChk;}
else
{
valMIN=valSet;
saveTime(valHR,valMIN);
saveEEPROM(itmMnu);
showSave();
timeOut=true;
break;
}
}
else if(button==btnSELECT)
{
break;
}
else if(button==btnLEFT)
{
if(setHR)
{
timeOut=true;
break;
}
else
{
valMIN=valSet;setHR=true;
timeRef = millis(); goto LoopChk;
}
}
lcd.print((valSet < 10 ? "0" : "") + String(valSet));
delay(150);
}
if
(timeOut)transition(button);
else state = MAIN_DISPLAY;
}
//โปรแกรมย่อยในการบันทึกค่าลงในตัวแปรเวลาที่เราได้สร้างเป็นแบบ
Array ไว้
void saveTime(int vHR, int vMIN)
{
switch (itmMnu)
{
case 2:
OAlarmHH[SetRelayNumber-1]=vHR;
OAlarmMM[SetRelayNumber-1]=vMIN;
break;
case 3:
FAlarmHH[SetRelayNumber-1]=vHR;
FAlarmMM[SetRelayNumber-1]=vMIN;
break;
}
}
//โปรแกรมย่อย ตั้งค่าสถานะของ
รีเลย์แต่ละตัว ว่าจะเปิดใช้งานหรือไม่
void setALstate()
{
boolean timeOut = false;
boolean selState;
selState =
AlarmSt[SetRelayNumber-1];
timeRef = millis();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set AL
state ");
lcd.setCursor(0,1);
if(selState){lcd.print("ON");}
else{lcd.print("OFF");}
while ( (unsigned
long)(millis() - timeRef) < 10000 )
{
lcd.setCursor(0,1);
button = read_LCD_buttons();
waitButtonRelease();
if ((button == btnUP) ||
(button==btnDOWN))
{
if(selState){selState=false;lcd.print("OFF");}
else{selState=true;lcd.print("ON ");}
timeRef = millis();
}
else if(button == btnRIGHT)
{
AlarmSt[SetRelayNumber-1]=selState;
saveEEPROM(itmMnu);
showSave();
timeOut=true;
break;
}
else if(button==btnSELECT)
{
break;
}
else if(button==btnLEFT)
{
timeOut=true;
break;
}
delay(150);
}
if
(timeOut)transition(button);
else state = MAIN_DISPLAY;
}
//โปรแกรมย่อย แสดงข้อความว่า
บันทึกข้อมูลแล้ว
void showSave()
{
lcd.setCursor(0,0);
lcd.print("
-DATA- ");
lcd.setCursor(0,1);
lcd.print("
-SAVE- ");
delay(1000);
}
//โปรแกรมย่อย หน้าเมนูแรก
เป็นการเลือกว่าจะตั้งค่าให้กับ Relay ตัวใหน
void showAlarmNo()
{
boolean timeOut = false;
timeRef = millis();
SetRelayNumber = 1;
lcd.setCursor(0,0);
lcd.print("select
output ");
lcd.setCursor(0,1);
lcd.print("no: ");
lcd.setCursor(3,1);
while ( (unsigned
long)(millis() - timeRef) < 10000 )
{
int xbutton =
read_LCD_buttons();
waitButtonRelease();
lcd.setCursor(3,1);
if (xbutton == btnUP)
{
SetRelayNumber < 4 ? SetRelayNumber++ :
SetRelayNumber ;
timeRef = millis();
}
else if(xbutton == btnDOWN)
{
SetRelayNumber > 1 ? SetRelayNumber-- :
SetRelayNumber ;
timeRef = millis();
}
else if(xbutton == btnRIGHT)
{
timeOut=true;
break;
}
else if((xbutton==btnSELECT)
|| (xbutton == btnLEFT))
{
break;
}
lcd.print(SetRelayNumber);
delay(150);
}
if
(timeOut)transition(btnRIGHT);
else state = MAIN_DISPLAY;
}
//โปรแกรมย่อย แสดงเมนู
ให้เลือกตั้งค่า (1 ตั้งค่า Relay 2 เวลาเปิด 3 เวลาปิด)
void showAlarmSet()
{
boolean timeOut = false;
timeRef = millis();
itmMnu = 1;
lcd.setCursor(0,0);
lcd.print("alarm set
menu " + String(SetRelayNumber));
lcd.setCursor(0,1);
lcd.print("1state ");
while ( (unsigned
long)(millis() - timeRef) < 10000 )
{
lcd.setCursor(0,1);
button = read_LCD_buttons();
waitButtonRelease();
if (button == btnUP)
{
itmMnu < 3 ? itmMnu++ : itmMnu ;
timeRef = millis();
}
else if(button == btnDOWN)
{
itmMnu > 1 ? itmMnu-- : itmMnu ;
timeRef = millis();
}
else if(button == btnRIGHT)
{
timeOut=true;
break;
}
else if(button==btnLEFT)
{
timeOut=true;
break;
}
else if(button==btnSELECT)
{
break;
}
switch (itmMnu)
{
case 1:
lcd.print("1State ");
break;
case 2:
lcd.print("2Start time ");
break;
case 3:
lcd.print("3Stop time ");
break;
}
delay(150);
}
if
(timeOut)transition(button);
else state = MAIN_DISPLAY;
}
//โปรแกรมย่อย แสดงเวลาที่หน้าจอหลัก
void showTime()
{
now = RTC.now();
lcd.setCursor(0,0);
lcd.print((now.hour() < 10 ? "0" : "") + String(now.hour())
+ ":" +
(now.minute()
< 10 ? "0" : "") + now.minute()
);
}
void showRelayState()
{
lcd.setCursor(5,0);
lcd.print(" 1: 2: ");
lcd.setCursor(0,1);
lcd.print(" 3:
4: ");
//ดึงค่าSetting
on/off relay มาแสดง
int j = 0; //เก็บตำแหน่ง คอลัมน์
int k = 0; //เก็บตำแหน่ง แถว
for (int i = 0; i <= 3;i++)
{
switch (i)
{
case 0:
j = 8;
k = 0;
break;
case 1:
j = 13;
k = 0;
break;
case 2:
j = 8;
k = 1;
break;
case 3:
j = 13;
k = 1;
break;
}
lcd.setCursor(j,k);
if(AlarmSt[i]==true){
lcd.print("ON ");
}else{
lcd.print("OFF");
}
}
}
//โปรแกรมย่อย บันทึกข้อมูลลงไปใน Rom
void saveEEPROM(int sType)
{
int addr;
switch (sType)
{
case 1: //บันทึกสถานะ
addr=0;
for (int i=0;i<=3;i++)
{
EEPROM.write(addr,
AlarmSt[i]);
addr++;
}
break;
case 2: //บันทึกเวลาเปิด
addr=4;
for (int i=0;i<=3;i++)
{
EEPROM.write(addr,
OAlarmHH[i]);
EEPROM.write(addr+4, OAlarmMM[i]);
addr++;
}
break;
case 3: //บันทึกเวลาปิด
addr=12;
for (int i=0;i<=3;i++)
{
EEPROM.write(addr,
FAlarmHH[i]);
EEPROM.write(addr+4, FAlarmMM[i]);
addr++;
}
break;
}
}
//โปรแกรมย่อยโหลดข้อมูลมาจาก ROM
void loadEEPROM(int sType)
{
int addr;
switch (sType)
{
case 1: //โหลดสถานะของ Relay
addr=0;
for (int i=0;i<=3;i++)
{
AlarmSt[i]=
EEPROM.read(addr);
addr++;
}
break;
case 2: //โหลดเวลาเปิด
addr=4;
for (int i=0;i<=3;i++)
{
OAlarmHH[i]=EEPROM.read(addr);
OAlarmMM[i]=EEPROM.read(addr+4);
addr++;
}
break;
case 3: //โหลดเวลาปิด
addr=12;
for (int i=0;i<=3;i++)
{
FAlarmHH[i]=EEPROM.read(addr);
FAlarmMM[i]=EEPROM.read(addr+4);
addr++;
}
break;
}
}
|
ความคิดเห็น
แสดงความคิดเห็น