Lekce 23 - Arduino a klávesnice 4x4

05.08.2013 17:45

Translate to English

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řejmně, ž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 tláčí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 4x3 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 stiskut 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ý repráč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. 

Zpět

Diskusní téma: Lekce 23 - Arduino a klávesnice 4x4

Datum
Vložil
Titulek

Načitanie

Ako nacitavas zadane znaky do pola "pressedKey"? Ved pri porovnavani donho musis nacitat znaky z klavsenice a az tak ho mozes porovnavat ...

Datum
Vložil
Titulek

Re: Načitanie

tiez by ma to zaujimalo...

Datum
Vložil
Titulek

rele

Napadlo ma či by sa nedalo matrixom 4*4 ovládať relé miesto tlačítok.
Príklad :
- stlačím 4 na matrixe zopne rele na pine 24
- stlačím 6 na matrixe zopne rele na pine 26 atď.
Momentálne ma nenapadá ako to na to.
Ak by niekto vedel ako to napísať, hodte to tu prosím.
Ďakujem.

Datum
Vložil
Titulek

Moc pinů

Pokud si nemůžete dovolit obětovat 8 vstupů/výstupů můžete využít I/O expander PCF8574 a celou klávesnici připojit na I2C sběrnici. Více info zde: bradsduino.blogspot.cz/2013/01/i2c-version-of-using-4x4-universal-16.html

Datum
Vložil
Titulek

Re: Moc pinů

Ja to všetko tlačim do Atmeg8 ces ArduinoMega2560 a napriek tomu tam je dosť pinov :D Dokonca to z ADC pinov urobilo obyčajne :D :D

Datum
Vložil
Titulek

Re: Moc pinů

Já jsem zase vyzkoušel čtení po jednom pinu analogově. Knihovna na to je zde (http://playground.arduino.cc/Code/OneWireKeyPad) ale trošku mi zlobila a rozložení odporů nebylo ideální a bralo zákmity zejména kolem 0Volt. Tak jsem si ji upravil a keypad mi spolehlivě maká na jednom vstupu.

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.