V minulých lekcích jsme se naučili ovládat digitální výstupy. V následujících lekcích si ukážeme možnost načítání analogového vstupu – kupříkladu v této lekci využijeme potenciometr, kterým budeme měnit interval blikání LED.
Když už jsme se příliš nevytáhli v originalitě hardwarové části zapojení, zkusíme to dohnat v softwarové části. V obslužném programu využijeme nejen znalost proměnných, ale program si zpřehledníme pomocí techniky využití podprogramu. Tato lekce by nám tedy měla ukázat nejen možnost načítání analogového vstupu modulu Arduino, ale i možnost, jak vhodným způsobem výrazně zkrátit blokový program. I když se tento program bude chovat trochu jinak, než se choval program v lekci „LED tekoucí potok“, i zde se bude světlo pohybovat po LED tam a zpět. Rozdílem zde jen bude to, že vždy svítí jen jedna LED a světlo tedy bude po sloupci LED přebíhat nahoru a dolů, zatímco předtím se postupně rozsvěcela a zhasínala celá řada.
Kdybychom chtěli dosáhnout stejného efektu, jako byl v lekci LED tekoucí potok, bylo by to možné poměrně jednoduchou úpravou hlavního podprogramu. Takže bychom dokázali napsat předchozí program poměrně jednodušším způsobem. Následující program by tedy měl i ukázat, že tvorba jednoduchého a funkčního kódu není jen o znalosti daného programovacího jazyka, ale i na určitém citu pro tvorbu algoritmu.
Podobně jako v lekci „LED tekoucí potok“ použijeme osm LED, které budeme postupně rozsvěcet a zhasínat. Doplněním dříve použitého zapojení je použití potenciometru, který připojíme mezi napájecí napětí a jeho jezdec připojíme k analogovému pinu A0
modulu Arduino. Potenciometr pak slouží jako dělič napětí, napěťovou hodnotu načtenou analogovým vstupem využijeme pro určení rychlosti běhu programu. Ve výsledku tedy budeme pomocí natáčení potenciometru nastavovat celkovou rychlost světelného efektu.
Krok 1: Sestavíme si obvod podle následujícího obrázku nebo schématu. Potenciometr zapojíme krajními piny k napájecímu napětí +5 V
a zemi GND
. Prostřední pin (jezdec) připojíme k analogovému pinu A0
. LED zapojíme katodou (kratší vývod) k zemi GND a anodou (delší vývod) přes rezistor 220 Ω k digitálním pinům 2
–9
modulu Arduino.
Blokové schéma
Elektronické schéma
Krok 2: V prostředí mBlock sestavíme následující program. Pochopitelně nejdříve musíme definovat proceduru ChangeLED
, která se stará o rozsvěcení připojených LED.
Následuje hlavní program:
Celý program včetně podprogramu lze stáhnout z:
http://
Proměnné lowestPin
a highestPin
určují rozmezí čísel pinů s připojenými LED. Proměnná ledNum
pak určuje celkový počet připojených LED. Proměnná direction
určuje směr, ve kterém budeme LED rozsvěcet a zhasínat. Proměnné currentLED
a thisPin
určují číslo LED/pinu, kde bude LED aktuálně rozsvícena. Rychlost efektu bude nastavována pomocí proměnných changeTime
a ledDelay
.
Úvodní část programu nastavuje použité proměnné na výchozí hodnoty, také jsou zde nastavené jednotlivé digitální výstupy s LED pomocí triku se zápisem výstupní hodnoty (popsáno dříve). Za zmínku stojí použití časovače, jehož hodnotu (počet sekund od zapnutí modulu Arduino) uchováváme v proměnné changeTime
.
V hlavní nekonečné smyčce načítáme do proměnné ledDelay
hodnotu napětí na pinu A0
(rozsah 0–1023). Hodnotu využijeme v podmínce testu přírůstku časovače. Pokud je přírůstek časovače větší (rozdíl hodnoty časovače a proměnné changeTime
je větší než ledDelay
), provede se podprogram ChangeLED
a nastaví se nová hodnota proměnné changeTime
, aby mohl být opět testován přírůstek časovače.
V podprogramu ChangeLED
jsou nejdříve nastavením digitálních pinů na nízkou hodnotu zhasnuty všechny LED. Aktuální LED pak bude rozsvícena pomocí proměnné currentLED
, jejíž hodnota je pak buď zvýšena, nebo snížena o jedničku. Zda bude hodnota proměnné currentLED
zvýšena, nebo snížena, rozhoduje proměnná direction
, která má hodnotu buď +1, nebo –1. V podprogramu se podmínkami řeší testování krajních hodnot proměnné currentLED
, pak je změněna hodnota proměnné direction
.
Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem .
Krok 4: Měli bychom vidět osm LED, které se postupně zleva doprava a zpět rozsvěcí. Nastavení potenciometru ovládá rychlost celého efektu.