Gdybyśmy użyli zewnętrznego źródła impulsów, byłby właściwie koniec.
Na ekranie wyświetlałaby się informacja ile ich odebrano, moglibyśmy przejść do rozbudowy naszego programu, na przykład żeby co 3600 impulsów uruchomić mechanizm kukułki w zegarze, jeśli impulsy przychodziły w tempie jeden na sekundę.
I taka praktyczna uwaga w tym miejscu, opisywany to sposób zliczania impulsów jest bardzo szybki, jeśli użyjemy mechanicznego wyłącznika warto pomyśleć o odfiltrowaniu, choćby prostym kondensatorem, bardzo krótkich impulsów pojawiających się wskutek drgania styków w chwili jego włączania i rozłączania.
Bez tego zamiast jednego impulsu możemy zaobserwować ich kilka.
No to robimy generator, po to przecież zwarliśmy 28 pin GPIO z 29.
Programujemy pin 29 jako wyjściowy, ustawioamy na nim stan logiczny 0:
pinMode(29, OUTPUT); digitalWrite(29,LOW);
Teraz w pętli, powtarzanej tyle razy, ile podaliśmy w parametrze wywołania naszego programu, na 10 milisekund ustawiamy na pinie 29 logiczną jedynkę, po czym na kolejne 10 milisekund logiczne 0.
Da nam to 50 prostokątnych impulsów na sekundę:
int n; for(n=0;n<atoi(argv[1]);n++) { digitalWrite(29,HIGH); Delay(10); // 10 milisekund impuls digitalWrite(29,LOW); Delay(10); // 10 milisekund przerwa }
Podczas wykonywania powyższej pętli przy każdym opadającym zboczu sygnału na pinie 29 (digitalWrite(29,LOW); wygenerowane zostanie przerwanie i uruchomi się kod procedury int_impuls(), która zwiększy o 1 wartość zniennej globalnej impulsow.
Po jej skończeniu wyświetlony zostanie końcowy rezultat zliczania impulsów:
printf ("\n\nZliczono %d impulsow\n\n", impulsow);