есть лампочка которая подключена к пину ардуино и часы реального времени. в определенное время лампочка должна включится и потом выключится. Код (C++): //Если время совпало включаем LED if(h==HLEDON&&m==MLEDON){ digitalWrite(ledPin,HIGH); } //Если время совпало выключаем LED if(h==HLEDOFF&&m==MLEDOFF){ digitalWrite(ledPin,LOW); } но есть уязвимое место у этой системы- контроллер чтоб зажечь свет или погасить его должен явно получить с часов определенные часы и минуты чтоб сравнить их с установленными значениями и только после этого включить или выключить свет. но если на момент когда свет выключен а в момент когда он должен загореться отключат электричество, то контроллер пропустит необходимые значения и свет не включится пока они опять не совпадут. как сделать так чтоб контроллер понимал соответствует нынешний промежуток времени установленному, чтоб включить или выключить свет, или нет. двигался в направлении Код (C++): if(HLEDON<=HLEDOFF&&MLEDON<MLEDOFF){ if(h>=HLEDON&&m>=MLEDON&&h<=HLEDOFF&&m<MLEDOFF){ digitalWrite(ledPin,HIGH); } } в данном коде написано что если текущее время больше выставленных часов и минут на включени , то свет загорится , но если текущее время к примеру 19:35 и включение света запланировано было на 19:15, то свет естественно будет гореть, но стоит текущему времени превратиться в 20:05, к примеру, то 05 минут уже не больше установленных 15 ти и свет конечно выключается... так как же возможно реализовать такой таймер чтоб он понимал гореть в данный промежуток времени или нет?
запишите свой график в память и сравнивайте время с ним если график большой и сложной используйте PROGMEM
я записал график в память, но если время включения установлено к примеру на 19:00 и записано в память, а на момент подачи электричества данные с часов соответствуют 19:15 то свет не включится т.к. 19:15 не равно 19:00 и получается свет не загорится пока контроллер не будет включен во время прохождения времени 19:00.
это с часами прокатит, а с минутами? у меня ведь есть еще возможность установить минуты? как с минутами быть? сейчас они больше установленного времени, а когда перевалят за 59 минут станут уже меньше... пока как Вы говорите я смогу сделать правильную схему только если буду выставлять таймер только по часам. да и часы тоже нужно учитывать что они могут перевалить за 23 и станут уже меньше установленного времени...
блин, ну я же в самом первом сообщении по этой теме написал два примера того что я делал... и второй пример не рабочий в силу того что минуты бывают и больше и меньше, в итоге свет горит только когда оба условия совпадают, а минуты то бывает совпадают а бывает нет. Простите меня пожалуйста, но вы посмотрели примеры, которые я описал в самом начале? то что Вы советуете, отличается от того, что я уже делал?
а что произойдет если контроллер включится в 20:05? он проверит условие с данными с часов и получит что 20 больше 19 но 05 меньше 40 и свет не включится, условие не выполнилось полностью...и не будет гореть пока не настанет 20:12
и если вы так задали условие то установив время включения на 19:40 по факту оно включится в 20:40, и то если контроллер включится в оставшиеся 20 минут... ваш пример впринципе работает только последние 20 минут в час
интересная идея, но пока плохо представляю как это должно выглядеть, чтоб и иметь возможность выставлять время в человыеческом виде...
в 19:40 свет не загорится? в 19:50 тоже? у вас не правильное условие...... проверьте его на работу если мне не верите
Может попробовать либо, как выше советовали, перевести время в минуты, либо, как второй вариант, записать полное время(часы/минуты) в переменную, и с ней работать. Не особо силён в операторах, но кажется stream поможет.