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
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html