Ako najjednoduchšia možnosť práce s výstupnými pinmi je použiť digitálny pin č. 13, ku ktorému je už priamo na doske Arduina pripojená LED cez sériový rezistor (Pozor na túto skutočnosť pri použití pinu č. 13 ako vstupu!).
Digitálny pin nastavíme ako výstupný príkazom pinMode(cislo_pinu, OUTPUT); na začiatku programu, najčastejšie vo funkcii void setup().
Po pripojení dosky Arduina k PC a spustení vývojového prostredia môžeme načítať vzorový program z hlavného menu cez File - Examples - 01.Basics - Blink.
V ďalšom texte budeme uvažovať zapojenie vlastných LED na kontaktnom poli.
Najprv treba rozhodnúť, akou hodnotou (HIGH/LOW) priradenou k pinu, kde je LED pripojená, budeme LED rozsvecovať a zhasínať (viď predchádzajúci článok). Ak chceme LED rozsvecovať priradením LOW na pin, je potrebné sériové zapojenie LED a rezistora pripojiť k +5V. Ak chceme LED rozsvecovať priradením HIGH na pin, je potrebné sériové zapojenie LED a rezistora pripojiť k 0V, GND (tento spôsob ovládanaia LED sme vybrali pre ďalšie príklady.
Na kontaktné pole zapojíme LED a rezistor. Kratšia nožička LED, zrezaný klobúčik, Katóda (-) bude spojená s GND. Anóda bude cez rezistor 1k pripojená na pin č. 9 Arduino dosky.
S premennou int sme už pracovali. V tomto príklade použijeme premenné typu boolean, byte a word. K ich bližšiemu popisu doporučujeme pozrieť referenčné stránky. Podobne aj k logickej operácii ! (not) v predposlednom riadku programu.
/* LED - blikanie digitalWrite() */ boolean stav=LOW; // 0 (false) alebo nenula (true) byte LED_pin=9; // od 0 do 255 word cakaj_ms=500; // od 0 do 65535 void setup() { pinMode(LED_pin, OUTPUT); // nastavenie vystupneho pinu } void loop() { digitalWrite(LED_pin, stav); // zapis hodnoty stav na LED delay(cakaj_ms); // cakanie stav=!stav; // zmena hodnoty stav }
Na kontaktné pole môžeme zapojiť aj viac LED. Katódy všetkých LED pripojíme k GND a ku každej anóde sériovo zapojíme rezistor 1k. každý rezistor potom pripojíme na iný digitálny pin Arduino dosky. Môžeme potom softvérovo vytvárať rôzne vzory rozsvecovania jednotlivých LED, alebo naprogramovať jednoduché binárny sekundový odpočet - stopky.
V tomto príklade je použitých 8ks LED pripojených na digitálne piny 2 až 9. V programe je použitá celočíselná premenná typu pole array a pri výpočte prevodu čísla z desiatkovej do dvojkovej sútavy je použitá funkcia % modulo - zvyšok po celočíselnom delení.
// Binarny odpocet sekund (0-255), Arduino Nano, 8xLED int i, j, k, p[8]; void setup() { for (i=2; i<=9; i++) { // LED na pinoch 2 az 9 vystupy pinMode(i,OUTPUT); } } void loop() { for (i=0; i<=255; i++) { // cyklus cez cely rozsah j=1; for (k=0; k<=7; k++) { // vypocet a zobrazenie LED p[k]=i/j %2; digitalWrite(k+2, p[k]); j*=2; } delay(1000); // cakanie 1s } }
Niektoré výstupné digitálne piny môžu pracovať v PWM. Príkazom anlogWrite() na príslušný pin môžeme zapísať hodnotu od 0 do 255. Na zapojení s 1 LED pripojenou na pin č. 9 môžeme realizovať ovládanie jasu LED s použitím PWM.
LED sa bude neustále rozsvecovať a zhasínať.
/* LED - zmena jasu analogWrite() */ int LED_pin=9, // LED je pripojena na PWM pin c. 9 cakaj_ms=10, // cim vacsie cislo, tym rychlejsia zmena jas=0, // hodnota PWM zmena_jasu=1; // delta void setup() { pinMode(LED_pin, OUTPUT); // nastavenie vystupneho pinu } void loop() { analogWrite(LED_pin, jas); // led svieti PWM jas delay(cakaj_ms); jas += zmena_jasu; if (jas==255 || jas==0) zmena_jasu = -zmena_jasu; }
Aby sme ulahodili nielen našim zrakovým zmyslovým orgánom (očiam), ale aj našim sluchovým zmyslovým orgánom (ušiam) tak môžeme namiesto sériového zapojenia LED a rezistoru zapojiť bzučiak (piezoelektrický akustický menič), ktorý vyhľadáme aj pomocou kľúčových slov buzzer alebo piezo speaker. Dlhšia nožička je kladná (+). Bzučiak môžeme ovládať ako digitálne (digitalWrite()), tak aj PWM (analogWrite()). Doporučujeme neodlepiť papierovú nálepku na bzučiaku.
Doteraz sme pracovali iba s jednofarebnou LED. Pri použití troch LED, z ktorých jedna by bola červená, druhá zelená a tretia modrá (Red, Gree, Blue) by sme mohli rôznou intenzitou jednotlivých farebných zložiek dostať rôzne farby (podobne ako keď definujeme farbu v html kóde hodnotami 00-FF (0-255) pre zložky R, G, B).
RGB LED je vlastne spojením takýchto troch farebných LED do jedného púzdra. LED majú spoločnú buď anódu (+) alebo majú spoločnú katódu (-). Pre naše ďalšie experimenty použijeme RGB LED so spoločnou katódou (common cathode). Spoločná katóda je tá najdlhšia nožička a pripájame ju na GND. Rezistory opäť použijeme 1k.
LED sa bude neustále rozsvecovať a zhasínať po jednotlivých farebných zložkách.
/* RGB LED (spolocna katoda) zmena jasu */ int i, j; int led[3] = {9, 10, 11}; // piny R, G, B int cakanie=5; // ms void setup() { for (i=0; i<=2; i++) { pinMode(led[i], OUTPUT); // vystupne piny } } void loop() { for (j=0; j<=2; j++) { // pre vsetky 3 farby for (i=0; i<=255; i++) { // rozsvecovanie analogWrite(led[j], i); delay(cakanie); } for (i=255; i>=0; i--) { // zhasinanie analogWrite(led[j], i); delay(cakanie); } } }
LED bude svietiť náhodnými farbami. V tomto príklade použijeme nové príkazy randomSeed(), analogRead() a random() pre generovanie náhodných čísel.
/* RGB LED (spolocna katoda) nahodna farba */ int i; int led[3] = {9, 10, 11}; // piny R, G, B int cakanie=200; // ms void setup() { for (i=0; i<=2; i++) { pinMode(led[i], OUTPUT); } randomSeed(analogRead(0)); // inicializacia nahody } void loop() { for (i=0; i<=2; i++) { analogWrite(led[i], random(0, 255)); // nahodna farba } delay(cakanie); }
Na kontaktné pole môžeme zapojiť aj viac RGB LED. Katódy všetkých RGB LED pripojíme k GND a ku každej anóde každej RGB LED sériovo zapojíme rezistor 1k. každý rezistor potom pripojíme na iný digitálny pin Arduino dosky. Môžeme potom softvérovo vytvárať rôzne vzory rozsvecovania jednotlivých farieb LED, rôznofarebného svetelného hada.
Na záver uvedieme ešte fotografie zachytávajúce prácu s LED na kontaktnom poli v záujmovom útvare KoPR na ZŠ s MŠ Chlebnice.
Schémy zapojení boli vytvorené v programe Eagle 6.1.0. Obrázky schematického znázornenia obvodov na kontaktnom poli boli vytvorené v programe Fritzing 0.9.0. Html kód príkladov je generovaný pomocou http://tohtml.com/cpp/.
PaedDr. Karol Pauchly, ZŠ s MŠ Chlebnice, november 2014