Ovládací panel TM1638 je určený hlavně pro začátečníky, kteří chtějí více programovat než zapojovat. Jedná se o Arduino modul, kterému dominuje integrovaný obvod TM1638, jehož jméno také panel nese. TM1638 má úžasnou vlastnost – dokáže ovládat hromadu periferie (8 tlačítek, 8 LEDek, a 7sedmentový displej s 8 znaky) a to vše jen za pomocí 3 datových vodičů! To znamená značnou úsporu pinů na desce, které můžete využít k zapojení něčeho jiného. Pojďme se tedy podívat, jak to všechno funguje!
Zapojení s panelem TM1638
Jak jsme si vysvětlili výše, potřebujeme pouze 3 datové vodiče, k tomu 2 vodiče pro zajištění napájení a je hotovo. Panel tedy zapojíme podle schématu.
Pro zapojení TM1638 s deskou Arduino UNO budeme potřebovat
Ovládání ledek s TM1638
Dříve, než se do čehokoliv pustíme, musíme importovat do Arduino IDE knihovnu. Tu si můžete stáhnou v sekci soubory ke stažení. Pokud si nevíte rady, jak knihovnu naimportovat, můžete mrknout na návod Jak naimportovat knihovnu.
Tak a teď se pustíme do LEDek. Na panelu vidíte u každé LEDky její číslo, pomocí toho program pozná, se kterou LEDkou chceme pracovat. Nyní uděláme program, který postupně rozsvítí všechny LEDky (od 1 do 8) a poté LEDky s číslem 1 a 5 zhasne. Jak vidíte v ukázkovém kódu, tak je ovládání LEDek velice podobné běžnému způsobu.
// importování knihovny #include <TM1638.h> // definování pinů #define STROBE 7 #define DATA 8 #define CLOCK 9 // inicializace shieldu TM1638 panel(DATA, CLOCK, STROBE); // inicializace proměnné int numLed; void setup() { // zde nic nebude } void loop() { // for smyčka, která generuje čísla 1 až 8 for (numLed = 0 ; numLed <= 8 ; numLed++) { // rozsvit LEDku s číslem "numLed" panel.setLED(1, numLed); delay(500); // jakmile budou svítit všechny LEDky if (numLed == 8) { // zhasni LEDku 1 a 5 panel.setLED(0, 1); panel.setLED(0, 5); } } delay(5000); }
Detekce stisku tlačítek
LEDky jsou za námi, tak se vrhneme na tlačítka. Tady už se program oproti běžnému postupu značně mění. Aby modul poznal, které tlačítko mačkáte, tak každému přiřadil číslo, konkrétně se jedná o čísla (1, 2, 4, 8, 16, 32, 64 a 128), takže když tlačítko zmáčknete, dostanete jedno z těch čísel, proto se v programu objeví taky konstrukce switch, která těmto číslům přiřadí čísla 1 až 8. Pokud není žádné tlačítko zmáčknuté, tak dostanete 0, kvůli tomu přidáme podmínku, že se výpis do seriál monitoru uskuteční pouze tehdy, pokud je číslo větší, jak 0.
Po nahrání programu otevřete seriál monitor, po stisku tlačítka se objeví jeho číslo.
// importování knihovny #include <TM1638.h> // definování pinů #define STROBE 7 #define DATA 8 #define CLOCK 9 // inicializace shieldu TM1638 panel(DATA, CLOCK, STROBE); // inicializace proměnné int button; void setup() { // start sériové komunikace Serial.begin(9600); } void loop() { // uložení informace o stisku tlačítka byte buttons = panel.getButtons(); // zpracování informace switch(buttons) { case 1: button = 1; break; case 2: button = 2; break; case 4: button = 3; break; case 8: button = 4; break; case 16: button = 5; break; case 32: button = 6; break; case 64: button = 7; break; case 128: button = 8; break; default: button = 0; } if (button > 0) { // zobrazení čísla stisknutého tlačítka Serial.print("Stisknute tlacitko: "); Serial.println(button); } delay(500); }
Zobrazovaní na displeji
Oproti zobrazování na holém segmentovém displeji, je zobrazování na panelu TM1638 absolutní hračka, stačí nám k tomu jeden příkaz s několika atributy, které jsou vysvětleny v kódu. V tomto programu najdeme cyklus for, který generuje čísla a ta se budou zobrazovat na displeji.
// importování knihovny #include <TM1638.h> // definování pinů #define STROBE 7 #define DATA 8 #define CLOCK 9 // inicializace shieldu TM1638 panel(DATA, CLOCK, STROBE); void setup() { // zde nic nebude } void loop() { // for cyklus, pro generování čísel for (int i = 1 ; i <= 100000 ; i=i+9) { // zobrazení proměnné i na displej // první parametr - proměnná s informací pro zobrazení // druhý parametr - 1 - zobrazí desetinou tečku // 2 - nezobrazí desetinou tečku // třetí parametr - 0 - výpis bez nul // 1 - výpis s nulama panel.setDisplayToDecNumber(i, 2, 0); delay(50); } }
Shrnutí
Tento poněkud jednoduší návod obsáhl všechny funkce ovládacího panelu TM1638. Sami vidíte, že je ovládání velice jednoduché, proto ho doporučuji začátečníkům, avšak i zkušený bastlíř dokáže ocenit jednoduchost použití a zakomponovat panel do svého projektu.