Hướng dẫn ma trận LED 8 × 8 MAX7219 với tính năng cuộn văn bản & điều khiển Android qua Bluetooth

Trong hướng dẫn Arduino này, chúng ta sẽ tìm hiểu cách điều khiển Ma trận LED 8 × 8 bằng trình điều khiển MAX7219 và board Arduino. Bạn có thể xem video sau hoặc đọc hướng dẫn dưới đây để biết thêm chi tiết.

Tổng quan

Chúng tôi sẽ đưa ra ba ví dụ, với ví dụ đầu tiên, chúng tôi sẽ giải thích nguyên tắc làm việc cơ bản của MAX7219, trong ví dụ thứ hai, chúng tôi sẽ tạo văn bản cuộn trên Ma trận LED 8 × 8 hoạt động như thế nào và trong ví dụ thứ ba, chúng tôi sẽ điều khiển chúng thông qua Bluetooth và một ứng dụng Android xây dựng tùy chỉnh.

MAX7219

Bây giờ hãy xem xét kỹ hơn về trình điều khiển MAX7219. IC có khả năng điều khiển 64 đèn LED riêng lẻ trong khi chỉ sử dụng 3 dây để liên kết với Arduino và hơn nữa chúng ta có thể tạo chuỗi nhiều trình điều khiển và ma trận mà vẫn sử dụng chỉ 3 dây.

Trình điều khiển ma trận LED MAX7219 8×8

64 đèn LED được điều khiển bởi 16 chân đầu ra của IC. Câu hỏi bây giờ là làm thế nào có thể nối chúng. Vâng, số lượng tối đa của đèn LED sáng lên cùng một lúc là tám. Các đèn LED được sắp xếp thành 8 × 8 gồm hàng và cột. Vì vậy, MAX7219 kích hoạt mỗi cột trong một khoảng thời gian rất ngắn và đồng thời nó cũng điều khiển từng hàng. Vì vậy, bằng cách nhanh chóng chuyển qua các cột và hàng, mắt người sẽ chỉ nhận thấy một ánh sáng liên tục.

Lưu ý các chân của Ma trận LED 8 × 8 phổ biến được sắp xếp bên trong, vì vậy nếu bạn tự xây dựng một ma trận, bạn nên tìm hiểu nó. Cũng lưu ý rằng một bảng ngắt phổ biến cho MAX7219 đi kèm với một điện trở giữa 5V và chân IC 18. Điện trở được sử dụng để cài đặt độ sáng hoặc dòng điện cho đèn LED.

MAX7219 Điện trở điều chỉnh dòng điện

Bảng dưới đây là dữ liệu của IC cho thấy giá trị của điện trở mà chúng ta nên sử dụng theo mức giảm điện áp chuyển tiếp của đèn LED.

 

MAX7219 Phân đoạn dòng điện so với bảng giảm điện áp chuyển tiếp từ dữ liệu

Sơ đồ mạch

Bây giờ, hãy kết nối mô-đun LED Ma trận 8 × 8 với Board Arduino. Đây là sơ đồ mạch:

Sơ đồ mạch 8/8 Matrix MAX7219

VCC và GND của mô-đun lần lượt nối với chân 5V và GND của Arduino và ba chân khác, DIN, CLK và CS nối với bất kỳ chân digital nào của board Arduino. Nếu chúng ta muốn kết nối nhiều hơn một mô-đun, chúng ta chỉ cần kết nối các chân đầu ra của bảng ngắt trước đó với các chân đầu vào của mô-đun mới. Trên thực tế các chân này đều giống nhau ngoại trừ chân DOUT của board trước đi đến chân DIN của board mới.

Các linh kiện cần thiết cho Hướng dẫn Arduino này:

  • Mô-đun ma trận 8 × 8 LED MAX7219 Dot
  • Mô-đun Bluetooth HC-05
  • Board Arduino
  • Breadboard và dây dẫn

Code Arduino cơ bản MAX7219

Khi đã kết nối các mô-đun, tiếp theo hãy tham khảo code Arduino của ví dụ đầu tiên. Chúng tôi sử dụng thư viện MaxMatrix có thể tải xuống từ GitHub .

/*
   8x8 LED Matrix MAX7219 Example 01
   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/

#include <MaxMatrix.h>

int DIN = 7;   // DIN pin of MAX7219 module
int CLK = 6;   // CLK pin of MAX7219 module
int CS = 5;    // CS pin of MAX7219 module
int maxInUse = 1;


MaxMatrix m(DIN, CS, CLK, maxInUse); 

char A[] = {4, 8,
            B01111110,
            B00010001,
            B00010001,
            B01111110,
           };

char B[] = {4, 8,
            B01111111,
            B01001001,
            B01001001,
            B00110110,
           };

char smile01[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10010101,
                  B10100001,
                  B10100001,
                  B10010101,
                  B01000010,
                  B00111100
                 };
char smile02[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10010101,
                  B10010001,
                  B10010001,
                  B10010101,
                  B01000010,
                  B00111100
                 };
char smile03[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10100101,
                  B10010001,
                  B10010001,
                  B10100101,
                  B01000010,
                  B00111100
                 };

void setup() {
  m.init(); // MAX7219 initialization
  m.setIntensity(8); // initial led matrix intensity, 0-15
}

void loop() {
  // Seting the LEDs On or Off at x,y or row,column position
  m.setDot(6,2,true); 
  delay(1000);
  m.setDot(6,3,true);
  delay(1000);
  m.clear(); // Clears the display
  for (int i=0; i<8; i++){
    m.setDot(i,i,true);
    delay(300);
  }
  m.clear();
  // Displaying the character at x,y (upper left corner of the character)  
  m.writeSprite(2, 0, A);
  delay(1000);

  m.writeSprite(2, 0, B);
  delay(1000);

  m.writeSprite(0, 0, smile01);
  delay(1000);
  
  m.writeSprite(0, 0, smile02);
  delay(1000);
  
  m.writeSprite(0, 0, smile03);
  delay(1000);
  
  for (int i=0; i<8; i++){
    m.shiftLeft(false,false);
    delay(300);
  }
  m.clear();

}

Mô tả: Vì vậy, trước tiên chúng ta cần thêm thư viện MaxMatrix.h, xác định các chân mà mô-đun được kết nối, đặt mô-đun chúng ta sử dụng và xác định đối tượng MaxMatrix.

Để hiển thị các ký tự, chúng ta cần định nghĩa chúng trong một mảng các ký tự hoặc byte và ở đây tôi có một vài ví dụ. Chúng ta có thể nhận thấy cách các bit đang hình thành các ký tự thực sự. Trong trường hợp này, chúng được xoay 90 độ nhưng ví dụ thư viện đề nghị sử dụng chúng theo cách như vậy để sau này dễ dàng thực hiện chức năng tùy chỉnh shiftLeft để cuộn văn bản.

Trong phần thiết lập, chúng ta chỉ cần khởi tạo mô-đun và đặt độ sáng cho đèn LED. Trong phần vòng lặp sử dụng hàm setDot (), chúng ta có thể đặt bất kỳ đèn LED riêng lẻ nào sáng lên ở vị trí X, Y hoặc Hàng / Cột và sử dụng chức năng Clear () chúng ta có thể xóa màn hình.

Ma trận LED 8×8

Để hiển thị các ký tự được xác định trước, chúng tôi sử dụng hàm writeSprite () và hai đối số đầu tiên là vị trí X và Y của góc trên bên trái của ký tự. Cuối cùng, sử dụng hàm shiftLeft (), chúng ta di chuyển hoặc cuộn ký tự sang trái.

Code cuộn văn bản cho ma trận LED 8 × 8

Tiếp theo chúng ta hãy xem ví dụ cuộn văn bản. Dưới code bạn sẽ tìm thấy mô tả của nó.

/*
   8x8 LED Matrix MAX7219 Scrolling Text Example
   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/


#include <MaxMatrix.h>
#include <avr/pgmspace.h>

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, // ~
};

int DIN = 7;   // DIN pin of MAX7219 module
int CLK = 6;   // CLK pin of MAX7219 module
int CS = 5;    // CS pin of MAX7219 module
int maxInUse = 2;

MaxMatrix m(DIN, CS, CLK, maxInUse);

byte buffer[10];

char text[]= "HowToMechatronics.com  "; // Scrolling text

void setup() {
  m.init(); // module initialize
  m.setIntensity(15); // dot matix intensity 0-15
}

void loop() {

  printStringWithShift(text, 100); // (text, scrolling speed)

}
// Display=the extracted characters with scrolling
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);
  }
}
// Extract the characters from the text string
void printStringWithShift(char* s, int shift_speed) {
  while (*s != 0) {
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

Mô tả: Ở đây phải thêm một thư viện bổ sung cho PROGMEN là công cụ sửa đổi biến và nó được sử dụng để lưu trữ dữ liệu trong bộ nhớ flash thay vì SRAM. Khi chúng ta có một cơ sở dữ liệu lớn hơn về các biến tĩnh, như trong trường hợp này xác định các chữ cái và ký tự, tốt hơn là lưu trữ chúng trong bộ nhớ flash vì nó lớn hơn nhiều, 32K byte, so với 2K byte của SRAM.

Code Arduino cuộn văn bản cho ma trận LED 8/8

Tiếp theo với một mảng ký tự, chúng tôi xác định cuọn văn bản và trong phần vòng lặp, chức năng tùy chỉnh printStringWithShift, in văn bản trên ma trận LED với tốc độ cuộn được xác định bằng mili giây với đối số thứ hai. Điều đầu tiên mà hàm tùy chỉnh này làm là nó trích xuất các ký tự từ chuỗi văn bản và sau đó hiển thị các ký tự cuộn này trên ma trận led.

Ứng dụng Android để điều khiển ma trận LED 8 × 8 qua Bluetooth

Khi đã tìm hiểu cách thức hoạt động của MAX7219, bây giờ chúng ta có thể đưa ra ví dụ thứ ba là dự án Arduino thực tế nơi sử dụng một ứng dụng Android tùy chỉnh để điều khiển ma trận LED thông qua giao tiếp Bluetooth. Trước khi tiếp tục, tôi sẽ đề nghị bạn nên tham khảo cách sử dụng mô-đun Bluetooth HC-05 và cách tạo ứng dụng Android tùy chỉnh bằng ứng dụng trực tuyến MIT App Inventor .

Ứng dụng Android để điều khiển ma trận LED 8×8 qua Bluetooth

Đây là code Arduino và bây giờ chúng ta hãy xem các sửa đổi so với ví dụ trước.

/*
      8x8 LED Matrix MAX7219 Scrolling Text
          Android Control via Bluetooth

   by Dejan Nedelkovski, www.HowToMechatronics.com

   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/

#include <MaxMatrix.h>
#include <SoftwareSerial.h>
#include <avr/pgmspace.h>

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, // ~
};

int dIn = 7;   // DIN pin of MAX7219 module
int clk = 6;   // CLK pin of MAX7219 module
int cs = 5;    // CS pin of MAX7219 module

int maxInUse = 2;    // Number of MAX7219's connected

MaxMatrix m(dIn, cs, clk, maxInUse);
SoftwareSerial Bluetooth(8, 7); // Bluetooth

byte buffer[10];
char incomebyte;
int scrollSpeed = 100;
char text[100] = "HowToMechatronics.com  "; // Initial text message
int brightness = 15;
int count = 0;
char indicator;

void setup() {
  m.init(); // MAX7219 initialization
  m.setIntensity(brightness); // initial led matrix intensity, 0-15
  Bluetooth.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  // Printing the text
  printStringWithShift(text, scrollSpeed);
  
  if (Bluetooth.available()) {   // Checks whether data is comming from the serial port
    indicator = Bluetooth.read();   // Starts reading the serial port, the first byte from the incoming data
    // If we have pressed the "Send" button from the Android App, clear the previous text
    if (indicator == '1') {
      for (int i = 0; i < 100; i++) {
        text[i] = 0;
        m.clear();
      }
      // Read the whole data/string comming from the phone and put it into text[] array.
      while (Bluetooth.available()) {
        incomebyte = Bluetooth.read();
        text[count] = incomebyte;
        count++;
      }
      count = 0;
    }
    // Adjusting the Scrolling Speed
    else if (indicator == '2') {
      String sS = Bluetooth.readString();
      scrollSpeed = 150 - sS.toInt(); // Milliseconds, subtraction because lower value means higher scrolling speed
    }
    // Adjusting the brightness
    else if (indicator == '3') {
      String sB = Bluetooth.readString();
      brightness = sB.toInt();
      m.setIntensity(brightness);
    }
  }

}

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++;
  }
}

Mô tả:  Trước tiên, cần thêm thư viện SoftwareSerial.h sẽ cho phép giao tiếp Bluetooth và xác định một số biến cần thiết cho chương trình. Trong phần thiết lập, chúng ta cần khởi tạo Bluetooth với tốc độ truyền mặc định là 38400bit mỗi giây. Tôi đặt tin nhắn văn bản ban đầu là “HowToMechatronics.com”, với tốc độ cuộn chậm 100 mili giây.

Tiếp theo, trong phần vòng lặp, sử dụng hàm Bluetooth.av Available (), chúng tôi sẽ kiểm tra xem dữ liệu có đến từ cổng nối tiếp hay không và nếu điều đó đúng khi sử dụng chức năng Bluetooth.read, chúng tôi bắt đầu đọc cổng nối tiếp, mỗi lần lặp một byte. Vì vậy, byte đến đầu tiên sẽ luôn được lưu trữ vào biến của người dùng và biến nó theo tùy chọn, chúng ta có thể thay đổi tin nhắn văn bản, tốc độ cuộn hay độ sáng của ma trận LED.

Khối lệnh ứng dụng Android cho LED 8/8 Matrix Điều khiển từ Bluetooth qua Arduino

Nếu chúng ta xem các khối lệnh ứng dụng Android, chúng ta có thể nhận thấy rằng khi nhấp vào nút Send, trước tiên chúng ta sẽ gửi byte, trong trường hợp này là 1 1, nghĩa là chúng ta muốn thay đổi tin nhắn văn bản. Để làm điều đó, ở phía Arduino, chúng tôi sẽ xóa toàn bộ mảng ký tự và cũng xóa màn hình ma trận LED. Sau đó, trong vòng lặp khi đọc phần còn lại của dữ liệu trong cổng nối tiếp và đó là thông báo được nhập vào hộp văn bản của ứng dụng Android.

Trong trường hợp biến chỉ thị là “2”, có nghĩa là chúng tôi đã thay đổi vị trí của thanh trượt tốc độ cuộn, vì vậy chúng tôi sẽ đọc giá trị mới của nó bằng chức năng Bluetooth.readString () và điều chỉnh tốc độ cuộn. Trong cùng một cách chúng ta điều chỉnh độ sáng của đèn LED.

Tại đây bạn có thể tải xuống ứng dụng Android:

AndrodApp for Arduino 8×8 LED Matrix Control 

AndrodApp for Arduino 8×8 LED Matrix Control .aia file

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Chat hỗ trợ
Chat ngay