Lekce 5
LED tekoucí potok

Úvod

V této lekci uděláme jednoduchý, ale zajímavý experiment – pomocí LED vytvoříme efekt tekoucího LED světla. Toto tekoucí světlo bude tvořeno pomocí osmi LED v řadě, které se postupně rozsvítí a zhasnou – jedna po druhé, stejně jako tekoucí voda.

Použité komponenty

  • modul Arduino
  • USB kabel
  • 8× LED
  • 8× rezistor (220 Ω)
  • nepájivé pole
  • vodiče pro nepájivé pole

Princip

Princip tohoto experimentu je jednoduchý – postupně zapnout a zhasnout osm LED za sebou pomocí digitálních výstupů. Jak ale dále uvidíme, při tvorbě programu budeme muset využít tzv. proměnných.


Postup experimentu

Krok 1: Sestavíme si obvod podle následujícího obrázku nebo schématu. 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 modulu Arduino.

Blokové schéma

Blokove schema

Elektronické schéma

Elektronicke schema

Použití proměnných

Abychom v programu mohli postupně „adresovat“ jednotlivé LED, využijeme k tomu práci s proměnnými. Práce s proměnnými je jednou ze základních technik programování, takže čím dříve se ji naučíme, tím dříve se můžeme pustit i do pořádných složitějších projektů.

Proměnné jsou paměťová místa, do kterých si můžeme ukládat různé hodnoty, se kterými pak můžeme dále pracovat. Můžeme si tak třeba ukládat stavy jednotlivých tlačítek, nebo kupříkladu celkový stav programu, ve kterém se právě nalézá. My zde proměnné budeme využívat pro číslo LED, kterou budeme chtít rozsvítit.

Proměnné vytvoříme a později pro následné použití i najdeme v příkazové skupině promenne na středním svislém příkazovém panelu. Proměnnou vytváříme pomocí tlačítka  Vytvoř proměnnou . Následuje poněkud zvláštní dialog (viz následující obrázek):

zalozeni promenne v prostredi mBlock

Na zadání jména proměnné asi není nic zvláštního, naopak možnost volby typu „Pro všechny postavičky“ a „Jen pro tuto postavičku“ může někoho vyděsit. Musíme si uvědomit, že prostředí mBlock je mimo jiného určeno i pro programování spritových postaviček. Tam toto nastavení má svůj význam a opodstatnění. My necháme zvolenou standardní volbu „Pro všechny postavičky“ a klikneme na tlačítko tlacitko OK. Rázem máme k dispozici oranžový programový blok pro zvolenou proměnnou, se kterým se může dále pracovat.

Poznámka:
Pozor na chybný překlad bloku pojmenovaného „zaměnit“ u proměnných (viz následující ukázka) :
blok zamenit promennou v prostredi mBlock
Nejde o blok nějaké záměny obsahu proměnné, ale o aritmetické přičtení zvoleného čísla k obsahu zadané proměnné. Zde tedy k obsahu proměnné AHOJ bude přičtena 1.
Na tuto chybu v překladu jsme vývojáře mBlok upozornili, ale doposud jsme se nedočkali nápravy. 😟


Krok 2: V prostředí mBlock sestavíme následující program. Pro potřeby našeho programu si vytvoříme proměnné nazvané lowestPin, highestPin a thisPin.


ikona vysvetleni Vysvětlení kódu

První část programu nastavuje do proměnných lowestPin a highestPin rozsah výstupních pinů, na kterých jsou připojeny jednotlivé LED. Velice zvláštní částí programu je úvodní nastavení všech výstupních pinů na nízkou úroveň. Nejde ani tak o nastavení této úrovně, jako o deklaraci, která se díky tomu v programu vytvoří. Prostředí mBlock totiž umí nastavit typ pinu (digitální/analogový, vstup/výstup) jen podle pevně zadaného čísla pinu. Bohužel v Block není možná dynamická deklarace pinů pomocí proměnné, která by se kupříkladu zvyšovala v nějakém úvodním cyklu od hodnoty proměnné lowestPin do hodnoty highestPin. Budeme si tedy pamatovat, že piny, které budeme chtít později dynamicky nastavovat pomocí proměnné, což je pochopitelně možné, je třeba na začátku programu pevně deklarovat trikem s přiřazením libovolné vstupní nebo výstupní hodnoty. Tím dojde v programu k deklaraci a tedy i určení, zda pin bude vstupní nebo výstupní a zda bude digitální, či analogový.

V hlavní nekonečné smyčce „opakuj stále“ je proměnná thisPin nastavena na adresu nejnižšího pinu s LED. Následuje podmíněná smyčka, ve které se hodnota proměnné thisPin postupně zvyšuje až do hodnoty nejvyššího čísla pinu s LED. Zároveň je v této smyčce nastavován příslušný pin na vysokou úroveň (se zdržením jedné desetiny vteřiny na každý pin). Díky tomu se postupně jedním směrem rozsvěcí řada LED připojených na výstupní piny. Po skončení první podmíněné smyčky jsou všechny LED rozsvícené.

Následující podmíněné smyčky fungují obdobným způsobem. Rozdíl je jen ve směru adresace – tedy zda se proměnná thisPin zvyšuje od proměnné lowestPin do hodnoty proměnné highestPin, nebo naopak snižuje od highestPin do lowestPin. To určuje, která LED se má rozsvítit (vysoká úroveň HIGH) nebo zhasnout (nízká úroveň LOW).

Určitě stojí na pokus, zkusit si trochu pohrát s pořadím jednotlivých podmíněných smyček nebo se směry adresace při rozsvícení/zhasnutí LED. Výsledný efekt postupného „tečení“ světla se tak dá krásně ovlivnit.


Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem tlacitko nahrat.

Krok 4: Nyní bychom měli vidět osm LED, které se postupně rozsvítí jedna po druhé – zleva doprava. Potom stejně postupně by měly zase zhasnout – zprava doleva. Následovat by mělo rozsvícení zprava doleva a zhasnutí zleva doprava. Celý tento proces se bude stále opakovat.

Pohled na experiment