Umiemy już trochę programować w języku C, ale w miarę jak nasze umiejętności wzrastają, chcielibyśmy też móc w jeszcze dokładniejszy sposób sterować wykonywaniem kolejnych funkcji. Co bowiem, jeśli będziemy chcieli wykonać jakąś funkcję pod pewnym warunkiem? Używamy wtedy tzw. pętli sterujących.
Pętle powodują, że fragment kodu wykonuje się wielokrotnie. Ile razy dokładnie wykona się fragment, to zależy od warunków, które postawimy i rodzaju pętli.
Przypuśćmy, że potrzebujemy, aby nasz kod wykonał się 5 razy. Niech to będzie zwiększenie stanu portu P0 i odczekanie 3 sekund.
PĘTLA FOR
Nasz fragment kodu będzie prosty:
int i;
for( i = 5; i > 0; i--) {
 P0++;
 sleep(3000);
}
Pętla for() działa następująco. Zauważmy, że przyjmuje 3 warunki. Każdy z nich może być pusty.
Pierwszy z nich inicjalizuje wartości. W naszym przykładzie przy wejściu w pętlę for() zmienna i zostaje ustawiona na 5.
Drugi z warunków działa na zasadzie sprawdzania dowolnego wyrażenia. Jeśli wynik okaże się logicznie fałszywy, pętla zostaje zakończona.
Trzeci warunek to czynność wykonywana po każdym obiegu pętli.
Nasz program wchodząc do pętli ustawi zmienną i na 5. Sprawdzenie, czy i > 0 wykaże, że rzeczywiście 5 > 0 i pętla wykona się raz: zwiększy się wartość portu P0, a następnie program nie będzie nic robił przez 3000 ms, czyli 3 sekundy. Na koniec pętla for() zmniejszy o 1 zmienną i (i--) i ponownie zacznie się wykonywać. Tym razem zostanie pominięta inicjalizacja i oczywiście i nie zostanie ponownie ustawione na 5, tylko od razu przejdziemy do sprawdzenia. Nadal i = 4 > 0, więc pętla wykona się jeszcze raz.
PĘTLA WHILE
Pętla while() ang. dopóki wykonuje się dopóki dany warunek jest prawdziwy, np. dopóki zmienna nie osiągnie jakiejś wartości, albo dopóki funkcja nie zwróci wartości false.
Nasz przykład z pętli for() możemy łatwo zaprogramować w postaci pętli while(). Często mamy taki wybór, czasem jednak jedna pętla jest lepsza od drugiej dla naszych potrzeb.
Kod będzie wyglądał następująco:
int i = 5;
while(i > 0) {
 P0++;
 sleep(3000);
 i--;
}
Tym razem inicjalizacja odbywa się poza pętlą. Ponieważ pętla sprawdza tylko, czy i > 0, to wartość zmiennej i musimy zmieniać już wewnątrz samej pętli. Całość działa tak:
Ustawiamy i na 5 i wchodzimy w pętlę. Mikrokontroler sprawdza, czy i > 0. Ponieważ tak jest, wykonuje się to, co jest zawarte w nawiasach klamrowych: zwiększenie portu, oczekiwanie przez 3 sek i tym razem również zmniejszenie zmiennej i o jeden. Następnie pętla sprawdza, czy i wciąż jest większe od zera i jeśli tak, wykonuje zawartość pętli ponownie.



Programowanie w C