Нужна помощь в редактировании программы для часов с таймером
- Войдите на сайт для отправки комментариев
Чт, 22/12/2016 - 13:07
Здравствуйте! Хочу сделать устройство автоматического включения и выключения света в комнате на 2 выключателя. Нашел пример программы в сети, подшаманить на 2 выключателя получилось, а вот сделать меню настройки времени вкл/выкл. для 2-го таймера тяму не хватает. Подскажите, пожалуйста, что необходимо дописать в программе
вот код настройки часов и первого таймера:
void setClock(){ // установка часов
byte pos = 1;
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
lcd.clear();
lcd.blink();
while(key() != 1){ // крутим цикл
byte KEY = key(); // читаем состояние кнопок
delay(200);
lcd.setCursor(1, 1);
lcd.print("set to save");
lcd.setCursor(0, 0); // выводим инфу
if (hour < 10) lcd.print("0");
lcd.print(hour);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute);
lcd.print(" ");
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth);
lcd.print("/");
if (month < 10) lcd.print("0");
lcd.print(month);
lcd.print("/");
if (year < 10) lcd.print("0");
lcd.print(year);
lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции
if (KEY == 5 && pos < 13) pos += 3; // крутим позицию
else if (KEY == 2 && pos > 1) pos -= 3;
else if (pos == 1 && KEY == 3) hour++; // крутим значения
else if (pos == 1 && KEY == 4) hour--;
else if (pos == 4 && KEY == 3) minute++;
else if (pos == 4 && KEY == 4) minute--;
else if (pos == 7 && KEY == 3) dayOfMonth++;
else if (pos == 7 && KEY == 4) dayOfMonth--;
else if (pos == 10 && KEY == 3) month++;
else if (pos == 10 && KEY == 4) month--;
else if (pos == 13 && KEY == 3) year++;
else if (pos == 13 && KEY == 4) year--;
if (hour > 23) hour = 0;
else if (minute > 59) minute = 0;
else if (dayOfMonth > 31) dayOfMonth = 0;
else if (month > 12) month = 1;
else if (year > 99) year = 0;
}// конец цикла
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
lcd.noBlink();
lcd.clear();
lcd.print(" Saved");
delay(1500);
}///
void setOnOff(){
byte pos = 0;
lcd.clear();
lcd.blink();
while(key() != 1){ // крутим цикл
byte KEY = key(); // читаем состояние кнопок
delay(200);
lcd.setCursor(1, 1);
lcd.print("set to save");
lcd.setCursor(0, 0); // выводим инфу
if (setHorClockOn < 10) lcd.print("0");
lcd.print(setHorClockOn);
lcd.print(":");
if (setMinClockOn < 10) lcd.print("0");
lcd.print(setMinClockOn);
lcd.print(" ");
if (setHorClockOff < 10) lcd.print("0");
lcd.print(setHorClockOff);
lcd.print(":");
if (setMinClockOff < 10) lcd.print("0");
lcd.print(setMinClockOff);
lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции
if (KEY == 5 && pos < 9) pos += 3; // крутим позицию
else if (KEY == 2 && pos > 1) pos -= 3;
else if (pos == 0 && KEY == 3) setHorClockOn++; // крутим значения
else if (pos == 0 && KEY == 4) setHorClockOn--;
else if (pos == 3 && KEY == 3) setMinClockOn++;
else if (pos == 3 && KEY == 4) setMinClockOn--;
else if (pos == 6 && KEY == 3) setHorClockOff++;
else if (pos == 6 && KEY == 4) setHorClockOff--;
else if (pos == 9 && KEY == 3) setMinClockOff++;
else if (pos == 9 && KEY == 4) setMinClockOff--;
if (setHorClockOn > 23) setHorClockOn = 0;
else if (setMinClockOn > 59) setMinClockOn = 0;
else if (setHorClockOff > 23) setHorClockOff = 0;
else if (setMinClockOff > 59) setMinClockOff = 0;
}// конец цикла
lcd.noBlink();
lcd.clear();
EEPROM.write(0, setMinClockOn);
EEPROM.write(1, setHorClockOn);
EEPROM.write(3, setMinClockOff);
EEPROM.write(4, setHorClockOff);
lcd.print(" Saved");
delay(1500);
}///
а вот само меню установки:
void menu(){
delay(200);
lcd.clear();
char menuTxt[2][14] = {"set ON/OFF >>", "set clock >>"};
byte pos = 0;
while(key() != 1){
delay(200);
byte KEY = key();
lcd.setCursor(0, 0);
lcd.print(pos+1);
lcd.print(".");
lcd.print(menuTxt[pos]);
if (KEY == 3 && pos != 0) pos--;
else if (KEY == 4 && pos < 1) pos++;
if (KEY == 5 && pos == 0) setOnOff();
else if (KEY == 5 && pos == 1) setClock();
}
lcd.clear();
}