Hej,
Nie mam pewności, czy dobrze wszystko zrozumiałem w pytaniu, ale jeśli chodzi o samą zmienną – można oczywiście do tego podejść tak jak napisałeś.Przy czym – jeśli dobrze rozumiem zmienna StanAlarmu ma być czymś w rodzaju implementacji „maszyny stanu”. Być może dobrze byłoby się zastanowić i użyć w tym przypadku enuma
Np.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I potem uzyc zmiennej w ten sposób
AlarmStan stanAlarmu = ALARM_STABILNY;
Jeśli z tego w ten sposób skorzystasz, to zamiast gdzieś w kodzie używać liczb 0, 1 i 3 będzie Ci prościej użyć wartości enuma – kod będzie czytelniejszy.
Być może warto się zastanowić nad trochę innym podejściem z wykorzystaniem timerów programowych, które Mirek opisywał tutaj.
http://mirekk36.blogspot.com/2012/10/ob ... a-cd3.htmljest też poradnik tutaj
https://www.youtube.com/watch?v=FA9gWa88snMMoże narzędzie to nie jest najprostsze do zrozumienia, ale jak już się je ogarnie, to czasem ogromnie upraszczają konstrukcję programu.
Jakiś czas temu zrobiłem swoją implementację na podstawie poradników mirka i dosłownie w kilkanaście minut zrobiłem coś co prawdopodobnie chciałbyś osiągnąć

Możesz podejrzeć to co skrobnąłem – dołączam źródła (katalog src) i skompilowany program dla ATmega32 i ATmega644p (katalog bin) – odpaliłem to na zestawie ATB z m644 (nie mam pod ręką m32, ale powinno w teorii zadziałać)
Załącznik:
kmAlertTest.zip
Wystarczy podłączyć diody do pinów portu
PC0-PC4 i któryś z przycisków do portu
PB0Dioda na
PC4 miga sygnalizując pracę układu. Dioda na
PC1 pokazuje czy jesteśmy aktualnie w trybie po pierwszym wyzwoleniu czujki, dioda PC0 sygnalizuje stan alarmu.
Podstawą programiku była aplikacja testowa zawierająca obsługę przycisków i timerów programowych
https://gitlab.com/c-mos/kmAvrTests/kmButtonsTestW stosunku do oryginału zmieniłem parę rzeczy:
W pliku kmSoftwareTimer.h zmieniłe typ
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W oryginale był zakres uint16_t – ale ten daje w tej implementacji maksymalny interwał oczekiwania jakieś 65 sekund, a chcemy mieć 5 minut
W pliku config.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W pliku Application.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Plusem jest to, że nic się nie blokuje w czasie działania programu. Do tego automatem załatwiane są pewne konteksty czasowe - typu przedłużenie okresu czuwania w przypadku kiedy przyjdzie kolejny sygnał czujki, czy przedłużenie alarmu w przypadku kiedy czujka zostanie wyzwolona ponownie i tak dalej.
Mam nadzieję, że się przyda to do czegoś

Pozdrowienia.