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