Lekce 23 - Arduino a klávesnice 4x4
05.08.2013 17:45Translate 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ětDiskusní téma: Lekce 23 - Arduino a klávesnice 4x4
Datum | 15.10.2017 |
---|---|
Vložil | Stano |
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 | 25.10.2017 |
---|---|
Vložil | Peter |
Titulek | Re: Načitanie |
tiez by ma to zaujimalo...
———
Datum | 21.04.2020 |
---|---|
Vložil | tom1611 |
Titulek | Re: Re: Načitanie |
Podívej se na předposlední řádek programu. Tam je to načítání.
———
Datum | 27.05.2014 |
---|---|
Vložil | Milan |
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 | 01.10.2013 |
---|---|
Vložil | Richard Gavenda |
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 | 30.06.2014 |
---|---|
Vložil | Jardo |
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 | 21.02.2015 |
---|---|
Vložil | Route66 |
Titulek | Re: Moc pinů |
Já jsem zase vyzkoušel čtení po jednom pinu analogově. Knihovna na to je zde (https://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.
———
Datum | 31.10.2020 |
---|---|
Vložil | 99nick |
Titulek | Re: Re: Moc pinů |
Zapojení jsem několikrát kontroloval a zatím výsledek 0. mohl bys mi předložit funkční skicu, tu v origo příkladu zaboha nemůžu rozchodit. Už v originále mi při kompilaci hlásí chybu. adÍKY.
———