Помогите, плс
- Войдите на сайт для отправки комментариев
Пнд, 13/01/2014 - 16:19
Вот такой код:
if (h1==hour() && min1==minute() && sec1==second()) { Millis1 = millis(); long interval1=10000; if (Millis1 && (millis()-Millis1 <= interval1)) { lcd.print("вкл."); Millis1 = 0; } else { lcd.print("выкл"); }
По задумке должно работать так: при совпадении часов с заданными надпись на дисплее должна смениться на "вкл" на заданный интервал.
Всё работает, но надпись меняется но только на 1 сек (интервал не учитывается). Что не так?
Через секунду перестает выполняться условие if (h1==hour() && min1==minute() && sec1==second()) и мы вновь попадаем в else.
Потому что через секунду условие из строки 1 перестанет выполняться (вот эта часть sec1==second()) и начнет выполняться строка 9, которая будет выполняться следующие 23 часа 59 минут и 59 секунд и так по кругу.
Мой телепат предполагает, что в строке 4 вместо if должен быть while, но это плохой вариант, потому что потом у ВАс возникнет другой вопрос.
На форуме эта тема уже разжевывалась
Потому что через секунду условие из строки 1 перестанет выполняться (вот эта часть sec1==second()) и начнет выполняться строка 9, которая будет выполняться следующие 23 часа 59 минут и 59 секунд и так по кругу.
Мой телепат предполагает, что в строке 4 вместо if должен быть while, но это плохой вариант, потому что потом у ВАс возникнет другой вопрос.
Можно ли придумать какое-либо решение?
На форуме эта тема уже разжевывалась
А можно тыкнуть где, поиском не нашел.
А почему нельзя просто второе условие вынести за рамки первого?
То есть как?
Уважаемый agcom, отчего же Вы отказываете себе в удовольствии самому подумать и самому найти решение, попутно подняв [себе же] скилл программирования ?
То есть так
Вероятно, <= 10000 в строке 3.
Кстати... да. Тогда и флаги не нужно, но тогда получаем постоянную дрочку lcd.print()
и "вкл." будет длиться ~2 секунды...
В общем правильно будет так:
Всё равно "вкл" - на одну секунду.
Что значит все равно? А вы думаете мы здесь еще должны телепатически определить что вы там где то у себя в коде дисплей затираете???
agcom, на худой конец используйте delay
Всё решил просто в лоб - пересчитываю текущее время в мсек., сравниваю с заданным, добавляю интервал и т.д.
Всем спасибо.