Суточный таймер. Защита от сбоев и отключения.
- Войдите на сайт для отправки комментариев
Сб, 21/02/2015 - 11:54
Друзья использую суточный таймер, подскажите что нужно дописать в коде для того что бы при отключении питания или сбоя, таймер возвращался в то значение которое было до сбоя, на заданном промежутке времени.
void setup(){
setMinClockOn = EEPROM.read(0);
setHorClockOn = EEPROM.read(1);
setMinClockOff = EEPROM.read(3);
setHorClockOff = EEPROM.read(4);
}
void loop()
{
// сравниваем время и управляем выходом//
if (setMinClockOff == minute && setHorClockOff == hour
&& second == 0) digitalWrite(outPin, HIGH);
if (setMinClockOn == minute && setHorClockOn == hour
&& second == 0) digitalWrite(outPin, LOW);
}
Не понял, надо чтобы после моргушки состояние выхода устанавливалось в такое же как и до моргушки?
Ну, да получается так что например в 10 часов происходит включение а выключение в 15, но если в этом промежутке было отключение питания и после востановления, состояние опять выключено пока не пройдут сутки и цикл не повторится.
Нужно чтобы востанавливалось значение заданное в определённый промежуток времени.
ТОгда надо в 12 и 14 строчке не просто включать и выключать, а еще в тот же EEPROM писать состояние выхода. А в сетапе при пуске платы надо считывать это значение и устанавливать выход в нужное состояние.
Спасибо большое, если не затруднительно кусочек кода как это делается.
А если в место знака равно, использовать знак больше или равно? Поможет делу?
Ну что-то типа такого. 5 это адрес в еепром можете любое писать не занятое.
Спасибо огромное! Попробую на железе отпишусь.
Да поможет, но надо внимательно с логическими операциями, а то часы будут больше минуты меньше и можно получить не то что ожидаете. А так можно конечно грубо говоря пока час меньше часа отключения и минута меньше минуты отключения поддерживаем один уровень на выходе, как только больше меняем уровень на выходе.
Penni, я где то читал что EEPROM рассчитан на 100000 циклов а что произойдёт после этого?
Ошибки чтения и записи начнутся. Но 100000 это сильно с запасом цифра взята, для страховки. На самом деле практика показывает, что до 5000000 можно смело расчитывать.
[quote=Penni]
Ошибки чтения и записи начнутся. Но 100000 это сильно с запасом цифра взята, для страховки. На самом деле практика показывает, что до 5000000 можно смело расчитывать.
[/qуuote]
А после этого, можно как то программно сбросить эти настройки и обнулить память или это физический процесс?
С поврежденными ячейками ничего не сделаете, только в другие ячейки писать
С поврежденными ячейками ничего не сделаете, только в другие ячейки писать
А сколько в eeprom ячеек ?
И правильно я понял что если такое произойдёт то нужно в скетче прописать другие порядковые номера ячеек?
Смотря какая плата, в меге 2560 4 КБ а в уно например 1 КБ
Да надо будет в скетче прописать другой номер ячейки и всё. И я бы на секунды не смотрел особенно когда там строго =. Можно их вообще убрать а вместо них смотреть на состояние выхода. Если час равен нужному и минута равна нужной и выход LOW тогда делаем выход HIGH и пишем в еепром. И так же при срабатывании таймера на отключение.
Ну да, действительно, все равно настройки которые завожу через LCD шилд только часы и минуты.(без секунд)
Можно что-нибудь типа такого, так сказать решение в лоб без еепром
Но тут главное все возможные варианты охватить.
Буду пробовать, спасибо большое!