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
Pro ovládání ale využijeme knihovnu Ledcontrol a tu nejprve budeme muset do Arduina přidat.
V arduinu tedy vyberte možnost Projekt, poté přidat knihovnu a v menu vyberte položku spravovat 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.
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(leddis,radek,sloupec,true); pro rožnutí první diody by tedy stačilo led8.setLed(leddis,0,0,true); pro její zhasnutí pak led8.setLed(leddis,0,0,false);. Přeji mnoho štěstí se zapojením .
Mohlo by Vás zajímat
Dave_R6d4C
2018-11-17 17:50:01Jaký máte názor na můj nový blog? blog-davejenej.webnode.cz
Vložit komentář
* - vyžadované údaje. RSS kanál s komentáři