No nie, z tą gigantyczną ilością warunków to Kolega mokrowski raczej mocno przesadził. Według mnie wystarczy zaledwie kilka. Po pierwsze trzeba zdecydować czy dopuszczamy ustawienie tego samego czasu włączenia i wyłączenia urządzenia. Jeśli nie to pierwszy warunek odpada. Jeśli tak to trzeba zdecydować czy urządzenie ma być wtedy całą dobę wyłączone czy załączone. Potem należy sprawdzić czy czas załączenia jest mniejszy od czasu wyłączenia - wtedy mamy ustawianie przedziałów czasowych bez przejścia przez północ. Jeśli czas załączenia jest większy od czasu wyłączenia to mamy sytuację gdy przedział czasowy obejmuje przejście przez północ. I to wszystko. Dla większej jasności przykładowy kod.
Przyjmuje następujące oznaczenia:
t_on - czas załączenia
t_off - czas wyłączenia
t_rtc - bieżący czas z zegara RTC
ON - urządzenie włączone (czyli gdzieś tam będzie zdefiniowane makro na wysterowanie odpowiedniego pinu portu mikrokontrolera)
OFF - urządzenie wyłączone (podobnie jak wyżej tylko wyłączenie)
Oczywiście to kod uproszczony bo naprawdę trzeba porównywać godziny i minuty albo zrobić jakąś zmienną, która będzie zawierała jedno i drugie. Ale tu chodzi mi o pokazanie samego porównania.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Druga metoda była by taka, żeby programowo zabronić ustawiania czasu wyłączenia < od czas włączenia i wtedy jest tylko jeden warunek do sprawdzenia. A ustawienie przedziału czasowego włączenia urządzenia przechodzącego przez północ musiało by być rozbite na dwa przedziały - na przykład dla czasu od 23:00 do 5:00 :
23:00 - ON
23:59 - OFF
0:00 - ON
5:00 - OFF
I to wszystko z tej gigantycznej ilości if-ów.