Lekce 23 – Arduino a klávesnice 4×4

Pro naše projekty s Arduinem někdy potřebuje zadávat nějaké hodnoty, čísla či znaky. Samozřejmě můžeme k Arduinu připojit několik samostatných tlačítek pro pohyb a nastavení v menu, ale pro zadávání konkrétních hodnot se toto nehodí. Použijeme tedy již hotovou klávesnici (membránová či jiná), která obsahuje soubor tlačítek (vetšinou čísel a několik málo znaků). V našem případě budeme používat klávesnici, která má celkem 12 tlačítek (viz obrázek níže)

Jak můžete na obrázku vidět, klávesnice se k Arduinu zapojuje pomocí 8 pinového konektoru. Jak je to možné, když má klávesnice 16 tlačítek? Je to kvůli tomu, že je použito zapojení v poli (matrix). Když se podíváme na obrázek níže, každá řada tlačítek je jedním vývodem zapojený vývod z řady a druhý vývod z tlačítka je připojen k jednotlivým vývodům z sloupců.

Princip si jen tak nastíníme. Arduino postupně od řádku 1 (Row1) na přívod dá logickou 1 (HIGH) a a oskenuje zda se ta logická jednička nedostala na nějaký sloupec (Col1 až Col 4), tím zjistí zda bylo stisknuto tlačítko na řádku 1 a také zjistí jaké. Pak to samé udělá s řádkem 2 (Row2) a dále 3 a 4. Arduino to dělá velice rychle, skenuje každý řádek postupně ve velmi rychlém sledu, tak že mu neunikne ani velmi krátký stisk :-). Samozřejmě, že toto nemá náš program pro Arduino integrováváno a tak si importujeme knihovnu “keypad”. Tuto najdeme ke stažení na tomto odkazu v archivu zip. Stránky v angličtině o této knihovně najdete zde.

Použití této knihovny si tedy ukážeme s naší klávesnicí. Postup přidání knihovny do programu Arduino si vysvětlovat již nebudeme. Pro ty, kteří to neznají toto najdou v některých lekcích na začátku. Takže začneme psát program:

Jak vidíme na začátku importována knihovna “Keypad.h”. Poté pokračuje kód v nastavení vaší klávesnice. Zadáme počet řádků a sloupců tlačítek a dále v poli hexaKeys máme zapsáno jak jsou tlačítka umístěná. Poté již jenom zapíšeme, kam jsou vývody ze sloupců a řádků zapojeny a inicializujeme objekt Keypad s názvem customKeypad, kterému předáme parametry našeho nastavení. Samozřejmě jste si mohli všimnout, že lze nakonfigurovat i jiná klávesnice třeba 4×3 atd. Záleží jakou si seženete. V kódu vidíte, že ve smyčce loop zjišťujeme funkcí customKeypad.getKey();, která vrací asci kód stisknutého znaku v char. Když nebyl stisknut tak je null. Jinak vrací číslo 0 až 255. V programu tyto znaky odesíláme pro demonstraci funkčnosti na sériový port. 

Tak jak vidíte pohodička 🙂 a aby jsme to nějak využili, postavíme si třeba kódový zámek. Vzhledem k tomu, že ho nebudu někde reálně připojovat funkci elektromagnetického zámku bude suplovat LED dioda. Když bude svítit dioda červená zámek bude zavřený a když svítit zeleně, elektromagnet bude na několik sekund zapnutý k otevření dveří.

Na obrázku ještě můžete vidět připojený malý rep-ráček, který jsem vyndal ze starého PDA a připojil k Arduinu. Ten nám bude vydávat tón při odjištění dveří. Připojit místo něho můžete poměrně cokoliv, co doma najdete. Zkuste si sami. Detail repráčku je na obrázku níže.

Program není taktéž složitý a je mnoho variant jak ho napsat. Já mám napevno v programu zadaný správný kód pro otevření dveří. Je uložen v poli, které se potom porovná s polem, kde jsou zaznamenávány stisknuté číslice. Po potvrzení znakem #, program vyhodnotí zda je kód správný a otevře na 4 sekundy zámek pro otevření dveří. Vše je ozvučeno, jak stisk tlačítka, tak i špatný nebo správný kód.

Vše bez problémů funguje a jak říkám určitě to není jediný způsob jak tento program napsat. Kódová klávesnice bude mít i širší využití ve spojení s LCD displejem, ale věřím, že si již toto vymyslíte sami a i způsob využití najdete tak, aby Vám vyhovoval.

2 Komentářů

  1. zdenekmusil

    Neresili jste nekdo podobnou klavesnici, ale s diodama, proti ghostingu? Vcera jsem resil jednu takovou pro genialni plugin do xplane http://arduino.svglobe.com/ardsim_kmx.html a prekvapilo me, ze keypad.h s diodama nepocita a neumi je. Kdyz jsem je preklenul, normalne to fungovalo. Pro ty mensi zalezitosti jako zadavani hesla to pochopitelne neni potreba, ale na herni ovladace apod. by se to dost hodilo.

  2. STaRDusT

    Dobrý den. Chci se zeptat jestli jste náhodou neřešili i jak v programu nastavím že je tlačítko zmáčklé a držím ho zmáčklé. Když ho držím dělá program něco jiného než když jej jen zmáčknu? Případně jak? Díky

Napsat komentář

Translate »