تحكم في مصفوفة 8 × 8 LED مع ثلاثة مخارج فقط من Arduino باستخدام MAX7219 / MAX7221. رمز بسيط يستخدم مكتبة موجودة. يوضح البرنامج التعليمي أيضًا كيفية توصيل عدة مصفوفات في سلسلة.
تهدف الدائرة المتكاملة MAX7219 أو 7221 إلى التحكم في 64 مصباح LED فرديًا أو 8 أرقام من شاشات 7 مقاطع. إذا كان يقدم ميزتين رئيسيتين:
باستخدام 3 دبابيس إخراج رقمية فقط ، يمكنك التحكم في 64 مصباح LED لكل مصفوفة - يتحقق ذلك باستخدام الاتصال عبر ناقل واجهة تسلسلية متزامنة (SPI)
مطلوب تيار أقل لإضاءة جميع مصابيح LED - يتم تحقيقه عن طريق التبديل السريع وإيقاف الصفوف الفردية (بحد أقصى 8 مصابيح LED) في وقت واحد ، لذا فهو سريع غير مرئي للعين البشرية. على سبيل المثال ، إذا كنت تفكر في إضاءة المصفوفة بأكملها بـ 64 مصباح LED ، فعادة ما يستغرق الأمر حوالي 64 × 20 مللي أمبير ، أي 1.3 أمبير لمصفوفة واحدة فقط (قد تتالي أكثر). مع MAX72xx ينخفض إلى 8 × 20 مللي أمبير = 160 مللي أمبير.
المكونات الاساسية :
- Arduino UNO
- 8x8 LED Matrix MAX7219
- Jumper wires
++ مخطط الرسم البياني :
++ الكود البرمجي هنا :
#include "LedControl.h"
/*
pin 2 is connected to the DataIn
pin 4 is connected to the CLK
pin 3 is connected to LOAD
***** Please set the number of devices you have *****
*/
LedControl lc=LedControl(2,4,3,2);
const int addrL = 0; // first LED matrix - Left robot eye
const int addrR = 1; // second LED matrix - Right robot eye
void setup() {
/*The MAX72XX is in power-saving mode on startup*/
lc.shutdown(addrL,false);
lc.shutdown(addrR,false);
/* Set the brightness to max values */
lc.setIntensity(addrL,15);
lc.setIntensity(addrR,15);
/* and clear the display */
lc.clearDisplay(addrL);
lc.clearDisplay(addrR);
// turn on all LEDs for a test
for(int row=0;row<8;row++) {
lc.setRow(addrL, row, 255);
lc.setRow(addrR, row, 255);
delay(100);
}
delay(300);
}
void showNeutral() {
byte left[8] = {
B00000000,
B00111100,
B01000010,
B01011010,
B01011010,
B01000010,
B00111100,
B00000000};
displayEmotion(left, left);
}
void showAnger() {
byte left[8] = {
B00000000,
B00000000,
B01111110,
B01011010,
B01011010,
B00100100,
B00011000,
B00000000};
byte right[8] = {
B00000000,
B00000000,
B01111110,
B01011010,
B01011010,
B00100100,
B00011000,
B00000000};
displayEmotion(left, right);
}
void showSadness() {
byte left[8] = {
B00000000,
B00001100,
B00010010,
B00111010,
B01011010,
B01000010,
B00111100,
B00000000};
byte right[8] = {
B00000000,
B00110000,
B01001000,
B01011100,
B01011010,
B01000010,
B00111100,
B00000000};
displayEmotion(left, right);
}
void displayEmotion(byte left[8], byte right[8]) {
lc.clearDisplay(addrL);
lc.clearDisplay(addrR);
for(int row=0;row<8;row++) {
lc.setRow(addrL,row,left[row]);
lc.setRow(addrR,row,right[row]);
}
}
void loop() {
showNeutral();
delay(4000);
showAnger();
delay(4000);
showSadness();
delay(4000);
}
#arduino #raspberrypi #electronics #arduinoproject #robotics #technology #engineering #arduinouno #robot #iot #diy #electrical #maker #programming #electronic #microcontroller #arduinoprojects #tech #esp #pcb #arduinomega #d #electricalengineering #robotica #diyelectronics #project #coding #arduinofun #sensor
No comments:
Post a Comment