(04-12-2019, 00:06)Jarewa0606 napisał(a): czas= (godziny *60)+minuty; // zmienna jest co minute
biorąc pod uwagę 10-15
if(czas >= 600 && czas <= 900){
napisz kod na "czas" by co wymagany czas włączał wyłączał przekaźnik
}
Nie chodzi o ramy czasowe, to nie jest żaden problem. To nic nie da, ja potrzebuję mieć możliwość określenia wszystkich parametrów. Urządzenie ma wyświetlacz z menu gdzie można wybrać w jakie dni tygodnia ma działać, w jakich godzinach w każdym z dni tygodnia oraz jaki jest interwał uruchamiania przekaźnika (przekaźnik tutaj to tylko uproszczenie żeby nie zaciemniać obrazu sytuacji)
Problem to poprawne odliczanie czasu kiedy np od 21:00 do 02:00 urządzenie ma być aktywne, i interwał uruchamiania przekaźnika to 40 minut to ja potrzebuję, żeby w tych godzinach co 40 minut uruchamiał się przekaźnik a do tego muszę wziąć aktualny czas dodać do niego precyzyjnie to 40 minut i tak ustawiona metoda ma wypluć dokładną datę kiedy uruchomię funkcję przekaźnika, i tak za każdym razem. Reszta problemu jest opisana w pierwszym poście, głównie chodzi o to, że jest dużo zmiennych i ten czas mi się szybko rozjedzie bez sporej metody do jego poprawnego liczenia. Dlatego szukam biblioteki lub podobnego rozwiązania.
Oczywiście mogę pójść na łatwiznę i po prostu uruchamiać licznik np w millis() dla każdego interwału ale nie jest to eleganckie rozwiązanie i zegar w atmedze szybko rozjedzie się z zegarem w module RTC (osobne taktowania). Do tego jeśli procek się zawiesi to nawet jak WDT go podniesie to odliczanie rozpocznie się od nowa czyli znów interwał się rozjedzie a o zapisywaniu millis() np co 1s do EEPROM nie ma mowy bo żywotność skończy się po tygodniu.
//EDIT
Problem rozwiązany w bardzo prosty sposób. Jakby ktoś miał podobny problem to wystarczy wyrzucić czas w unixtime, a później napisać metodę która sobie na tym operuje czyli dla mnie wystarczy, że co np 1s sprawdzi czy upłynęła odpowiednia ilość sekund i jeśli tak to wykona akcje po czym zegar się zresetuje i zacznie liczyć od początku. Rozwiązanie o tyle fajne, że czas nadal jest pobierany z RTC więc nic się nie rozjedzie.
Dzięki i pozdrawiam.