Hodinový displej s integrovaným obvodem TM1637 umožňuje zobrazení 4 znaků pomocí čtyř sedmi-segmentových displejů spojených do jednoho modulu. Proto může najít uplatnění v přístrojích, kde potřebujeme zobrazit čas, číselnou hodnotu nebo jednoduchý text. Velkou výhodou je využití obvodu TM1637, který vytváří rozhraní mezi displejem a Arduinem a díky němu stačí pro komunikaci pouze 2 vodiče. Pokud by jsme si chtěli připojit takto velký 7-segmentový displej přímo k Arduinu, museli by jsme propojit 12 vodičů a sami řídit časování. Oproti tomu obvod TM1637 všechny tyto detaily zařídí sám a my pouze nastavujeme, co kde zobrazit.
Pro propojení hodinového displeje s Arduinem stačí tedy využít 4 propojovací vodiče. Připojíme GND na zem, VCC na +5 V, DIO na pin 3 a CLK na pin 2. Datové piny DIO a CLK samozřejmě můžete připojit na jiné volné digitální piny na své Arduino desce.
Pro jednoduchou práci s hodinovým displejem, respektive s obvodem TM1637 jsem využil knihovnu TM1637Display, návod na práci s knihovnami je zde. Ukázkový kód na začátku obsahuje připojení knihoven a nastavení čísel pinů, kterými propojíme displej s Arduinem. Dále je uveden návod na vytvoření vlastního slova včetně ukázky na slově AHOJ. Poté následuje vytvoření instance displej z knihovny TM1637Displej. V podprogramu setup je na začátku nastavení svítivosti displeje, přičemž síla podsvícení se dá nastavovat v rozsahu 8-15(15 svítí na maximum). Jako další jsou uvedeny ukázky různých způsobů tisku informací na sedmisegmentový displej. První se vypíše připravený text AHOJ, poté čísla bez doplněných nul a s nulami a jako poslední je ukázka přepsání jednotlivých čísel za zachováním předchozí hodnoty. V nekonečné smyčce loop je uvedená ukázka výpisu reálného času, kdy na začátku smyčky se načtou informace o času od spuštění Arduina a tento čas je přepočten pro jednotlivé číslice. Poté následuje výpis času, pauza a aktivace dvojtečky uprostřed displeje.
// Hodinový displej s TM1637
// připojení knihoven
#include <Arduino.h>
#include <TM1637Display.h>
// nastavení čísel pinů pro propojení s Arduinem
#define CLK 2
#define DIO 3
// pro vlastní nastavení segmentů je zde
// uvedena ukázka slova AHOJ v proměnné AHOJ
// - A
// | | F B
// - G
// | | E C
// - D
// v proměnné vypíšeme všechny segmenty,
// které chceme rozsvítit
const uint8_t AHOJ[] = {
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // A
SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // H
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_B | SEG_C | SEG_D | SEG_E // J
};
// vytvoření instance displej z knihovny TM1637
TM1637Display displej(CLK, DIO);
void setup() {
// nastavení svítivosti v rozsahu 8-15
displej.setBrightness(10);
// výpis vlastního slova AHOJ
displej.setSegments(AHOJ);
delay(1000);
// výpis čísla bez doplněných nul
displej.showNumberDec(12, false);
delay(1000);
// výpis čísla s doplněnými nulami
displej.showNumberDec(34, true);
delay(1000);
// výpis jednoho čísla na druhé pozici
// showNumberDec(číslo, počet zobrazených číslic, pozice)
displej.showNumberDec(5, 1, 2);
delay(1000);
}
void loop()
{
// vytvoření proměnné vypis pro uložení
// informací o jednotlivých znacích
uint8_t vypis[] = { 0, 0, 0, 0 };
// vytvoření proměnné cas a uložení
// aktuálního času od zapnutí Arduina
// v sekundách
long cas = millis()/1000;
// výpočet číslic pro jednotlivé pozice
// na displeji pro zobrazení času
// např. první pozice udává desítky minut
// pro 1000 vteřin: 1000s/60=16min/10=1
// druhá pozice udává jednotky minut
// pro 1000 vteřin: 1000s/60=16min%10=6
// znaménko / je dělení, které vrací celou číslici
// znaménko % je zbytek po dělení
vypis[0] = displej.encodeDigit((cas/60)/10);
vypis[1] = displej.encodeDigit((cas/60)%10);
vypis[2] = displej.encodeDigit((cas%60)/10);
vypis[3] = displej.encodeDigit((cas%60)%10);
// výpis informací na displej
displej.setSegments(vypis);
delay(500);
// pro zobrazení dvojtečky mezi číslicemi
// je nutné k pozici 1 přičíst hodnotu 128
vypis[1] = vypis[1]+128;
displej.setSegments(vypis);
delay(500);
}
Po nahrání programu do Arduino desky dostaneme například tento výsledek:
Arduino modul s hodinovým displejem a obvodem TM1637 je velice jednoduše použitelný pro různé aplikace, kde potřebujeme vypisovat čísla pro uživatele bez připojeného počítače. Nabízí se například možnost naprogramovat si vlastní hodiny s využitím hodinového displeje a obvodu reálného času DS1307.
Seznam použitých komponent:
http://dratek.cz/arduino/893-arduino-hodinovy-displej-tm1637-1420663915.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