Ovládací panel s obvodem TM1638 obsahuje 8 LED diod, 8 sedmi-segmentovek a 8 spínačů. Je tedy vhodný jako ovládací a zároveň zobrazovací rozhraní pro uživatele. Velkou výhodou tohoto ovládacího panelu je právě obvod TM1638, díky kterému je možné ovládat zmíněných 24 prvků pouze pomocí 5 vodičů, z kterých jsou 3 datové. Pokud by jsme chtěli ovládat tyto prvky běžným způsobem, potřebovali by jsme 32 vodičů.
Pro úspěšné propojení s Arduino deskou tedy zapojíme zmíněných 5 vodičů. Připojíme Vcc na +5V, GND na zem, STB na pin 4, CLK na pin 3 a DIO na pin 2. Datové piny můžeme samozřejmě současně se změnou v programu vyměnit za jiné volné.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu TM1638, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení knihovny, nastavení čísel pinů pro propojení s Arduinem a vytvoření instance panel z knihovny TM1638. V podprogramu setup se nachází pro účely testování nastavení komunikace po sériové lince. Dále v nekonečné smyčce vždy vytvoříme proměnné pro uložení stavu tlačítka a do proměnné cas si načteme informace o počtu sekund od spuštění Arduino desky. Poté je uveden příklad nastavení LED diod odpovídající stisknutým klávesám a pod tímto příkazem je ještě v komentáři uveden způsob, jak rozsvítit jednotlivé LED diody. Jako další následuje překladový switch, který převádí hodnotu z obvodu TM1638 na pro nás jednodušší rozsah 1-8 a pod ním je uvedena podmínka if, která kontroluje stisknutí libovolného tlačítka. Pokud tedy bylo stisknuto nějaké tlačítko, vypíše jeho číslo po sériové lince a nastaví na 7-segmentových displejích zprávu 1234ABCD s tečkou v prvním znaku. V opačném případě vypíše na sedmisegmentových displejích čas od spuštění Arduina.
// Ovládací panel s TM1638 // připojení knihovny #include <TM1638.h> // nastavení čísel pinů pro propojení s Arduinem #define DATA 2 #define CLOCK 3 #define STROBE 4 // vytvoření instance panel z knihovny TM1638 TM1638 panel(DATA, CLOCK, STROBE); void setup() { // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); } void loop() { // vytvoření proměnné pro uložení stavu tlačítka // v čisté formě (panelTlac) a do rozsahu 1-8 (tlacitko) byte panelTlac = panel.getButtons(); int tlacitko = 0; // vytvoření proměnné cas a uložení // aktuálního času od zapnutí Arduina // v sekundách long cas = millis()/1000; // rozsvícení LED diody s příslušným tlačítkem // fungující pro více tlačítek najednou panel.setLEDs(((panelTlac & 0xF0) << 8) | (panelTlac & 0xF)); // pro rozsvícení jednotlivých LED slouží tento příkaz a příklad: // setLED(0 pro vypnutí/1 pro zapnutí), číslo LED /// panel.setLED(1, 4); // zapnutí 4. LED diody // překlad čisté formy na rozsah 1-8 switch(panelTlac) { case 1: tlacitko = 1; break; case 2: tlacitko = 2; break; case 4: tlacitko = 3; break; case 8: tlacitko = 4; break; case 16: tlacitko = 5; break; case 32: tlacitko = 6; break; case 64: tlacitko = 7; break; case 128: tlacitko = 8; break; default: tlacitko = 0; } // v případě, že bylo stisknuto tlačítko, // vypiš jeho číslo po sériové lince // a na displej vypiš ukázku znaků if (tlacitko > 0) { Serial.print("Stisk tlacitka: "); Serial.println(tlacitko); // výpis ukázky znaků v hex formátu, // 1 znamená tečku v prvním znaku panel.setDisplayToHexNumber(0x1234ABCD, 1); } // pokud nebylo stisknuto žádné tlačítko, // vypiš na displej aktuální čas od spuštění else { // výpis čísla ve tvaru: číslo, tečka u druhého znaku, // 0 pro výpis bez nul/ 1 výpis s nulami panel.setDisplayToDecNumber(cas, 2, 0); } // pauza pro přehlednější výpis delay(500); }
Po nahrání programu do Arduino desky a stisknutí tlačítek dostaneme například tento výpis:
Stisk tlacitka: 1 Stisk tlacitka: 2 Stisk tlacitka: 3 Stisk tlacitka: 4 Stisk tlacitka: 7
Ovládací panel s obvodem TM1638 je v kombinaci s knihovnou TM1638 velice dobrá a jednoduchá možnost, jak zajistit pohodlnou komunikaci mezi uživatelem a zařízením díky 8 LED diodám, 8 sedmi-segmentových displejích a 8 spínacím tlačítkům. A díky propojení pomocí pouhých 3 datových vodičů zbyde i spousta dalších pinů pro připojení ostatních modulů či senzorů.
Seznam použitých komponent:
http://dratek.cz/arduino/894-arduino-ovladaci-panel-1420664357.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html