LED displej je výstupní modul pro Arduino. Tento displej je složený z 8 sedmisegmentových znaků, které jsou řízené pomocí obvodu MAX7219. Díky tomu můžeme všech 8 znaků řídit pouze pomocí tří datových vodičů. Ale tím počet znaků nekončí, protože můžeme na druhý konektor s OUT porty zapojit modul s dalšími segmenty bez většího počtu zabraných datových pinů.
Pro napájení displeje lze použít jak napětí 3,3 V, tak i 5 Voltů. Proudový odběr se pak mění podle počtu rozsvícených znaků a nastaveného jasu, kdy při středním jasu odebírá celý displej přibližně 70 mA.

LED displej MAX7219

Pro úspěšné propojení modulu displeje s MAX7219 a Arduino desky je nutné zapojit celkem 5 vodičů. Propojíme VCC s 5V Arduina, GND se zemí Arduina, DIN s pinem D12, CS s pinem D10 a CLK s pinem D13. Datové piny DIN a CLK odpovídají sběrnici SPI, ale pro pin CS můžeme zvolit i jiný volný pin. Jen je tuto volbu nutné provést také na začátku programu.

LED displej MAX7219 schéma

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu LedControl, návod, jak na to, je uveden zde.
Ukázkový kód obsahuje na svém začátku připojení potřebné knihovny a nastavení čísel propojovacích pinů. Dále vytvoříme objekt displeje, kdy jako parametry předáme propojovací piny a číslo na konci znamená počet obvodů MAX7219 zapojených za sebou. A jako poslední si vytvoříme proměnnou s nastavením délky pauzy mezi výpisy.
V podprogramu setup jako první vypneme úsporný režim displeje číslo 0 (číslování od nuly) a poté na našem displeji nastavíme intenzitu jasu 8, přičemž celý rozsah je 0 až 15. Následně vypneme svit všech znaků a zavoláme funkci pro výpis textu „Arduino“.
Funkce pro výpis textu obsahuje postupně výpis textu na znaky 6 až 0 (vynecháme znak č. 7 úplně vlevo). Vidíme tedy ukázku výpisu znaků (char) a výpisu řady segmentů různými způsoby, mezi nimiž je vždy vložena krátká pauza. Na konci vyčkáme desetinásobný čas a poté vypneme všechny znaky.
Po zavolání zmíněné funkce na konci podprogramu setup se dostaneme do nekonečné smyčky loop. Zde na začátku načteme do vytvořené proměnné aktuální čas od spuštění Arduina. Poté následuje ukázka vytištění jednotlivých číslic postupně na všechny segmenty, kdy si můžete všimnout způsobu, jakým jsou jednotlivé číslice získány. A na konci smyčky loop už je pouze krátká pauza před novým během.
Pro jednodušší pochopení výpisu času bych rád uvedl, že znak „/“ nám vrátí výsledek celočíselného dělení a znak „%“ vrátí zbytek po celočíselném dělení. Na příkladu vstupního čísla 23 tedy do nultého znaku uložíme číslo „3“ (23 % 10 = 3) a do prvního znaku číslo „2“ (23 / 10  = 2, 2 % 10 = 2).

// MAX7219 8 7-segmentových znaků

// připojení potřebné knihovny
#include "LedControl.h"
// nastavení propojovacích pinů
#define DIN 12
#define CS  10
#define CLK 13
// vytvoření objektu displeje,
// propojovací piny a počet MAX obvodů (1)
LedControl max7219 = LedControl(DIN, CLK, CS, 1);
// proměnná pro pauzy mezi znaky
int pauza = 250;

void setup() {
  // vypnutí úsporného režimu
  max7219.shutdown(0, false);
  // nastavení intenzity na přibližnou polovinu (0-15)
  max7219.setIntensity(0, 8);
  // vypnutí svitu všech znaků
  max7219.clearDisplay(0);
  // výpis textu "Arduino" na segmenty
  napisArduino();
}

void napisArduino() {
  // ukázka nastavení znaků různými způsoby
  // s pauzou mezi zobrazeními
  max7219.setChar(0, 6, 'a', false);
  delay(pauza);
  max7219.setRow(0, 5, 0x05);
  delay(pauza);
  max7219.setChar(0, 4, 'd', false);
  delay(pauza);
  max7219.setRow(0, 3, 0x1c);
  delay(pauza);
  max7219.setRow(0, 2, B00010000);
  delay(pauza);
  max7219.setRow(0, 1, 0x15);
  delay(pauza);
  max7219.setRow(0, 0, 0x1D);
  delay(10*pauza);
  // vyčištění displeje
  max7219.clearDisplay(0);
  delay(pauza);
}

void loop() {
  // načtení času od spuštění do proměnné
  unsigned long cas = millis();
  // výpis času na všech 8 segmentů 
  // postupným získáním jednotlivých číslic
  max7219.setDigit(0, 7, (cas / 10000000) % 10, false);
  max7219.setDigit(0, 6, (cas / 1000000) % 10, false);
  max7219.setDigit(0, 5, (cas / 100000) % 10, false);
  max7219.setDigit(0, 4, (cas / 10000) % 10, false);
  max7219.setDigit(0, 3, (cas / 1000) % 10, false);
  max7219.setDigit(0, 2, (cas / 100) % 10, false);
  max7219.setDigit(0, 1, (cas / 10) % 10, false);
  max7219.setDigit(0, 0, cas % 10, false);
  // pauza před novým během smyčky
  delay(pauza);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným LED displejem MAX7219 získáme například tento výsledek.

LED displej MAX7219 ukázka

LED displej MAX7219 je zajímavým modulem pro Arduino. Díky tomuto displeji totiž můžeme vytvořit jednoduchým způsobem pěkný informační výstup pro naše projekty, přičemž přijdeme pouze o tři datové vodiče. Můžeme ho tedy použít například pro vytvoření Arduino stopek, kuchyňské minutky či pro zobrazení času u budíku. A pokud by nám osm znaků nestačilo, můžeme do série zapojit další moduly, ale bez nutnosti ubírat volné datové vodiče z Arduina.

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/3182-led-displej-7-segmentovy-8-znaku-max7219-cerveny.html

FB tw

Další podobné články