Не подумайте что зануда) ,но нашел несколько ошибок в коде (повторяю данное устройство). 1.В строке 135 код: Код (C++): void displayTimer(){ h = (int)timmer / 3600; m = (int)timmer / 60 - h * 60; s = timmer - m * 60; tm1637.point(1); if(timmer > 3600) { думаю нужно ставить Код (C++): void displayTimer(){ h = (int)timmer / 3600; m = (int)timmer / 60 - h * 60; s = timmer - m * 60; tm1637.point(1); if(timmer >= 3600) { 2. Код (C++): void displayTime(){ tm1637.point(flash); tm1637.display(0, hour / 10); tm1637.display(1, hour % 10); tm1637.display(2, minute / 10); tm1637.display(3, minute % 10); }//------------------------------------- тут неплохо добавить в конце: Код (C++): pause = 1; иногда после выхода в режим показа времени (например кнопкой "-") данная переменная остается установлена в 0, и когда запускаешь следующий таймер, он сразу стартует. Давно хотел сделать на кухню такой таймер, идея годная ) P.S. Синхронизацию времени все-таки сделал NTP раз в час и при запуске, как-то мне так привычнее. P.S.S. Еще добавил публикацию в топик MQTT события "Alarm" , при окончании работы таймера. Кухня у меня в отдельно-стоящем здании, и система (MajorDoMo) уведомит меня об окончании таймера и в доме (мало-ли)
Сломались часы-таймер в духовке, вот думаю заменить на эти ) Подскажите начинающему, в каком месте скетча лучше включать реле духовки? Выключать думаю в начале п/п Аларм? а релюшку подключить к 00 или А0? Спасибо 0 = PGM, A0 = аналог... либо кнопки переделать под аналог, тогда 3 дискретных свободны, или подпаяться под Д9 или Д10
Точно не помню, но кажись там в коде есть какая то переменная которая указывает на то что таймер работает. Та вот вместе а состоянием этой переменной можно менять и состояние порта которым будете управлять реле. Ну или по таймеру менять состояние порта в зависимости от состояния этой переменной.
Иван, подскажите пожалуйста начинающему ) не могу понять это условие if (millis() % (statusWifi ? 1000 : 500) < (statusWifi ? 500 : 400) ... как его расшифровать? что значит знак вопроса и далее 1000 : 500... не нашел в описании программирования Ардуино. Где посмотреть? И еще не понял назначение строки if (key != 0 && (keySpeed == 0 || (h == 1 && m == 0) || (h == 0 && m == 59) || (m == 9 && s == 00))) tm1637.clearDisplay(); Поясните, если вспомните ) Спасибо
Это сокращенная запись условия If...else. т.е. (statusWifi ? 1000 : 500) это тоже самое, что if (statusWifi) {1000} else {500}
Если "statusWifi" = истина то значение данного условия будет 1000 если же ложь то 500 Тут все просто key != 0 - если нажата какая либо кнопка keySpeed == 0 - это скорость нарастания или убывания счетчика (кажись) (h == 1 && m == 0) - это соответственно показания часов и минут... tm1637.clearDisplay() - очистка дисплея
Большое спасибо! вопрос о последней строке - не как ее разложить по операторам - это я понял, а зачем очищать дисплей? ) что это за условие такое на словах, чтобы его чистить?
Если к примеру сейчас на дисплее "1234", а вы будете выводить к примеру " 56", то первые два сегмента не сотрутся и получится "1256"
Спасибо! Вот только не хватает вв/выв... и у меня ситуация, где только 2 отверстия под управление ) насверлить никто не запрещал конечно, но будет не красиво. В общем сначала подумал использовать 2 кнопки от аналогового входа: 1я- "+1", 2я "-1", обе = "пуск/стоп". Но тут сомнения, как это отличить, чтобы было просто в использовании.... Что это? просто нажатие кнопки или это только миг перед нажатием второй кнопки? долгое нажатие - это ускоренный инкремент или лишь ждем нажатие второй, чтобы сделать пуск? Есть ли какие-то алгоритмы такого управления? Другой вариант - это использовать енкодер, для инкремента/дикримента и кнопку для пуска, но тут с выводами И/О туго... надо еще оставить под вкл/выкл реле, уж молчу хотел еще и температуру внутри духовки вывести.... ESP32 ставить? )
У всех такие крутые корпуса, я же всё это дело вмонтировал в маленькую коробочку, которую ранее приобрёл на Али, датчик Si7021 расположен на задней панели(припаян к штырям проходящим через заднюю стенку, которые в свою очередь припаяны к модулю часов).Таймер работает нормально, но для изменения летнего и зимнего времени приходится перешивать, также у V2 какие то проблемы с его переводом.
Вам не кажется, если часто к модулю ходить за временем виснет контроллер. На модуле есть секундный сигнал, я бы снимал его и раз в секунду обновлял время. Где то это нашел, даже со схемой но не могу найти где))
По поводу перешивания для летнего времени, порекомендую Ивану переключать летнее время по MQTT. Тогда можно просто командой.
Или кнопку добавить, которая будет либо увеличивать переменную на дельту сезонного времени, либо уменьшать. Раз в полгода нажал и всего делов...
Прикольно, но по сравнению с MQTT надо вкладывать ресурсы, а мой вариант бесплатный, и реализация 15 минут