Arduino a maticový LED displej

Pod stromečkem mě čekalo Arduino Duemilanove a proto bych se nyní rád podělil se svým prvním pokusem. Ale co je to vlastně Arduino? Když se proklikáte přes následující odkazy, tak si určitě uděláte konkrétnější představu:

Pro začátek jsem si k Arduinu pořídil maticový LED displej, 8x8 diod, navíc dvojbarevný. Jsou v něm tedy ukryty zelené a červené diody. Přestože prozatím využívám jen červené, v kontaktním poli mám vyvedené i anody zelených diod. Takže se vám bude právem zdát, že některé vodiče jsou tam nyní přebytečné. Displej má samozřejmě mnoho možností využití - jednoduché obrazce, písmena a číslice nejsou problém. Rovněž může reagovat na otáčení potenciometrem, který připojíme na vstup Arduina, stisknutí tlačítka a tak dále.

Zapojení

Není třeba v tom hledat nic složitého, stačí jen dostatek pečlivosti. Vytvořil jsem snad poměrně přehledné schéma, které by vám mělo pomoci. Samozřejmě se musí shodovat typ displeje - označení u GM Electronic je HD-M10EG88MD. Jak jsem již uvedl výše, je dvojbarevný, takže v tabulce zapojení najdete dvě možnosti přiřazení jednotlivých pinů. Záleží na vás, jestli chcete použít zelené nebo červené diody. Můžete také zapnout obě diody v jednom políčku naráz, které pak bude svítit oranžově. A nakonec zapojení potenciometru a tlačítka, které je rovněž jednoduché.

Jak to funguje?

Aby displej reagoval na otočení potenciometrem nebo stisknutí tlačítka zajistí i jednoduchý program na pár řádků. Ten nebudu popisovat podrobněji, ale určitě neváhejte prostudovat sekci Learning na www.arduino.cc. S obrazci a písmeny už je to ale složitější, proto se vám tedy pokusím objasnit základní princip, ke kterému přikládám i soubor s kódem. Obrazec, který se má na displeji objevit, je uložen v proměnné typu pole se 64 prvky. Každý prvek reprezentuje jednu diodu displeje (máme 8 sloupců a 8 řádků, 8*8=64), která může být buď rozsvícena - tomu odpovídá "1", nebo zhasnuta - "0". Program spuštěný v Arduinu pak nedělá nic jiného, než že projede všechny prvky pole a rozsvítí příslušné diody.

/* 
Zobrazení libovolného obrazce na maticovém displeji 8x8 diod

Připojení pinů displeje k Arduinu:
sloupce (anody): 2, 3, 4, 5, 6, 7, 8, 9
řádky (katody): 10, 11, 12, 13, 14, 15, 16, 17
*/

int pixel;
int radek;
int svit = 250; // doba svitu diody v mikrosekundách
int sloupec;

/* proměnná typu pole odpovídá rozmístění diod na 
displeji, 1 = dioda svítí, 0 = dioda zhasnutá */
int obrazec[64] = 
{
0,1,1,0,0,1,1,0,
1,0,0,1,1,0,0,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,
0,1,0,0,0,0,1,0,
0,0,1,0,0,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0
};

void setup()
{
// inicializace pinů jako výstupů
for (int i = 2; i < 18; i++)
  {pinMode(i, OUTPUT);}
}

void loop()
{
pixel = 0;

// scan displeje
// odpočítávání řádků - smyčka proběhne 8 krát
for (radek = 10; radek < 18; radek++) 
{
  // připojení spol. katody na zem
  digitalWrite(radek , LOW);
  
  // odpočítávání sloupců - smyčka proběhne 8krát
  for (sloupec = 2; sloupec < 10; sloupec++) 
      {
      // pokud v poli odpovída diode "1", je rozsvícena 
      if (obrazec[pixel] == 1) 
        {
        digitalWrite(sloupec, HIGH); 
        delayMicroseconds(svit); 
        digitalWrite(sloupec, LOW);
        } 
      pixel = pixel + 1;
      }
      
  // připojení katody na +, zhasnutí řádku    
  digitalWrite(radek , HIGH); 
}
}

Ačkoliv se to na první pohled zdá, obrazec na displeji není vytvořen tak, že by diody svítily všechny ve stejné chvíli. Díky vnitřnímu zapojení displeje by to ani nebylo možné. Jednotlivé diody jsou rozsvěcovány postupně, začíná se v levém horním rohu a končí v pravém dolním. Díky tomu, že tento proces probíhá velmi rychle a opakovaně, naše oči a mozek poskládají hotový obrázek - například srdce jako na fotografii. K pochopení by mělo pomoct video, kde se rozsvěcování jednotlivých diod postupně zrychluje, až nakonec vytvoří celistvý obrazec.

- Stránka vytvořena 23. ledna 2010 -
- Aktualizováno 3. dubna 2010 -