Arduino dla początkujących · Struktury sterujące i czas bez blokowania
Kilka zadań naraz w jednej pętli loop() (wzorzec na millis)
Struktury sterujące i czas bez blokowania
Wprowadzenie
Skoro wzorzec z previousMillis nie blokuje pętli loop(), można w niej prowadzić kilka niezależnych zadań jednocześnie — np. migać diodą co 500 ms, odczytywać czujnik co 100 ms i wysyłać dane przez Serial co 1000 ms. Sekret jest prosty: KAŻDE zadanie ma swój własny previousMillis i swój własny interval, a loop() w każdej iteracji sprawdza po kolei wszystkie warunki if (millis() - prevA >= intA), if (millis() - prevB >= intB). To kooperatywna wielozadaniowość (współbieżność) na jednym rdzeniu ATmega328P — zadania nie działają naprawdę równolegle, tylko przeplatają się tak szybko, że wygląda to jak równoległość. W tej lekcji zobaczysz, dlaczego każde zadanie potrzebuje osobnych zmiennych stanu, jak wygląda loop() z 2-3 timerami, dlaczego jeden delay() psuje wszystkie pozostałe zadania, kiedy potrzebna jest maszyna stanów (state machine) dla zadań wieloetapowych oraz dlaczego zmienne stanu muszą być static lub globalne. Wzorzec bazuje na przykładzie Arduino "BlinkWithoutDelay".