Ve vědomostních soutěžích, především v těch zábavních, organizátoři často používají bzučákový systém, který slouží k přesnému a spravedlivému určení čísla odpovídajícího. Zkusíme si takový systém také vytvořit. Jelikož se jedná již o složitější projekt, budeme potřebovat větší počet součástek. V této lekci budeme používat tlačítka, bzučák a několik LED s rezistory.
Tlačítka 1, 2 a 3 budou sloužit pro odpovídání soutěžících, tlačítkem 4 budeme celé zařízení resetovat, aby bylo připraveno pro další odpověď. Zapojení bude testovat stisknutí jednotlivých tlačítek soutěžících a dle jejich stavu vyhodnotí výsledek vizuálně pomocí zhasnutí odpovídající LED a i zvukově pomocí signálu. Chceme-li začít další kolo, jednoduše zmáčkneme tlačítko 4 a opět vše bude připraveno.
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
Elektronické schéma
Jak jsme viděli již při zapojování elektronické části této lekce, je lekce kvízového bzučáku již jedním z relativně složitějších zapojení. Ne jinak tomu bude i v případě řídicího programu. V programu budeme na několika místech potřebovat spustit zvukový alarm, abychom nemuseli na toto místo neustále psát část kódu, která je vlastně stejná, využijeme tzv. podprogram, což je část kódu, kterou budeme volat mocí jejího programového bloku. Vlastně si tak trochu vytvoříme takový svůj vlastní programový blok.
Nezačneme tedy tvorbou hlavního programu, ale právě tímto podprogramem. Vytváříme jej normálně na pracovní ploše prostředí mBlock – třeba hned vedle bloků hlavního programu.
Vytvoření vlastního podprogramu začneme kliknutím na růžovou ikonu na svislé střední liště příkazových bloků. V místech, kde obvykle bývá nabídka programových bloků je nyní jen tlačítko Vytvoř blokׅ . Pro vytvoření podprogramu (svého bloku) na tlačítko klikneme a otevře se nám následující okno průvodce vytvoření vlastního bloku:
Nejdříve je třeba zvolit jméno bloku podprogramu, my si zvolíme název Alarm
. Další částí tvorby je pak nastavení vstupních parametrů, se kterými může tento blok pracovat. Jelikož se nyní s tvorbou podprogramu seznamujeme, je náš vlastní blok bez jakýchkoliv dalších vstupních parametrů. Později si ukážeme, jak vytvořit podprogram se vstupními parametry a uvidíme, že se to občas opravdu hodí. V tuto chvíli se vytvoření vlastního bloku zatím skutečně skládá jen z volby jména. Klikneme tedy na tlačítko .
Po potvrzení názvu vlastního bloku se nám nejen objeví v příkazové kategorii „Moje bloky“ programový blok se zvoleným názvem , ale i na pracovní ploše se objeví hlavička . K této hlavičce můžeme přichycovat příkazové bloky, které se mají vykonávat při zavolání programového bloku Alarm
. Je to úplně stejné jako při tvorbě běžného kódu, kdy příkazy vkládáme pod hlavičku .
Krok 2: V prostředí mBlock sestavíme následující podprogram. Pod hlavičku vlastního bloku Alarm
tedy vytvoříme následující kód podprogramu, který bude ovládat aktivní bzučák. Tento kód vychází z předchozího kódu pro aktivní bzučák.
Jakmile máme definovanou „pracovní náplň“ vlastního programového bloku Alarm
, můžeme tento programový blok použít pro vytvoření následujícího hlavního kódu programu. Pochopitelně, jakmile budeme potřebovat do programu vložit růžový programový blok Alarm
, najdeme jej v příkazové kategorii „Moje bloky“ a pracujeme s ním stejně jako s jakýmkoliv jiným blokem.
Podobně jako jsme si definovali vlastní blok podprogramu, musíme definovat jednotlivé proměnné. Jak dále v programu uvidíme, budeme potřebovat dokonce pět proměnných. První tři, které nazveme b1State
, b2State
a b3State
, budeme používat pro uložení stavu tlačítek soutěžících. Proměnnou b4State
použijeme pro testování stisknutého čtvrtého (resetovacího) tlačítka. Pátá proměnná, nazvaná flag
, bude sloužit pro uložení stavu, ve kterém se kvízový bzučák nachází (to si podrobněji vysvětlíme v popisu programu).
Celý program včetně podprogramu lze stáhnout z:
http://
Pochopitelně nezapomeňme k tomuto hlavnímu programu přidat již dříve zmíněný podprogram Alarm
😀
Oproti předchozím programům není úplně celý kód zanořen do nekonečné smyčky „opakuj stále“. Dříve než začne tato smyčka, jsou v programu pracovní proměnné nastaveny na výchozí hodnoty. V tomto případě to je u všech proměnných hodnota 0. V nekonečné smyčce se pak odehrává zbytek programu. Prvním krokem je nastavení výstupních digitálních pinů 6
, 7
, 8
a 10
, na kterých jsou připojeny signalizační LED na výchozí hodnotu LOW (nízká úroveň). Pokud je stisknuto resetovací tlačítko na pinu 9
, je stav čekání na odpověď signalizován rozsvícením signální čtvrté LED (pin 10
) a stavová proměnná flag
je nastavena na hodnotu 1. Pokud je proměnná flag
rovna 1, dochází k cyklickému načítání digitálních vstupů 2
, 3
a 4
, na kterých jsou připojena tlačítka soutěžících, do proměnných b1State
–b4State
. Následuje postupné testování těchto proměnných. Pokud je některé z tlačítek stisknuto dojde ke zvukovému signálu (podprogram Alarm
) a k rozsvícení příslušné LED a ke zhasnutí LED soupeřů. Zároveň je změněna hodnota proměnné flag
, aby nadále již nedocházelo k načítání tlačítek soutěžících. Program tedy opět čeká na stisknutí čtvrtého (resetovacího) tlačítka, kdy dojde k rozsvícení všech LED soutěžících a hlavně k nastavení proměnné flag
na hodnotu 0, která povolí načítání ostatních tlačítek.
Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem .
Krok 4: Nejprve zmáčkneme tlačítko 4, tím začne soutěž. Pokud prvně zmáčkneme některé z tlačítek soutěžících, rozsvítí se odpovídající LED a pípne bzučák. Poté je třeba opět zmáčknout tlačítko 4 pro resetování.