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čů.

Ovládací panel TM1638

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é.

Schéma zapojení ovládacího panelu s TM1638

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

FB tw

Další podobné články