مقدمه
در این آموزش نحوه استفاده از ماژول ماتریس 8*8 با آی سی MAX7219 را خواهید آموخت. در انتها قادر خواهید بود به راحتی اشکال و متن مورد نظر خود را روی یک یا چند دات ماتریس بصورت ثابت یا Scroll تنها با اشغال 4 پین دیجیتال از آردوینو، نمایش دهید.
آنچه در این آموزش یاد می گیرید
- ال ای دی ماتریسی چیست؟
- نحوه استفاده از LED ماتریسی با آردوینو
- نمایش شکل های خاص روی LED ماتریسی
- اتصال دو LED ماتریسی به یکدیگر بصورت آبشاری (Cascade)
نمایشگر LED ماتریسی چیست؟
Dot matrix آرایه ای از LED هاست که می توان روی آن اعداد، حروف و اشکال خاصی نمایش داد، Dot matrix ها با تعداد سطر و ستون مشخص می شوند، نوع محبوب و رایج Dot Matrixها نوع 8×8 آن می باشد که 64 LED در 8 سطر و 8 ستون فراهم می کند.
برای کنترل کردن ساده Dot Matrix 8×8 باید هر سطر و هر ستون را به یک پایه دیجیتال متصل کرد و این به آن معناست که شما به 16 پایه دیجیتال نیاز دارید! پس این روش، روش چندان مناسبی نیست.
برای کنترل Dot Matrixها ماژول هایی مبتنی بر آیسی های MAX72xx ساخته شده که با اشغال کردن تنها 4 پین دیجیتال بجای 16 پایه، Dot Matrix را کنترل می کند و همچنین می توانید چندین Dot Matrix (تا 8 عدد) را بدون نیاز به پایه ای دیگر، بهم متصل کرده و روی آنها اطلاعات موردنظر را بصورت آبشاری(Cascade) نمایش دهید.
نحوه اتصال ماژول نمایشگر LED ماتریسی به آردوینو
قطعات مورد نیاز
نرم افزارهای مورد نیاز
سیم بندی
برای اتصال Dot matrix به آردوینو کافیست پایه های Vcc و Gnd را به 5ولت و GND آردوینو متصل کنید و پایه های DIN، CS و CLK را می توانید به هر پایه دیجیتالی که می خواهید متصل کنید.
کد
برای استفاده از DotMatrix و آردوینو کتابخانه های زیادی وجود دارد که دو کتابخانه ledcontrol و MaxMatrix از رایج ترین این کتابخانه ها هستند که ساختاری مشابه هم دارند.
فایل های مورد نیاز:
حال به کد زیر توجه کنید:
MaxMatrix Library
1 file(s) 4.80 KB
LedControl Library
1 file(s) 9.90 KB
/*
8x8 Dot Matrix w/ MAX7219
modified on 7 March 2019
by Saeed Hosseini @ Electropeak
Home
*/
#include <MaxMatrix.h>
int DIN = 7;
int CLK = 6;
int CS = 5;
int maxInUse = 1;
byte buffer[20];
char text[] = "a";
MaxMatrix m(DIN, CS, CLK, maxInUse);
void setup() {
m.init();
m.setIntensity(8);
}
void loop() {
m.setDot(0, 7, true);
m.setDot(0, 7, true);
delay(1000);
m.setDot(7, 0, true);
delay(1000);
m.setColumn(3, B11110000);
delay(1000);
m.setColumn(4, B00001111);
delay(1000);
m.clear();
delay(1000);
}
برخی از مهم ترین توابع این کتابخانه طبق جدول زیر است:
Function | Description |
---|---|
init() | Starting Dot matrix |
SetIntensity(num) | Determining LEDs light intensity (0 to 15) |
setDot(x,y,true) | Turning on the LED in (x,y) cordinate |
clear() | Clear the screen |
setColumn(x,LEDs) | Turning on a group of LEDs in X colum |
writeSprite(x,y,*byte) | Displaying a specific character with the start points x and y |
shiftLeft,Right(rotate,fill_zero) | Shifting a picture up or down.when rotate is true, if the image is traversed from the left or the right of the Dot Matrix, the exit part is inserted from the opposite side and otherwise not entered. If the fill_zero is true, the LEDs passing through the shapes will shut off, otherwise, they will turn on. |
shiftUp,Down(rotate) | Shifting a picture up or down |
نمایش اشکال خاص برروی Dot Matrix
برای نشان دادن اشکال خاص و مدنظر خود روی DotMatrix کافیست الگوی روشن شدن LEDها را به یک رشته بیت تبدیل کنید. برای اینکار می توانید از ابزارهای آنلاینی نظیر این سایت کمک بگیرید، شکل خود را طراحی کنید و کد تولید شده را داخل برنامه آردوینو قرار دهید و آنرا روی بورد خود آپلود کنید.
/*
8x8 Dot Matrix w/ MAX7219
modified on 7 March 2019
by Saeed Hosseini @ Electropeak
Home
*/
#include <MaxMatrix.h>
int DIN = 7;
int CLK = 6;
int CS = 5;
int maxInUse = 1;
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte poker[] = {8, 8,
0xff,
0x81,
0xa5,
0xa1,
0xa1,
0xa5,
0x81,
0xff
};
byte smile[] = {8, 8,
0xff,
0x81,
0xb5,
0xa1,
0xa1,
0xb5,
0x81,
0xff
};
byte sad[] = {8, 8,
0xff,
0x81,
0xb5,
0x91,
0x91,
0xb5,
0x81,
0xff
};
byte kiss[] = {8, 8,
0xff,
0x81,
0xb5,
0xb1,
0xb1,
0xb5,
0x81,
0xff
};
void setup() {
m.init();
m.setIntensity(8);
}
void loop() {
m.writeSprite(0, 0, smile);
delay(1000);
m.clear();
m.writeSprite(0, 0, poker);
delay(1000);
m.clear();
m.writeSprite(0, 0, sad);
delay(1000);
m.clear();
m.writeSprite(0, 0, kiss);
delay(1000);
for (int i = 0; i < 8; i++) {
m.shiftLeft(false, false);
delay(300);
}
m.clear();
}
از این طریق میتوانید اعداد و حروف را نیز ساخته و نمایش دهید.
برای استفاده از اعداد، حروف و علامت های رایج می توانید از رشته و توابع زیر کمک بگیرید:
#include <avr/pgmspace.h>
byte buffer[10];
PROGMEM const unsigned char CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // < 3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // = 3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
void printCharWithShift(char c, int shift_speed) {
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7 * c, 7);
m.writeSprite(32, 0, buffer);
m.setColumn(32 + buffer[0], 0);
for (int i = 0; i < buffer[0] + 1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printStringWithShift(char* s, int shift_speed) {
while (*s != 0) {
printCharWithShift(*s, shift_speed);
s++;
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7 * c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
}
اتصال دو Dot matrix بصورت آبشاری
از قابلیت های جالب ماژول Dot Matrix، می اتصال چند عدد (حداکثر 8) از ماژول ها بهم و نمایش اطلاعات بصورت آبشاری روی آنهاست.
سیم بندی
برای این کار کافیست بصورت سلسه مراتبی Dout ماژول قبل را به Din ماژول بعد متصل کنید و سایر پایه ها را نیز به همنام خود متصل کنید.
کد
حال با آپلود کردن کد زیر روی آردوینو، نتیجه را مشاهده کنید.
/*
8x8 Dot Matrix w/ MAX7219
modified on 7 March 2019
by Saeed Hosseini @ Electropeak
Home
*/
#include <MaxMatrix.h>
int DIN = 7;
int CLK = 6;
int CS = 5;
int maxInUse = 2;
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte pakman[] = {8, 8, 0x1c, 0x22, 0x41, 0x49, 0x55, 0x22, 0x00, 0x08};
void setup() {
m.init();
m.setIntensity(2);
}
void loop(){
m.writeSprite(0, 0, pakman);
delay(300);
for (int i = 0; i < 8; i++) {
m.shiftRight(false, true);
delay(300);
}
m.clear();
}
نکته
فراموش نکنید که شما بصورت مستقیم تنها روی اولین ماژول برنامه ریزی می کنید.
Comments (4)
سلام
ببخشید من در MaxMatrix خطا دارم
باید چکار کنم تا خطا رفع بشود
سلام.
خطایی که دارید دقیقا چی هست؟
عالی بود.ممنون ماژول رو هم از فروشگاه کافه ربات تهیه کردم که حرف نداشت
خوشحالیم که براتون مفید بوده.