MAX7219 Dot Matrix Kullanımı
Arduino ile MAX7219 entegreli 8x8 dot matrix ekranda şekil ve ifade göstermeyi öğreneceğiz.
LED dot matrixler, çok sayıda LED’in matris düzeninde yan yana ve alt alta dizilmesiyle oluşan ekranlardır. Bu ekranlarla yazı, sembol veya basit görseller gösterilebilir.
LED dot matrix ekranlar; mağaza tabelalarında, bilgilendirme panolarında, metro duraklarında ve elektronik projelerde sıkça kullanılan gösterge elemanlarıdır.
8x8 bir dot matrix ekran 64 LED’den oluşur. Her LED ayrı ayrı kontrol edilerek yazı, şekil veya basit ikonlar oluşturulabilir.
8x8 dot matrix ekranlar çok sayıda LED içerdiği için doğrudan Arduino pinleriyle kontrol etmek pratik değildir. Bu nedenle MAX7219 gibi sürücü entegreleri kullanılır.
MAX7219 entegresi, Arduino ile dot matrix ekran arasında bağlantıyı kolaylaştırır. Böylece az sayıda pin kullanarak dot matrix ekran kontrol edilebilir. Bu uygulamada LedControl kütüphanesi kullanılacaktır.
MAX7219 dışında farklı sürücü entegreleri kullanılırsa bağlantı ve kod yapısı değişebilir. Bu sayfadaki kod MAX7219 veya MAX7221 entegreli modüller içindir.
Kodda her şekil 8 satırlık byte dizisi olarak tanımlanır. Her byte, dot matrix ekranın bir satırındaki LED durumlarını temsil eder.
setRow() komutu ile her satır dot matrix ekrana yazdırılır. Böylece kalp, üzgün ifade, normal ifade ve gülen ifade gibi şekiller gösterilebilir.
Verilen kaynak koddaki #include <ledcontrol .h=""> satırı HTML içinde bozulmuştu. Doğru kullanım #include <LedControl.h> şeklindedir. Ayrıca kalp şeklinin 8 satır olacak şekilde tamamlanması gerekir.
#include <LedControl.h>
// Pin numaralarını tanımlıyoruz
#define CLK 5
#define CS 6
#define DIN 7
#define MaxSayisi 1
const long delay_suresi = 750;
LedControl led = LedControl(DIN, CLK, CS, MaxSayisi);
byte images[][8] = {
{
B00000000, // kalp
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
},
{
B00111100, // üzgün ifade
B01000010,
B10100101,
B10000001,
B10011001,
B10100101,
B01000010,
B00111100
},
{
B00111100, // normal ifade
B01000010,
B10100101,
B10000001,
B10111101,
B10000001,
B01000010,
B00111100
},
{
B00111100, // gülen ifade
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
}
};
void MatrixeYazdir(byte* ch) {
for (int i = 0; i < 8; i++) {
led.setRow(0, i, ch[i]);
}
}
void setup() {
led.shutdown(0, false);
led.setIntensity(0, 10);
led.clearDisplay(0);
}
void loop() {
for (int j = 0; j < 4; j++) {
MatrixeYazdir(images[j]);
delay(delay_suresi);
}
for (int i = 0; i <= 15; i++) {
led.setIntensity(0, i);
delay(100);
}
}
#include <LedControl.h>
const int DIN = 7;
const int CLK = 5;
const int CS = 6;
const int matrixSayisi = 1;
const unsigned long beklemeSuresi = 750;
LedControl matrix = LedControl(DIN, CLK, CS, matrixSayisi);
byte sekiller[][8] = {
{
B00000000,
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
},
{
B00111100,
B01000010,
B10100101,
B10000001,
B10011001,
B10100101,
B01000010,
B00111100
},
{
B00111100,
B01000010,
B10100101,
B10000001,
B10111101,
B10000001,
B01000010,
B00111100
},
{
B00111100,
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
}
};
const int sekilSayisi = sizeof(sekiller) / sizeof(sekiller[0]);
void setup() {
matrix.shutdown(0, false);
matrix.setIntensity(0, 8);
matrix.clearDisplay(0);
}
void loop() {
for (int i = 0; i < sekilSayisi; i++) {
sekilYazdir(sekiller[i]);
delay(beklemeSuresi);
}
parlaklikEfekti();
}
void sekilYazdir(byte sekil[8]) {
for (int satir = 0; satir < 8; satir++) {
matrix.setRow(0, satir, sekil[satir]);
}
}
void parlaklikEfekti() {
for (int parlaklik = 0; parlaklik <= 15; parlaklik++) {
matrix.setIntensity(0, parlaklik);
delay(100);
}
}
Bu sürümde şekil yazdırma ve parlaklık efekti ayrı fonksiyonlara ayrıldı. Şekil sayısı otomatik hesaplandığı için yeni şekiller eklemek daha kolaydır.