Wpis z mikrobloga

#elektronika #programowanie

Mam mały problem z kodem... Generalnie działa ale bywają przypadki, że nie...
Układ w zmiennej char hour i min ma czas i jeśli mamy daną godzinę i minutę to albo włącza oświetlenie albo wyłącza.
Wiem, że można w jednym ifie to zapisać, natomiast chodzi mi o samo podejście algorytmiczne.

if (readeeprom(EEPROMLIGHTHOURON) <= hour){
if (readeeprom(EEPROMLIGHTMINON) <= min){
ON(PLIGHT);
}
}

if (read
eeprom(EEPROMLIGHTHOUROFF) <= hour){
if(read
eeprom(EEPROMLIGHTMINOFF) <= min){
OFF(P
LIGHT);
}
}
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Wiem, że można w jednym ifie to zapisać, natomiast chodzi mi o samo podejście algorytmiczne.


@defoxe: 1. podejście źle - zauważ że przez całą (właściwą, mniejszą niż w eepromie) godzinę będzie ci co minutę sprawdzać czy się zgadza. Lepiej sprawdzać najpierw minutę - wtedy tylko raz na 60 minut musi sprawdzić czy i godzina jest ta właściwa. Kod o 59/60 szybszy ;)
2. czemu stosujesz "mniejszy lub równy" zamiast równy
  • Odpowiedz
@hrumque: chodzi o to, by od jakiejś godziny do pewnej godziny był włączony. Nie żeby o danej godzinie się włączył. Urządzenie może zostać uruchomione/mieć zanik zasilania w losowej chwili. Dlatego też nie ma ==
  • Odpowiedz
@defoxe: i tak to się kupy nie trzyma...
1. Jak tylko możesz, to nie rób odczytów z eepromu co pętlę/operację (eeprom jest kilkset razy wolniejszy niż cpu ram/rejestry). Odczytaj raz przy starcie programu/resecie/programowaniu, i przepisz ustawienia do zmiennej w ramie.

2. z tego co rozumiem to zmiena hour i min zawierają AKTUALNĄ godzinę i minutę?
chcesz uzyskać coś typu programator
  • Odpowiedz