сдаюсь. написал "исчо" один таймер. это чисто мое изобретение, аналогов в интернете не встречал. работает так же с любого места кода, но громоздкий получился. Код (C++): byte Chasy, Minuty, ms; unsigned long Intermediate_Sekundy, Sekundy_t,Sekundy, Current; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // Current = millis(); if (millis() >4568) //это условие для проверки что отсчет начнется с 0 { static unsigned long Intermediate_Sekundy = (millis()/ 1000); Sekundy_t = ((millis() / 1000) - Intermediate_Sekundy); if (Sekundy_t>59) //так написал работоспособность что бы проверить. что больше минуты //не будет работать знаю я, просто под рукой был этот огрызок сскетча { Minuty++ ; Sekundy_t=0; Serial.println(Minuty); } if (Minuty>59) { Chasy++; Minuty=0; } } Serial.println("Sekundy_t"); Serial.println(Sekundy_t); Serial.println("Minuty"); Serial.println(Minuty); } работает как ни странно. но к решению как облагородить Код (C++): static unsigned long Counter_05_sec = millis(); if (millis() - Counter_05_sec >= 1000) так и не пришел. если поделитесь опытом буду благодарен. сам видно не додумаюсь. Все пошел меню дописывать. сегодня уплыло молоко и меня нехорошими словами называли, и грубо интересовались когда я восстанавлю мультиварку.
Код (C++): static unsigned long Counter_1_sec = millis(); //static if (millis() >= Counter_1_sec ) //if (millis() - Counter_1_sec > 498) { Counter_1_sec += 1000; Sekundy_t++; Serial.println(Sekundy_t); if (Sekundy_t>59) { Minuty++ ; Sekundy_t=0; Serial.println(Minuty); } if (Minuty>59) { Chasy++; Minuty=0; } }
спасибо спасибо спасибо!!! честно говорю до этого не допер бы. Вот что значит опыт! Этот таймер можно даже в вики "Амперки" добавить. простой, надежный и универсальный!!!
В этом скетче... 1. Если программа замешкается, millis () может пройти точку 1000 и тик будет пропушен. Было, положим. 2000, потом 2001 и т.д до 2999 и тут программа что то делает 1.5мс. Следующее millis вернет 3001. Тик пропушен. 2. Второй вызов millis может вернуть на 1мс большее значение. Т.е. в момент сравненич таймер показывал 1000999 мкс. millis вернул 1000, но пока if соображал и т.п. таймер тикнул на 1001000. Интервал тиков сдвинулся на 1мкс. Код (C++): static unsigned long Counter_05_sec = millis(); //static if (millis() - Counter_05_sec == 1000) //if (millis() - Counter_05_sec > 498) { Counter_05_sec = millis(); Sekundy_t++;