Kurs Arduino #4: Pierwszy program- migające diody, obsługa przycisków

Okej, czas się wziąć za prawidłową część kursu czyli programowanie. W tej części pokaże między innymi w jaki sposób pisać programy, jakich reguł należy przestrzegać i na start wspólnie napiszemy program do obsługi diod LED oraz przycisków. Zapraszam ;)

Zanim przystąpimy do pisania programów to stworzę listę, co będziemy potrzebować na dzisiejszą lekcję:

1x Arduino
2x diody świecące LED
2x przyciski typu tact-switch
2x rezystory 220 ohm
2x rezystor 10k ohm
1x zestaw przewodów połączeniowych

Aby nam się łatwiej pracowało to stworzę spis:

  1. Zasady programowania w środowisku Arduino
  2. Migające diody LED
  3. Zmiana prędkości migania diod przy pomocy przycisków

czesci

 

1.  Zasady programowania w środowisku Arduino

Arduino jak każdy inne środowisko programistyczne posiada swoją własną, określoną składnie. Jeżeli ktoś zna język C/C++/C# to od razu zauważy korelacje pomiędzy tymi dwoma językami/ środowiskami. Składania w języku Arduino jest bardzo prosta do zrozumienia. Po otwarciu się nowego szkicu w Arduino ukazują nam się takie cztery linijki:

W funkcji void setup() wpisujemy konfigurację początkową dla naszego programu. To znaczy ustalamy jakie piny są wejściami, jakie wyjściami, jaki stan po uruchomieniu mikrokontrolera mają mieć piny. Co ważne ta funkcja wykonywana jest tylko raz w cały cyklu programu, potem mikrokontroler automatycznej przechodzi do funkcji void loop().
      W funkcji void loop() zawieramy cały nasz program. Główna pętla programu będzie wykonywana cały czas- od początku do końca, aż do momentu odłączenia zasilania. Podsumowując, w void setup() wpisujemy konfigurację pinów mikrokontrolera, a do void loop() cały nasz program. Granicę każdej funkcji wyznaczają nam nawiasy klamrowe. Jeżeli linijka kodu nie jest początkiem funkcji typu setup(), loop(), if() to zakańczamy ją średnikiem.
No dobrze ale jak mam pisać ? Zdecydowanie programu nie piszę się tak:

Pół żartem, pół serio. Żeby zdefiniować piny to musimy użyć funkcji:

Przykład:
Chcę zdefiniować pin 9 jako wyjście , oraz pin A0 jako wejście. Zatem piszę:

Środowisko Arduino pozwala nam na pisanie komentarzy do programu. Aby zacząć komentarz musimy wstawić dwa ukośniki, tak jak zrobiłem to wyżej. Komentarze nie są kompilowane z programem, służą one jedynie w ułatwieniu pisania programu, żeby wiedzieć co np. dana linijka w danym momencie robi, czy też do jakiego podprogramu się odnosi.
Teraz przechodzimy do funkcji loop, gdzie pokaże jak w prosty sposób zarządzać stanami pinów. Z pomocą przychodzą nam funkcje:

Ale kiedy, którą używamy ?
funkcję digitalWrite() używamy gdy chcemy nadać danemu pinowi jeden z dwóch stanów- niski albo wysoki, natomiast funkcję analogWrite(), gdy chcemy kontrolować podawane napięcie na dany pin, przez co możemy otrzymać rozjaśnianie i ściemnianie diody LED. Dlatego żeby był porządek w kodzie to funkcję digitalWrite() używamy jak chcemy podać 0 albo 1 logiczne, a analogWrite() gdy chcemy kontrolować podawane napięcie. Proste ? Proste.

To żeby nasz program działał w jakiś „widoczny sposób” to musimy dodawać opóźnienia czasowe po danej funkcji. Bo jeżeli zrobimy program na zasadzie:

to program będzie wykonywać tą funkcję, lecz będzie się odbywać z taką częstotliwością, że ludzkie oko zaobserwuje to jako obraz statyczny i nie zobaczymy przejścia diody z jednego stanu na drugi. Tutaj z pomocą przychodzi nam funkcja delay():

Więc, żeby nasz program miał szansę zadziałać to musimy zrobić to tak:

I w ten sposób przez przypadek napisaliśmy program. Lecz żeby było wszystko uporządkowane to przejdziemy do punktu 2.

  • Marcin Łakomiec


    int ledG = 9; //nazwę „ledG” przypisujemy do pinu 9
    int ledR = 10; //nazwę „ledR” przypisujemy do pinu 10″

    A z kąt uC ma wiedzieć jaki port wykorzystać ?

    • W Arduino tak to jest pomyślane, że oznaczenia pinów na płytce oznaczają od razu ich numery podawane do programu. Nie ma potrzeby znania nazw danych portów ;)