No i brawo.
Ustaw sobie wszystkie zmienne do liczników na typ uint32_t, nic Ci się nie przepełni, wynik odejmowania możesz rzutować na uint32_t " if ((uint32_t) (mil - mil1)>=4000UL)" - tak z UL to oznacza, że ma traktować liczbę 4000 jako Unsigned Long. Jak operujesz na liczba UL to nie otrzymujesz liczb ujemnych, nic się nie przepełnia. To znaczy przepełnia się, ale to nie psuje arytmetyki i te warunki dalej działają.
Jak masz wiele czynności wykonywanych w rozdzielczości 1s, to wystarczy licznik 1s 'sekundy' i flaga nowej sekundy 'fsekundy' - możesz to uprościć. Zobacz sobie te posty, gdzie wklejam przykłady z funkcją czas(); użyj dzielenia % modulo ==1, możesz ustawiać sobie takie warunki, że jak jest czwarta sekunda, trzecia sekunda, itp, albo co 3 sekundy, co 4 sekundy, itp.
Ustaw sobie wszystkie zmienne do liczników na typ uint32_t, nic Ci się nie przepełni, wynik odejmowania możesz rzutować na uint32_t " if ((uint32_t) (mil - mil1)>=4000UL)" - tak z UL to oznacza, że ma traktować liczbę 4000 jako Unsigned Long. Jak operujesz na liczba UL to nie otrzymujesz liczb ujemnych, nic się nie przepełnia. To znaczy przepełnia się, ale to nie psuje arytmetyki i te warunki dalej działają.
Jak masz wiele czynności wykonywanych w rozdzielczości 1s, to wystarczy licznik 1s 'sekundy' i flaga nowej sekundy 'fsekundy' - możesz to uprościć. Zobacz sobie te posty, gdzie wklejam przykłady z funkcją czas(); użyj dzielenia % modulo ==1, możesz ustawiać sobie takie warunki, że jak jest czwarta sekunda, trzecia sekunda, itp, albo co 3 sekundy, co 4 sekundy, itp.
Miło być decenianym https://buycoffee.to/kaczakat

