blog.ijacek007.cz

Blog o všem trochu jinak.

Dnes se vrátím k zapojení led displeje 8×8 s řadičem MAX7219, o kterém jsem zde již psal. Dnes si ale ukážeme, jak jednoduše ovládat jednotlivé body pole 8×8.

Displej zapojíme stejně jako v prvním případě pomocí 5 kabelů.

VCC na 5 V

GND na GND

DIN na port 8

CLK na port 9

CS na port 10


obrázek arduino a led displej 8x8

Pro ovládání ale využijeme knihovnu Ledcontrol a tu nejprve budeme muset do Arduina přidat.


obrázek arduino knihovny

V arduinu tedy vyberte možnost Projekt, poté přidat knihovnu a v menu vyberte položku spravovat knihovny.


obrázek arduino manažer knihovny.

Do vyhledávacího pole vepište ledcontrol a poté v seznamu klikněte na knihovu a zvolte instalace. Jakmile instalaci dokončíte, můžeme přejít k programu. Připravil jsem pro Vás tři příklady, které se liší jen smyčkou, která se provádí v části Loop. Pro ladění a přehledný výstup také zobrazuji na sériové lince informace o kroku a aktuální adrese ve smyčce.


obrázek terminal com port

Pro všechny příklady jsem použil smyčku s proměnou poc, do které přičítám nebo odčítám krok, ve kterém se program nachází. Protože ale displej nemá například adresu 10, je nutné krok vydělit 8, abych získal řádek, poté počet řádku odečíst, abych získal pozici ve sloupci. U zmíněného čísla 10 je ve skutečnosti dioda na třetí pozici druhého řádku. Číslování je ale ve skutečnosti posunuto, protože první dioda není na 1 řádku v prvním sloupci ale na 0 řádku a 0 sloupci. Abych tam získal správné souřadnice, musím tedy vypočítat řádek = 10 / 8 (1) sloupec = 10 – ( počet řádku (1) * 8 ) výsledek je tedy řádek 1 pozice 2 tedy paradoxně o jednu dál než by jste čekali, když je první dioda je označena jako 0.

První příklad postupně rozsvítí všech 64 diod na displeji a poté začne od konce diody zase zhasínat. Aby se tak mohlo dít musíme mít v programu ještě proměnou rozinej. Ta udává jestli budeme diody postupně rozsvěcet nebo naopak zhasínat. Jakmile naše smyčka dosáhne čísla 64 program, znění proměnou rozinej na 0 a tím začne zhasínání. Jak se číslo poc dostane na hodnotu –1 program zase změní rozinej na 1 aby docházelo k přičítání a tak stále dokola.

Zdrojový kód prvního příkladu 1:

// LED matice s MAX7219

// připojení potřebné knihovny
#include "LedControl.h"
// nastavení propojovacích pinů
#define DIN 8
#define CS  9
#define CLK 10
// tato proměnná údává počet matic,
// počítání začíná od nuly
#define leddis 0
// inicializace LED matice z knihovny
LedControl led8=LedControl(DIN, CLK, CS, leddis);
// proměnná typu pole, 1 označují rozsvícené LED
int poc = -1;
int rozinej = 1;


void setup() {
   Serial.begin(9600);  // zapnutí seriové komunikace

  // probuzení matice pro zahájení komunikace
  led8.shutdown(leddis,false);
  // nastavení LED matice na střední svítivost (0-15)
  led8.setIntensity(leddis,7);
  // vypnutí všech LED diod na matici
  led8.clearDisplay(leddis);
}

void loop() {
if (poc < 65 and poc > -2 ){
  Serial.print("Krok: ");
  int radek;
  int sloupec;

   radek = (poc/8);
  sloupec =  poc - (radek * 8);
  Serial.print(radek);
  Serial.print(" | ");
  Serial.print(sloupec);
  Serial.print(" | ");
  Serial.println(poc);

  if (rozinej ==1){
  led8.setLed(leddis,radek,sloupec,true);
  poc ++;
  }else{
  led8.setLed(leddis,radek,sloupec,false);
  poc = poc -1;
  }

if(poc==64){
  rozinej=0;
}
if (poc==-1){
  rozinej = 1;
  }

delay(100);
}
}

Druhý příklad pracuje trochu jinak. Jakmile počítadlo poc napočítá do 64 otočí stav. Pokud program rozsvěcel diody, teď je začne zhasínat. Pokud naopak zhasínal, začne diody opět rozsvěcet. Pokažde přitom provede vynulování počítadla poc. Tím se diody postupně všechny rozsvítí a pak zase postupně zhasnou a pak se začnou zase rozsvěcet.

Zdrojový kód příkladu 2:

// LED matice s MAX7219

// připojení potřebné knihovny
#include "LedControl.h"
// nastavení propojovacích pinů
#define DIN 8
#define CS  9
#define CLK 10
// tato proměnná údává počet matic,
// počítání začíná od nuly
#define leddis 0
// inicializace LED matice z knihovny
LedControl led8=LedControl(DIN, CLK, CS, leddis);
// proměnná typu pole, 1 označují rozsvícené LED
int poc = 0;
int rozinej = 1;


void setup() {
   Serial.begin(9600);  // zapnutí seriové komunikace

  // probuzení matice pro zahájení komunikace
  led8.shutdown(leddis,false);
  // nastavení LED matice na střední svítivost (0-15)
  led8.setIntensity(leddis,7);
  // vypnutí všech LED diod na matici
  led8.clearDisplay(leddis);
}

void loop() {
if (poc < 65 ){
  Serial.print("Krok: ");
  int radek;
  int sloupec;

   radek = (poc/8);
  sloupec =  poc - (radek * 8);
  Serial.print(radek);
  Serial.print(" | ");
  Serial.print(sloupec);
  Serial.print(" | ");
  Serial.println(poc);

  if (rozinej ==1){
  led8.setLed(leddis,radek,sloupec,true);
  }else{
  led8.setLed(leddis,radek,sloupec,false);
  }

poc ++;


if(poc==64){

  if (rozinej ==1){
  rozinej=0;

  }else{
  rozinej=1;
  }
  poc = 0;
}


delay(100);
}
}

Poslední ukázka je „běžící světlo“ postupně po řádcích běží světelný bod, za kterým se zase body zhasínají. Zde přibyly proměnné radek2 a sloupec 2, které se starají o výpočet souřadnic diody, která se má na konci řetězce zase zhasnout. To zda bude po displeji lítat jen jeden bod nebo například 3 je možné změnit v proměnné sirka. Pokud ovšem zvětšíte číslo, musíte také zvětšit číslo v podmínce, aby se „had“ mohl celý ztratit za displejem, jinak dojde k vynulování při dojetí na konec displeje.

Zdrojový kód příkladu 3:

// LED matice s MAX7219

// připojení potřebné knihovny
#include "LedControl.h"
// nastavení propojovacích pinů
#define DIN 8
#define CS  9
#define CLK 10
// tato proměnná údává počet matic,
// počítání začíná od nuly
#define leddis 0
// inicializace LED matice z knihovny
LedControl led8=LedControl(DIN, CLK, CS, leddis);
// proměnná typu pole, 1 označují rozsvícené LED
int poc = 0;
int rozinej = 1;


void setup() {
   Serial.begin(9600);  // zapnutí seriové komunikace

  // probuzení matice pro zahájení komunikace
  led8.shutdown(leddis,false);
  // nastavení LED matice na střední svítivost (0-15)
  led8.setIntensity(leddis,7);
  // vypnutí všech LED diod na matici
  led8.clearDisplay(leddis);
}

void loop() {
if (poc < 66 ){
  Serial.print("Krok: ");
  int radek;
  int sloupec;
  int radek2;
  int sloupec2;
  int sirka = 1;

  radek = (poc/8);
  radek2= ((poc - sirka)/8);
  sloupec =  poc - (radek * 8);
  sloupec2 =  (poc-sirka) - (radek2 * 8);

  Serial.print(radek);
  Serial.print(" | ");
  Serial.print(sloupec);
  Serial.print(" | ");
  Serial.println(poc);

  led8.setLed(leddis,radek,sloupec,true);
  led8.setLed(leddis,radek2,sloupec2,false);

poc ++;


if(poc==65){

   poc = 0;
 }


delay(100);
}
}

Jak je vidět, kreativitě se meze nekladou a je možné pracovat s rozsvěcením bodu, jak Vás napadne. Může se například honit více bodů nebo cokoliv Vás napadne. O stav diod se přitom stará jediný řádek a to je led8.setLed(led­dis,radek,slou­pec,true); pro rožnutí první diody by tedy stačilo led8.setLed(led­dis,0,0,true); pro její zhasnutí pak led8.setLed(led­dis,0,0,false);. Přeji mnoho štěstí se zapojením .

Mohlo by Vás zajímat

Arduino MAX7219 8×8 Matrix LED Displej

Další články o Arduinu na tomto blogu


Štítky článku elektronika | programovani | skutecnost |
Autor Ijacek.007 14.11.2018 Opravil(a) sokorka zobrazeno 127x
Předchozí článek Měření tlaku pomocí BMP180
Poznatky o práci solárních panelu, UPS modulu a ESP8266 Další článek


1iconblog-davejenej.webnode.cz

Dave_R6d4C

2018-11-17 17:50:01

Jaký máte názor na můj nový blog? blog-davejenej.web­node.cz


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 118. Poslech všech dohromady zabral přes 1747 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 40% tedy 47 audioknih.

Aktuálně poslouchaná audioknihakniha je Inovátoři

Poslední hodnocenou audioknihou je Jak prokouknout druhé lidi .

Nejlépe hodnocenou audioknihou je Zaklínač I. Poslední přání - komplet .

Reklama