Dotyková klávesnice je řízená obvodem TTP229. Tento vstupní Arduino modul obsahuje celkem 16 kapacitních dotykových tlačítek. Díky využití zmíněného obvodu TTP229 ale dokážeme číst stav těchto tlačítek pouze pomocí dvou datových vodičů a dvou napájecích. Na zbylých výstupních pinech modulu označených jako OUT1 až OUT8 jsou vyvedeny plošky tlačítek 9 až 16. Díky tomu tedy můžete místo plošek na desce připojit například vlastní externí plošky či tlačítka. Pro napájení modulu lze použít napětí v rozmezí 2,4 až 5,5 V. Proudový odběr se pak pohybuje okolo 2,5 uA. Důležitá poznámka je pak ještě k přepnutí počtu načítaných tlačítek. Z výroby je totiž zapnuto čtení pouze prvních osmi tlačítek. Pro povolení čtení všech šestnácti tlačítek je nutné vytvořit propojku č.3 u konektoru P1, jak je označeno na obrázku níže.
Pro úspěšné propojení dotykové klávesnice s Arduino deskou propojíme celkem 4 vodiče. Připojíme Vcc na +5V Arduina, GND na zem Arduina, SCL na pin D3 a SDO na pin D4. Zmíněné datové piny SCL a SDO můžeme zapojit i na jiné volné piny, ale je nutné tuto volbu provést také na začátku programu.
Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů a vytvoření proměnné pro uložení čísla stisknutého tlačítka. V podprogramu setup jako první nastavíme komunikaci po sériové lince a následně nastavíme směr obou propojovacích pinů. V nekonečné smyčce loop vždy na začátku zavoláme podprogram nactiStav, kterým uložíme číslo stisknutého tlačítka do proměnné. Následně zkontrolujeme, jestli je hodnota proměnné větší než nula a při splnění této podmínky vytiskneme informaci o stisknutém tlačítku po sériové lince. V posledním kroku vyčkáme 250 milisekund před novým během smyčky loop. Podprogram nactiStav slouží ke zmíněnému načtení informací o stisknutých tlačítkách. Na jeho začátku vytvoříme pomocné proměnné a poté pomocí for smyčky projdeme postupně stav všech tlačítek. Pokud je nějaké tlačítko stisknuté, uložíme jeho číslo do proměnné stavTlacitka a po dokončení skenování všech tlačítek vrátíme jako výstup podprogramu obsah této proměnné.
// Arduino Dotyková klávesnice TTP229 // nastavení čísel propojovacích pinů #define pinSCL 3 #define pinSDO 4 // proměnná pro uložení čísla tlačítka byte tlacitko; void setup() { // komunikace po sériové lince rychlostí 9600 baud Serial.begin(9600); // nastavení směru propojovacích pinů pinMode(pinSCL, OUTPUT); pinMode(pinSDO, INPUT); } void loop() { // načtení aktuálního stavu stisknutých tlačítek tlacitko = nactiStav(); // pokud bylo stisknuto tlačítko, vytiskni jeho číslo // po sériové lince if (tlacitko > 0) { Serial.print("Stisknuto tlacitko "); Serial.println(tlacitko); } // pauza před další kontrolou delay(250); } // podprogram pro načtení stavu klávesnice byte nactiStav(void) { // pomocné proměnné byte poradi; byte stavTlacitka = 0; // smyčka for, která projde stav všech 16 tlačítek // a v případě detekci stisku některého z tlačítek // nastaví do proměnné stavTlacitka jeho číslo for (poradi = 1; poradi <= 16; poradi++) { digitalWrite(pinSCL, LOW); // pokud je detekován stisk, ulož číslo tlačítka if (!digitalRead(pinSDO)) { stavTlacitka = poradi; } digitalWrite(pinSCL, HIGH); } // podprogram vrací číslo stisknutého tlačítka // nebo nulu v případě bez dotyku return stavTlacitka; }
Po nahrání programu do Arduino desky s připojenou dotykovou klávesnicí a stisknutí tlačítek dostaneme například tento výpis:
Stisknuto tlacitko 1 Stisknuto tlacitko 2 Stisknuto tlacitko 3 Stisknuto tlacitko 4 Stisknuto tlacitko 5 Stisknuto tlacitko 6 Stisknuto tlacitko 7 Stisknuto tlacitko 8 Stisknuto tlacitko 9 Stisknuto tlacitko 10 Stisknuto tlacitko 11 Stisknuto tlacitko 12 Stisknuto tlacitko 13 Stisknuto tlacitko 14 Stisknuto tlacitko 15 Stisknuto tlacitko 16
Dotyková klávesnice s obvodem TTP229 je jednoduše použitelný vstupní modul nejen pro Arduino, který umožňuje s pouze dvěma datovými piny pracovat s až 16 tlačítky. Hodí se tedy do projektů, kde potřebujeme klávesnici s 16 tlačítky, jako například Arduino kalkulačka či vstupní terminál. Velkou výhodou dotykových klávesnic obecně je také větší životnost díky absenci pohyblivých částí.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html