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 naspat 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
. 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 &Omega k digitálním pinům 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
.
Následuje hlavní program:
Celý program včetně podprogramu lze stáhnout z:
http://mBlock.fyzika.net/
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.