0 đánh giá

Lập trình LED ma trận 8x8 với Arduino

LED ma trận 8x8 bạn thường bắt gắp khi đi thang máy hoặc khi đến Ngân hàng, LED ma trận 8x8 thường dùng hiện thị các số nhỏ, liên tục. Bài này chúng ta sẽ thử lập trình nó với Arduino cho 1 hoặc nhiều LED. Ở đây để đơn giản ta dùng với Module LED 8x8 được làm sẵn. Bạn có thể tham khảo giá tại http://hshop.vn/module-led-ma-tran

Nào ta bắt đầu

Bước 1: Yêu cầu linh kiện
khoere_linh-kien-led-8x8-3558909473.jpg khoere_module-led-631623994.jpg

Bạn cần chuẩn bị Board Arduino UNO, Module LED 8x8, Dây cắm.

Module LED ở đây dùng IC MAX7219 để điều khiển LED. Datasheet của nó bạn có thể tham khảo ở đây. Module dùng điện Áp 5V. LED được dùng là LED cathode chung.

 

Bước 2: Cách nối dây
khoere_noi-day-led-8x8-3539725588.jpg khoere_noi-day-led-8x8-2-4350871327.jpg khoere_noi-day-led-8x8-3-6155879767.jpg

Bạn nối dây theo bảng bên dưới.

LED Matrix        Arduino         Màu dây ở hình trên
VCC                        5V                       Red
GND                       GND                   Black
DIN                         D12                    Yellow
CS                          D10                     White
CLK                        D11                     Blue

Bước 3: Lập trình LED 8x8
khoere_thu-vien-8321971041.jpg khoere_led-lap-trinh-2312119272.jpg

Trước tiên bạn cần tải về thư viện lập trình LED LedControlMS.zip ở phần đính kèm. Sau đó copy vào thư viện của Arduino IDE ở thư mục C:Program Files (x86)Arduinolibraries hoặc C:Program FilesArduinolibraries. 

Vào File-> Examples trên Arduino IDE bạn sẽ thấy 4 file như hình trên. 

Bạn vào File-> Examples->LedControlMS->MakeSpace_ LEDMatrix 

//We always have to include the library
#include LedControlMS.h

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
#define NBR_MTX 2 
LedControl lc=LedControl(12,11,10, NBR_MTX);

String digits= 1234567890;
int digitCounter=0;
/* we always wait a bit between updates of the display */
unsigned long delaytime=300;


void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  Serial.begin (9600);
  Serial.println(Setup);
  digitCounter=0;
  for (int i=0; i< NBR_MTX; i++){
    lc.shutdown(i,false);
  /* Set the brightness to a medium values */
    lc.setIntensity(i,8);
  /* and clear the display */
    lc.clearDisplay(i);
  }
  
  Serial.println(LED0: 0 0);
  lc.setLed(0,0,0,true);
  delay(1000);
  Serial.println(LED0: 0 7);
  lc.setLed(0,0,7,true);
  delay(1000);
  Serial.println(LED0: 7 0);
  lc.setLed(0,7,0,true);
  delay(1000);
  Serial.println(LED0: 7 7);  
  lc.setLed(0,7,7,true);
  delay(1000);
  Serial.println(LED0: 0 0 off);
  lc.setLed(0,0,0,false);
  delay(1000);
  Serial.println(LED0: 0 7 off);
  lc.setLed(0,0,7,false);
  delay(1000);
  Serial.println(LED0: 7 0 off);
  lc.setLed(0,7,0,false);
  delay(1000);
  Serial.println(LED0: 7 7 off);  
  lc.setLed(0,7,7,false);
  delay(1000);  
  //clearAll();
  
  lc.setRow(0,1,0x0C);
  delay(1000);
  lc.clearDisplay(0);
  lc.setRow(0,1,0xC0);
  delay(1000);
  lc.clearDisplay(0);

  lc.setColumn(0,1,0x0C);
  delay(1000);
  lc.clearDisplay(0);
  lc.setColumn(0,1,0xC0);
  delay(1000);
  lc.clearDisplay(0);
  
  lc.writeString(0,Hola Mundo);
  delay(1000);
  lc.clearAll();
  scrollLeft(O);
  delay(1000);
  lc.clearAll();
  scrollRight(O);
  delay(1000);
  lc.clearAll();

}


void loop() { 
  char ch= digits[digitCounter];
  digitCounter++;
  if (digitCounter>9) digitCounter=0;
  lc.displayChar(0, lc.getCharArrayPosition(ch));
  delay(1000);
  lc.clearAll();
  delay(200);
}


void scrollLeft(char ch){
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<6; scroll++) {
     for (int i=scroll; i<6;i++) {
        lc.setRow(0,i-scroll, alphabetBitmap[pos][i]);
    } 
    delay(300);
    lc.clearDisplay(0);
  }
}

void scrollRight(char ch){
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<8; scroll++) {
     for (int i=0; i<6;i++) {
        if (scroll+i<8) lc.setRow(0, scroll+i, alphabetBitmap[pos][i]);
    } 
    delay(300);
    lc.clearDisplay(0);
  }
}

Chạy thử và xem kết quả nhé.

Nếu thắc mắc gì bạn có thể comment phía dưới, mình sẽ giải đáp thắc mắc của bạn

(!) Nếu có bất kỳ thắc mắc nào cần hỏi vui lòng đặt câu hỏi tại HỏiHay.Net, Cộng đồng Hỏi đáp Hỏi Hay sẽ trả lời bạn.
1,909 lượt xem ^tháng ^ngày, ^năm
admin 2,030 điểm

Please log in or register to Comment this Media.