طريقة تشغيل 8x8 LED Matrix MAX7219 مع أردوينو - DIY Channel3

DIY Channel3

Arduino│ESP8266│ESP32│Drone│Robot

طريقة تشغيل 8x8 LED Matrix MAX7219 مع أردوينو

مشاركة هذا

 



تحكم في مصفوفة 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