Mục lục:

Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33): 3 bước
Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33): 3 bước

Video: Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33): 3 bước

Video: Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33): 3 bước
Video: Tạo màn hình điều khiển trên Adafruit IO 2024, Tháng mười một
Anonim
Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33)
Trình tạo ký tự tùy chỉnh (Ma trận Adafruit HT16k33)

In các ký tự đặc biệt trên màn hình LCD và ma trận đèn Led là một niềm vui tuyệt vời. Thủ tục để in các ký tự đặc biệt hoặc ký tự tùy chỉnh là tạo một mảng với các giá trị nhị phân cho mỗi hàng và cột. Có thể rất bận rộn để tìm mã chính xác cho bất kỳ ký tự tùy chỉnh nào, do đó, dự án này sẽ tự động hóa và tạo mã cho ma trận led 8x8 và cũng sẽ in ký tự tùy chỉnh trên Adafruit HT16k33 8x8 Bicolor Matrix.

Adafruit HT16k33, Ma trận đèn LED hai màu 1,2 inch 8x8 giao tiếp với Arduino thông qua giao thức giao tiếp I2C

Theo Adafruit, "Phiên bản ba lô LED này được thiết kế cho ma trận 1,2" 8x8. Chúng chỉ đo được 1,2 "x1,2" nên thật đáng tiếc khi phải sử dụng một loạt chip lớn để điều khiển nó. Chiếc ba lô này giải quyết được sự khó chịu khi sử dụng 16 chân hoặc một loạt chip bằng cách có bộ điều khiển ma trận dòng điện không đổi I2C nằm gọn gàng trên mặt sau của PCB. Chip điều khiển sẽ xử lý mọi thứ, vẽ tất cả 64 đèn LED trong nền. Tất cả những gì bạn phải làm là ghi dữ liệu vào nó bằng giao diện I2C 2 chân. Có hai chân chọn địa chỉ để bạn có thể chọn một trong 8 địa chỉ để điều khiển tối đa 8 trong số này trên một bus I2C 2 chân duy nhất (cũng như bất kỳ chip hoặc cảm biến I2C nào khác mà bạn thích). Chip trình điều khiển có thể 'làm mờ' toàn bộ màn hình từ độ sáng 1/16 lên đến độ sáng đầy đủ trong các bước 1/16. Nó không thể làm mờ các đèn LED riêng lẻ, chỉ toàn bộ màn hình cùng một lúc."

Trong hướng dẫn này, tôi sẽ giải thích cho bạn cách lấy mã cho bất kỳ ký tự tùy chỉnh nào trong thời gian thực và in ký tự đó trên Led Matrix.

Bước 1: Các thành phần

Hướng dẫn này là một dự án cơ bản về Ma trận Adafruit HT16k33. Bạn cần:

  1. Adafruit HT16k33 Ma trận đèn Led hai màu 1.2 '' x 1.2 '' 8x8.
  2. Arduino (bất kỳ biến thể nào nhưng Uno được ưu tiên hơn).
  3. Breadboard
  4. Nguồn cấp

Bước 2: Sơ đồ

Sơ đồ
Sơ đồ
Sơ đồ
Sơ đồ

Việc đấu dây Led ma trận Adafruit HT16k33 rất dễ dàng chúng ta chỉ cần kết nối đồng hồ và chân dữ liệu như chúng ta vẫn thường làm đối với các thiết bị I2C. Các kết nối sẽ như sau:

  1. SCL (Chân đồng hồ của Ma trận) được kết nối với A5 (Chân đồng hồ của Arduino Uno. Tham khảo biểu dữ liệu để biết các biến thể khác của Arduino)
  2. SDA (Chân dữ liệu của Ma trận) kết nối với A4. (Tham khảo biểu dữ liệu cho các biến thể khác của Arduino)
  3. VCC kết nối với 5V.
  4. GND kết nối với 0V.

Bạn cũng có thể tham khảo sơ đồ thể hiện trong hình.

Bước 3: Mã

Mã số
Mã số
Mã số
Mã số

Mã Arduino

Đầu tiên, chúng tôi sẽ bao gồm tất cả các thư viện được yêu cầu.

  1. Wire.h: - Đối với giao tiếp I2C
  2. Adafruit_LedBackpack
  3. Adafruit_GFX

Tất cả các thư viện này đều có sẵn trong chính Arduino IDE. Bạn chỉ cần cài đặt chúng từ Trình quản lý Thư viện. Phác thảo >> Bao gồm Thư viện >> Quản lý Thư viện

Chức năng thiết lập ()

Đặt mảng 8 bit số nguyên không dấu thành giá trị nhị phân strore8 cho 8 hàng, mỗi hàng 8 bit (8 cột). Đặt địa chỉ cho giao tiếp I2C.

Hàm lặp ()

Khi chúng ta cần in ký tự, chúng ta cần mã cho ký tự trong thời gian thực. Phương pháp thuận tiện nhất là gửi mã nối tiếp và Arduino sẽ đọc dữ liệu nối tiếp và in ký tự tương ứng. Gửi một mảng nối tiếp có thể là một công việc bận rộn, do đó chúng ta có thể gửi một chuỗi có tất cả 8 mã (mỗi mã 8 bit) được phân tách bằng dấu phẩy.

Đọc chuỗi nối tiếp:

if (Serial.available ()> 0) {data = Serial.readStringUntil ('\ n'); Serial.println (dữ liệu); }

Sau khi đọc văn bản, chúng ta cần giải mã chuỗi này và lấy lại các giá trị nhị phân. Như chúng ta đã biết, định dạng của chuỗi đầu vào sẽ luôn giống nhau. Chúng ta có thể mã hóa nó để tìm các chuỗi con và chuyển đổi các chuỗi thành các giá trị tương đương thập phân của chúng. Sau đó, chúng ta sẽ chuyển mảng thập phân được tạo ra (uint8_t) để in ký tự trên ma trận.

Chuyển đổi chuỗi 8 bit thành số thập phân:

int val (Chuỗi str) {int v = 0; for (int i = 0; i <8; i ++) {if (str == '1') {v = v + power (2, (7-i)); }} return v; }

Để đánh giá tương đương thập phân bằng cách sử dụng hàm power (pow ()), bạn cần phải xử lý các giá trị kiểu kép và do đó chúng ta có thể viết hàm lũy thừa của riêng mình dưới dạng:

int power (int base, int exponent) {int c = 1; for (int i = 0; i {c = c * base;} return c;}

Bây giờ, cuối cùng, chúng ta sẽ viết mã để in ký tự bằng cách sử dụng mảng đã tạo gồm 8 giá trị thập phân (một cho mỗi hàng).

void print_emoji (uint8_t emoji , String color) {matrix.clear (); if (color == "red") {matrix.drawBitmap (0, 0, emoji, 8, 8, LED_RED); } else {matrix.drawBitmap (0, 0, biểu tượng cảm xúc, 8, 8, LED_GREEN); } matrix.writeDisplay (); chậm trễ (500); }

Bạn sẽ dễ dàng hiểu mã này khi chúng tôi xóa ma trận trước và sau đó hiển thị ký tự bằng mảng biểu tượng cảm xúc bằng cách sử dụng hàm matrix.drawBitmap (). Đừng quên viết "matrix.writeDisplay ()" sau tất cả các định dạng vì hàm này sẽ chỉ hiển thị tất cả các định dạng được thực hiện cho đến nay trên ma trận.

Bây giờ bạn có thể gửi chuỗi với tất cả các giá trị mã và Arduino sẽ in ký tự trên ma trận. Bạn có thể tải xuống mã Arduino từ bên dưới. Đối với mục đích thử nghiệm, bạn có thể viết

B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100

chuỗi này trong Serial Monitor và có thể thấy ký tự trên ma trận.

Bây giờ, chúng ta cần gửi dữ liệu nối tiếp tự động từ một phần mềm khi chúng ta nhấn nút "In". Để tự động hóa điều này, chúng tôi sẽ tạo ma trận 8x8 demo và chúng tôi sẽ cung cấp cơ sở cho người dùng để chọn ô nào sẽ được tô màu và sau đó phần mềm sẽ tự động tạo mã và gửi dữ liệu nối tiếp đến Arduino ở định dạng chuỗi. Tôi đã chọn Xử lý cho phần còn lại của công việc của mình. Trong quá trình xử lý, chúng ta có thể tạo một ma trận bằng cách sử dụng 64 nút (hình chữ nhật có chức năng nhấn) và có thể gán một giá trị và màu cụ thể khi bắt đầu (Đặt nó là màu trắng với giá trị 0). Bây giờ bất cứ khi nào nút được nhấn, chúng tôi sẽ chuyển đổi màu của nút thành màu đen và đặt giá trị thành 1. Nếu người dùng nhấn lại nút đó, giá trị của nó sẽ lại thay đổi thành 0 và màu trở lại màu trắng. Điều này sẽ giúp người dùng thay đổi mã nhiều lần một cách dễ dàng và có thể thực hiện sửa đổi một cách dễ dàng mà không cần xóa lại toàn bộ ma trận. Khi nhấp vào nút "In", chúng tôi sẽ tạo một chuỗi tương tự như được hiển thị ở trên cho bản demo. Sau đó, chuỗi sẽ được gửi đến cổng nối tiếp cụ thể.

Bạn có thể tải xuống mã xử lý từ bên dưới. Đây là mã đầu tiên của tôi trong quá trình xử lý. Các đề xuất về cách mã hóa nâng cao được đánh giá cao.

Bạn có thể xem GUI trông như thế nào và cách tạo nhân vật bằng hệ thống. Sẽ hầu như không mất vài giây để tạo cùng một ký tự trên ma trận.

Bạn có thể tải xuống mã và hình ảnh của dự án này từ Kho lưu trữ GitHub của tôi.

Đề xuất: