Wpis z mikrobloga

Mirki z #stm32 #avr #mikrokontrolery

Macie jakiś sposób na ustawianie godziny enkoderem?
Używam Stm32, mam uruchomiony na wyświetlaczu zegar z RTC, ale chciałbym dać możliwość ustawiania czasu przez enkoder.
Enkoder podłączyłem, zlicza prawidłowo impulsy, ale kompletnie nie mam pomysłu jak rozgryźć ustawianie czasu.
Chciałbym coś na zasadzie - po wciśnięciu przycisku część wyświetlająca godzinę zaczyna migać i kręcąc enkoderem ustawiam godzinę - zatwierdzam wciśnięciem przycisku, to samo z minutami i sekundami.
Cały kod do obsługi tego jestem w stanie napisać samemu, ale nie mam pomysłu jak do tego najlepiej podejść.

Macie może jakiś przykładowy kod?
  • 4
@BoaKusiciel: Maszyna stanów.

jakaś zmienna enum trzymająca aktualny stan na przykład:

enum time_chg_state = {
E_CHG_NONE = 0x00,
E_CHG_HH,
E_CHG_MM,
E_CHG_SS
}

i potem w kodzie switch w zależności od stanu ustawiasz enkoderem godzinę minutę sekundę:

switch(time_chg_state){
case E_CHG_NONE:
show_rtc_time();
break;
case E_CHG_HH:
show_rtc_time();
blink_hh();
enc_set_hour();
break;
case E_CHG_MM:
show_rtc_time();
blink_mm();
enc_set_min();
break;
case E_CHG_SS:
show_rtc_time();
blink_ss();
enc_set_sec();
break;
default:
break;
}

Żeby nie komplikować przykładu - w każdym ze stanów