Собственно многие наверно зададутся вопросом, зачем мне делать таймер на ds 3231 да ещё и посекундный, когда в самой ардуине есть кварц, который легко использовать с millis, только к несчастью он у меня сбивается спустя 30 секунд работы ардуины, так вот ближе к делу, использую библиотеку #include "RTClib.h" для управления часиками, впрочем она удобная и меня полностью устраивает, а вот мой говнокод, проблема только с таймером для управления кнопками на резистивной клаве key_time_sec и key_time_sec_previous, на остальные таймеры пока не жалуюсь, ну или просто мало тестировал key_value = analogRead (keyboard); key_time_sec = now.hour()*60*60+now.minute()*60+now.second(); work_time_sec = now.hour()*60*60+now.minute()*60+now.second(); day_time_sec = now.hour()*60*60+now.minute()*60+now.second(); if (key_time_sec - key_time_sec_previous == 1) { key_time_sec_previous = key_time_sec; key_timer-=1; } if (menu == "Work") { if (work_time_sec - work_time_sec_previous == 59) { work_time_sec_previous = work_time_sec; timer_light +=1; timer_maisure +=1; if (options_scroll_values[5] > 0) { daylight_timer +=1; } } if (day_time_sec - day_time_sec_previous == 5) { if (days_display == 0 && timers_display == 0) { days_display = 1; d = 0; }else{if (days_display == 1 && timers_display == 0) { timers_display = 1; f = 0; }else{if (days_display == 1 && timers_display == 1) { days_display = 0; timers_display = 0; m = 0; }}} day_time_sec_previous = day_time_sec; } } Он вроде пашет, но почему то спустя где то 10 часов управление кнопками пропадает, если перезагрузить ардуину, ничего больше не трогая, то кнопки снова работают.Далее я попытался исправить эту проблему заменив (key_time_sec - key_time_sec_previous == 1) на (key_time_sec - key_time_sec_previous >= 1), думал что это поможет, но на деле клава сразу же отказывалась работать, а при попытке вывести на комп key_time_sec_previous выдавало какое то левое число. "Хрен с ним"- подумал я и написал так key_time_sec = now.second(); if (key_time_sec == 59) { key_time_sec_previous = 0; } Но на деле это ничего не изменило, также спустя 10 часов кнопки переставали работать. Может найдется чудак который тоже делал таймер из часов, и кто сталкивался с такой проблемой, или гуру-ардуинщик. За любой ответ больше спасибо
Таймер через millis() переполняется спустя 30 сек. из-за того, что переменная объявленная на хранение значения millis() переполняется. Используйте unsigned long тогда переполнится примерно 50 дней.