Prosta aplikacja na Arduino – sterownik linijki LED
Po zmontowaniu układu zgodnie z rysunkiem 3 należy go dołączyć do komputera osobistego kablem USB i można rozpocząć eksperymenty z programem. Na listingu 2 pokazano program pozwalający uzyskać efekt przesuwającego się punktu świetlnego.
Listing 2. Program sterujący linijką diod LED dla układu pokazanego na fot. 4 (prog_01.ino)
#define LED_POCZ 2 #define LED_KON 9 void setup() { int i; //linie 2...9 jako wyjścia for (i = LED_POCZ; i <= LED_KON; i++) pinMode(i, OUTPUT); } void loop() { int i; //przesuwający się punkt for (i = LED_POCZ; i <= LED_KON; i++) { digitalWrite( i, HIGH ); delay(200); digitalWrite( i, LOW ); } }
W pierwszych dwóch liniach programu, wykorzystując dyrektywę preprocesora #define, zdefiniowano dwie stałe: LED_POCZ i LED_KON o wartościach odpowiednio 2 i 9. Diody LED są dołączone do linii we/wy Arduino Uno o numerach: 2, 3, 4, 5, 6, 7, 8 i 9. W funkcji setup() linie te są ustawiane w tryb wyjściowy za pomocą funkcji:
pinMode(i, OUTPUT);
Zdefiniowane stałe LED_POCZ i LED_KON odpowiadają pierwszej i ostatniej wykorzystywanej linii we/wy. W programie dostęp do tych linii jest realizowany za pomocą pętli for, która dla zwiększenia czytelności programu wykorzystuje te stałe:
for (i = LED_POCZ; i <= LED_KON; i++) pinMode(i, OUTPUT);
Po ustawieniu wymaganej konfiguracji linii we/wy pożądany efekt, czyli przesuwający się punkt świetlny, uzyskuje się w pętli:
for (i = LED_POCZ; i <= LED_KON; i++) { digitalWrite( i, HIGH ); delay(200); digitalWrite( i, LOW ); }
W każdej iteracji powyższej pętli jest zapalana kolejna dioda LED. Każda dioda świeci się przez 200 ms. Zmieniając wartość funkcji delay() można łatwo zmienić szybkość przesuwania się punktu świetlnego.
W tym miejscu warto zauważyć, że zmiana linii we/wy, do których są dołączone diody LED, w zasadzie demoluje nasz program. Niestety czasami projektując płytkę drukowaną okazuje się, że zmiana kolejności dołączenia tych diod, skutkowałaby znacznie łatwiejszą w wykonaniu płytką drukowaną. Jest łatwy sposób zabezpieczenia się przed tego typu niedogodnościami. Wystarczy do „adresowania” diod LED wykorzystać odpowiednio przygotowaną tablicę, tak jak to pokazano na listingu 3. Tablica leds[] zawiera numery linii we/wy, do których są dołączone diody LED. W przypadku układu pokazanego na rysunku 3 tablica leds[0] powinna wyglądać następująco:
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
W programie odwołanie do pierwszej diody LED w linijce świetlnej odbywa się poprzez wywołanie pierwszego elementu tablicy, czyli leds[0], co zostanie w trakcie pracy programu zastąpione przez odwołanie do linii we/wy o numerze 2.
Jeżeli z jakichś powodów okaże się, że diody należy dołączyć w inny sposób, np. zamieniając diodę pierwszą z ostatnią (rysunek 6), to wystarczy zmienić zawartość tablicy leds[] bez modyfikowania reszty programu:
int leds[] = {9, 3, 4, 5, 6, 7, 8, 2};
Rys. 6. Widok połączeń Dołączenie 8 diod LED do Arduino Uno – wykonanie połączeń
Listing 3. Program sterujący linijką diod LED dla układu pokazanego na fot. 4 (prog_02.ino)
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9}; #define LEDS_SIZE 8 void setup() { int i; //linie z tablicy leds jako wyjścia for (i = 0; i < LEDS_SIZE; i++) pinMode( leds[i], OUTPUT ); } void loop() { int i; //przesuwający się punkt for (i = 0; i < LEDS_SIZE; i++) { digitalWrite( leds[i], HIGH ); delay( 200 ); digitalWrite( leds[i], LOW ); } }