Giao tiếp Màn Hình OLED I2C Với Arduino

 

Chán sử dụng màn hình LCD trong các dự án Arduino của bạn lặp đi lặp lại? Tốt! Họ thực sự là một điều của quá khứ. Tham gia màn hình OLED (Diode phát sáng hữu cơ) siêu tuyệt vời! Chúng siêu nhẹ, gần như mỏng như giấy, về mặt lý thuyết là linh hoạt và tạo ra hình ảnh sáng hơn và sắc nét hơn.

Trình điều khiển OLED SSD1306 và các giao tiếp của nó

Trung tâm của mô-đun là bộ điều khiển trình điều khiển CMOS OLED đơn chip mạnh mẽ - SSD1306. Nó có thể giao tiếp với vi điều khiển theo nhiều cách bao gồm I2C và SPI .

SPI nói chung nhanh hơn I2C nhưng yêu cầu nhiều chân I / O hơn. Trong khi I2C chỉ yêu cầu hai chân và có thể được chia sẻ với các thiết bị ngoại vi I2C khác. Đó là sự đánh đổi giữa chân và tốc độ. Vì vậy, nó thực sự tổng hợp tùy thuộc vào sự lựa chọn của bạn.

Màn hình OLED I2C 128x64 màu xanh lamMàn hình OLED SPI 128x64 màu xanh lam

Nhờ tính linh hoạt của bộ điều khiển SSD1306, mô-đun có các kích thước và màu sắc khác nhau: ví dụ: 128x64, 128 × 32, với OLED trắng, OLED xanh và OLED màu kép. Tin tốt là tất cả các màn hình này đều có thể thay thế được .

Yêu cầu nguồn cấp

Màn hình OLED hoạt động mà không cần đèn nền vì nó tự tạo ra ánh sáng. Đây là lý do tại sao màn hình có độ tương phản cao, góc nhìn cực rộng và có thể hiển thị mức độ màu đen sâu Sự vắng mặt của đèn nền làm giảm đáng kể năng lượng cần thiết để chạy OLED. Trung bình màn hình sử dụng dòng điện khoảng 20mA , mặc dù nó phụ thuộc vào mức độ sáng của màn hình.

Điện áp hoạt động của bộ điều khiển SSD1306 là từ 1,65V đến 3,3V trong khi bảng điều khiển OLED yêu cầu điện áp cung cấp 7V đến 15V. Tất cả các yêu cầu công suất khác nhau này đều được đáp ứng bằng cách sử dụng mạch bơm sạc bên trong Điều này giúp bạn có thể kết nối nó với Arduino hoặc bất kỳ vi điều khiển logic 5V nào một cách dễ dàng mà không cần sử dụng bất kỳ bộ chuyển đổi mức logic nào.

Bản đồ bộ nhớ OLED

Bất kể kích thước của mô-đun OLED là bao nhiêu, trình điều khiển SSD1306 tích hợp sẵn RAM dữ liệu hiển thị đồ họa (GDDRAM) 1KB cho màn hình chứa mẫu bit được hiển thị. Vùng nhớ 1K này được sắp xếp thành 8 trang (từ 0 đến 7). Mỗi trang chứa 128 cột / phân đoạn (khối 0 đến 127). Và mỗi cột có thể lưu trữ 8 bit dữ liệu (từ 0 đến 7). Điều đó chắc chắn cho chúng ta biết chúng ta có

8 trang x 128 phân đoạn x 8 bit dữ liệu = 8192 bit = 1024 byte = bộ nhớ 1KB

Toàn bộ bộ nhớ 1K với các trang, phân đoạn và dữ liệu được đánh dấu bên dưới.

Mỗi bit đại diện cho pixel OLED cụ thể trên màn hình có thể được BẬT hoặc TẮT theo chương trình.

Màn hình OLED 128 × 64 hiển thị tất cả nội dung của RAM trong khi màn hình OLED 128 × 32 chỉ hiển thị 4 trang (một nửa nội dung) của RAM.

Dưới đây là thông số kỹ thuật đầy đủ:

Công nghệ hiển thịOLED (LED hữu cơ)
Giao tiếp MCUI2C / SPI
Kích thước màn hình0,96 inch ngang
Độ phân giải128 × 64 điểm ảnh
Điện áp hoạt động3.3V - 5V
Dòng hoạt độngTối đa 20mA
Góc nhìn160 °
Các ký tự trên mỗi hàng21
Số hàng ký tự7

Sơ đồ mô-đun màn hình OLED

Trước khi đi sâu vào mã hookup và ví dụ, trước tiên chúng ta hãy xem Sơ đồ chân của nó.

GND nên được kết nối với mặt đất của Arduino

VCC là nguồn cung cấp cho màn hình mà chúng tôi kết nối chân 5 volt trên Arduino.

SCL là một chân đồng hồ nối tiếp cho giao diện I2C.

SDA là một chân dữ liệu nối tiếp cho giao diện I2C.

Kết nối mô-đun màn hình OLED với Arduino Uno

Trước khi chúng ta bắt đầu tải lên mã và gửi dữ liệu đến màn hình, hãy kết nối màn hình với Arduino.

Các kết nối khá đơn giản. Bắt đầu bằng cách kết nối chân VCC với đầu ra 5V trên Arduino và kết nối GND với mặt đất.

Bây giờ chúng ta còn lại với các chân được sử dụng cho giao tiếp I2C. Lưu ý rằng mỗi Bảng Arduino có các chân I2C khác nhau nên được kết nối tương ứng. Trên bảng Arduino có bố cục R3, SDA (đường dữ liệu) và SCL (đường đồng hồ) nằm trên các tiêu đề chân gần với chân AREF. Chúng còn được gọi là A5 (SCL) và A4 (SDA).

Nếu bạn có Mega, các chốt sẽ khác! Bạn sẽ muốn sử dụng kỹ thuật số 21 (SCL) và 20 (SDA). Tham khảo bảng dưới đây để hiểu nhanh.

 SCLSDA
Arduino UnoA5A4
Arduino NanoA5A4
Arduino Mega2120
Leonardo / Micro32

Sơ đồ sau đây cho bạn thấy làm thế nào để nối dây mọi thứ.

Đi dây Mô-đun màn hình OLED 128 × 64 với Arduino UNO

Cài đặt thư viện cho mô-đun màn hình OLED

Bộ điều khiển SSD1306 của màn hình OLED có các trình điều khiển linh hoạt nhưng phức tạp. Cần có nhiều kiến thức về định địa chỉ bộ nhớ để sử dụng bộ điều khiển SSD1306. May mắn thay, thư viện SSD1306 của Adafruit được viết để che giấu sự phức tạp của bộ điều khiển SSD1306 để chúng ta có thể đưa ra các lệnh đơn giản để điều khiển màn hình.

Để cài đặt thư viện, hãy điều hướng đến Phác thảo> Bao gồm Thư viện> Quản lý Thư viện… Chờ Trình quản lý Thư viện tải xuống chỉ mục thư viện và cập nhật danh sách các thư viện đã cài đặt.

Lọc tìm kiếm của bạn bằng cách nhập 'adafruit ssd1306'. Nên có một vài mục. Hãy tìm Adafruit SSD1306 của Adafruit. Bấm vào mục nhập đó, rồi chọn Cài đặt.

Thư viện Adafruit SSD1306 này là một thư viện dành riêng cho phần cứng xử lý các chức năng cấp thấp hơn. Nó cần được ghép nối với Thư viện Adafruit GFX để hiển thị các nguyên bản đồ họa như điểm, đường thẳng, hình tròn, hình chữ nhật, v.v. Cài đặt thư viện này.

Sự cố đã biết với Bộ điều khiển SSD1306

Mặc dù SSD1306 có GDDRAM tích hợp cho màn hình, chúng tôi không thể đọc nội dung của nó ( theo Adafruit ). Do đó, không thể thao tác trên bộ đệm màn hình để thực hiện các phép toán.

Để thay thế, thư viện phân bổ bộ nhớ 1KB (128 × 64) / 8 bit) từ ATmega328P làm bộ đệm. Vì vậy, nó có thể thao tác bộ đệm màn hình và sau đó thực hiện chuyển hàng loạt từ bộ nhớ của ATmega328P sang bộ nhớ trong của bộ điều khiển SSD1306.

Sửa đổi Thư viện Adafruit SSD1306

Thư viện SSD1306 của Adafruit không được thiết lập cho màn hình OLED 128 × 64 (màn hình chúng tôi đang sử dụng ngay bây giờ). Kích thước hiển thị phải được thay đổi trong tệp tiêu đề Adafruit_SSD1306.h để làm cho nó hoạt động cho chúng tôi. Nếu nó không được thay đổi, một thông báo lỗi cho biết #error (“Chiều cao không chính xác, vui lòng sửa Adafruit_SSD1306.h!”); có thể xuất hiện khi cố gắng xác minh bản phác thảo mẫu trong Arduino IDE:

Để thay đổi tệp tiêu đề Adafruit_SSD1306.h, hãy mở vị trí sổ phác thảo của bạn. Nói chung là Tài liệu của tôi> Arduino. Bây giờ đi tới thư viện> Adafruit_SSD1306

Mở tệp Adafruit_SSD1306.h trong trình soạn thảo văn bản. Cuộn xuống tệp để tìm phần có Màn hình SSD1306 hoặc chuyển trực tiếp đến dòng số. 73. Nhận xét #define SSD1306_128_32 và bỏ ghi chú #define SSD1306_128_64 để mã trong phần này trông giống như sau:

Đó là nó. Bây giờ hãy lưu tệp và khởi động lại Arduino IDE của bạn.

Mã Arduino - Hiển thị văn bản

Bây giờ đến những thứ thú vị!

Bản phác thảo thử nghiệm sau sẽ in 'Hello World!' thông báo trên màn hình. Nó cũng bao gồm

  • Hiển thị văn bản đảo ngược
  • Hiển thị số
  • Hiển thị số có cơ số (Hex, Dec)
  • Hiển thị các ký hiệu ASCII
  • Cuộn văn bản theo chiều ngang & chiều dọc
  • Cuộn một phần của màn hình

Điều này sẽ cung cấp cho bạn hiểu biết đầy đủ về cách sử dụng màn hình OLED và có thể làm cơ sở cho các thí nghiệm và dự án thực tế hơn. Hãy thử bản phác thảo và sau đó chúng ta sẽ mổ xẻ nó một cách chi tiết.

Khi xây dựng bản phác thảo, IDE sẽ hiển thị thông báo cảnh báo bộ nhớ thấp. Điều này là do thư viện phân bổ 1KB bộ nhớ từ ATmega328P làm bộ đệm hiển thị. Bạn có thể bỏ qua nó.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
void setup()
{
// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer.
display.clearDisplay();
// Display Text
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
// Display Inverted Text
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();
// Changing Font Size
display.setTextColor(WHITE);
display.setCursor(0,24);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();
// Display Numbers
display.setTextSize(1);
display.setCursor(0,28);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();
// Specifying Base For Numbers
display.setCursor(0,28);
display.print("0x"); display.print(0xFF, HEX);
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)");
display.display();
delay(2000);
display.clearDisplay();
// Display ASCII Characters
display.setCursor(0,24);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();
// Scroll full screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
display.clearDisplay();
// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);
}
void loop() {}

Bản phác thảo bắt đầu bằng cách bao gồm bốn thư viện viz. SPI.h, Wire.h, Adafruit_GFX.h và Adafruit_SSD1306.h. Mặc dù thư viện SPI.h không bắt buộc đối với màn hình I2C OLED, chúng ta cần thêm nó để biên dịch chương trình của mình.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Tiếp theo, chúng ta cần tạo một đối tượng Adafruit_SSD1306.h. Hàm tạo Adafruit_SSD1306 chấp nhận số chân Arduino mà chân đặt lại của màn hình được kết nối. Vì màn hình OLED mà chúng tôi đang sử dụng không có chân ĐẶT LẠI, chúng tôi sẽ gửi -1 đến phương thức khởi tạo để không có chân Arduino nào được sử dụng làm thiết lập lại cho màn hình.

Adafruit_SSD1306 display(-1);

Trong chức năng thiết lập: chúng ta cần khởi tạo begin(chức năng sử dụng đối tượng OLED . Hàm nhận hai tham số. Tham số đầu tiên SSD1306_SWITCHCAPVCC BẬT mạch bơm sạc bên trong trong khi tham số thứ hai cung cấp địa chỉ I2C của màn hình OLED. Địa chỉ I2C của mô-đun màn hình OLED như vậy thường là 0x3C. Nó đã được sửa chữa và không thể thay đổi.

Tiếp theo, chúng tôi xóa bộ đệm trước khi in thông báo đầu tiên của chúng tôi trên màn hình.

// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer.
display.clearDisplay();

Hiển thị văn bản đơn giản (Hello World)

Hiển thị văn bản trên mô-đun Dsiplay OLED
// Display Text
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
Để hiển thị văn bản trên màn hình, chúng ta cần thiết lập kích thước phông chữ. Điều này có thể được thực hiện bằng cách gọi setTextSize()và chuyển kích thước phông chữ (bắt đầu từ 1) làm tham số.

Tiếp theo, chúng ta cần thiết lập màu chữ bằng chức năng gọi setTextColor(). Truyền tham số WHITE cho nền tối và vượt qua BLACK cho nền sáng. Bây giờ trước khi in thông báo, chúng ta cần đặt vị trí con trỏ bằng cách gọi hàm setCursor (X, Y). Các điểm ảnh trên màn hình được xác định bằng tọa độ ngang (X) và dọc (Y) của chúng. Hệ tọa độ đặt gốc tọa độ (0,0) ở góc trên cùng bên trái, với dương X tăng về bên phải và dương Y tăng xuống.

Chúng ta có thể sử dụng hàm simple print(" "or println(" ") để in thông báo trên màn hình giống như chúng ta in dữ liệu trên màn hình nối tiếp. Hãy nhớ rằng println () sẽ di chuyển con trỏ đến dòng mới.

Để thư viện thực hiện các phép toán cực nhanh trên bộ đệm màn hình (hơn 100 khung hình / giây), các lệnh gọi hàm in không chuyển ngay nội dung của bộ đệm màn hình sang bộ điều khiển SSD1306. Cần có display()lệnh để hướng dẫn thư viện thực hiện chuyển hàng loạt từ bộ đệm màn hình trong ATmega328P sang bộ nhớ trong của bộ điều khiển SSD1306. Ngay sau khi bộ nhớ đang được chuyển, các pixel tương ứng với bộ đệm màn hình sẽ hiển thị trên màn hình OLED.

Hiển thị Văn bản Đảo ngược

Hiển thị văn bản đảo ngược trên mô-đun Dsiplay OLED
// Display Inverted Text
display.clearDisplay();
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
Để hiển thị văn bản đảo ngược, chúng tôi sẽ gọi setTextColor(FontColor,BackgroundColor)lại hàm. Nếu bạn đang chú ý, bạn biết chúng tôi chỉ truyền một tham số cho hàm này trước đó, nhưng bây giờ chúng tôi đang truyền hai tham số. Điều này có thể xảy ra vì một cái gì đó được gọi là quá tải hàm . Quá tải hàm là khả năng tạo nhiều hàm cùng tên nhưng có tập tham số khác nhau. Các lệnh gọi đến một hàm được nạp chồng sẽ chạy một triển khai cụ thể của hàm đó tùy thuộc vào các tham số được truyền vào.

Trong trường hợp của chúng tôi, việc vượt qua setTextColor(BLACK, WHITE) sẽ hiển thị văn bản màu đen trên nền được tô đầy.

Chia tỷ lệ kích thước phông chữ

Thay đổi kích thước phông chữ trên mô-đun Dsiplay OLED
// Changing Font Size
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0,24);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);

Trước đó trong hướng dẫn này, chúng tôi đã gọi setTextSize()hàm để đặt kích thước phông chữ và chuyển 1 làm tham số. Bạn có thể sử dụng chức năng này để chia tỷ lệ phông chữ bằng cách chuyển bất kỳ số nguyên không âm nào.

Các nhân vật được kết xuất theo tỷ lệ 7:10. Có nghĩa là, chuyển kích thước phông chữ 1 sẽ hiển thị văn bản ở 7 × 10 pixel mỗi ký tự, chuyển 2 sẽ hiển thị văn bản ở 14 × 20 pixel mỗi ký tự, v.v.

Thư viện Adafruit_GFX chịu trách nhiệm hiển thị phông chữ. Theo mặc định, phông chữ có khoảng cách đơn được chọn. Tuy nhiên, các phiên bản mới hơn của thư viện Adafruit GFX cung cấp khả năng sử dụng các phông chữ thay thế. Một số phông chữ thay thế đi kèm với thư viện, ngoài ra còn có khả năng thêm những phông chữ mới.

Hiển thị số

Hiển thị số trên mô-đun Dsiplay OLED
// Display Numbers
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,28);
display.println(123456789);
display.display();
delay(2000);

Các số có thể được hiển thị trên màn hình OLED chỉ bằng cách gọi print()hoặc println(chức năng. Việc triển khai quá tải các hàm này chấp nhận int 32-bit không dấu, vì vậy bạn chỉ có thể hiển thị các số từ 0 đến 4,294,967,295.

Chỉ định cơ sở cho số

Hiển thị HEX, Thập phân, OCT, Nhị phân trên Mô-đun Dsiplay OLED
// Specifying Base For Numbers
display.clearDisplay();
display.setCursor(0,28);
display.print("0x"); display.print(0xFF, HEX);
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)");
display.display();
delay(2000);

Hàm println(println(có tham số thứ hai tùy chọn chỉ định cơ sở (định dạng) để sử dụng; các giá trị được phép là BIN (nhị phân hoặc cơ số 2), OCT (bát phân hoặc cơ số 8), DEC(thập phân hoặc cơ số 10), HEX(thập lục phân hoặc cơ số 16). Đối với số dấu phẩy động, tham số này chỉ định số vị trí thập phân sẽ sử dụng. Ví dụ:

  • print (78, BIN) cho "1001110"
  • print (78, OCT) cho "116"
  • print (78, DEC) cho "78"
  • print (78, HEX) cho "4E"
  • println (1.23456, 0) cho "1"
  • println (1.23456, 2) cho "1.23"
  • println (1.23456, 4) cho "1.2346"

Hiển thị các ký hiệu ASCII

Hiển thị các ký hiệu ASCII trên mô-đun Dsiplay OLED
// Display ASCII Characters
display.clearDisplay();
display.setCursor(0,24);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);

Hàm println(println(gửi dữ liệu đến màn hình dưới dạng văn bản ASCII mà con người có thể đọc được trong khi write()hàm gửi dữ liệu nhị phân đến màn hình. Vì vậy, bạn có thể sử dụng chức năng này để hiển thị các ký hiệu ASCII. Trong ví dụ của chúng tôi gửi số 3 sẽ hiển thị biểu tượng trái tim.

Cuộn toàn màn hình

Toàn màn hình-Cuộn-Trên-OLED-Dsiplay-Mô-đun
// Scroll full screen
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();

Bạn có thể cuộn màn hình theo chiều ngang bằng cách gọi chức năng display.startscrollright()display.startscrollleftvà theo đường chéo bằng cách gọi display.startscrolldiagright(display.startscrolldiagleft(). Tất cả các hàm này chấp nhận hai tham số viz. trang bắt đầu và trang dừng. Tham khảo phần Bản đồ bộ nhớ OLED để biết giải thích về các trang. Vì có tám trang trong màn hình từ 0 đến 7, bạn có thể cuộn toàn bộ màn hình bằng cách cuộn tất cả các trang tức là chuyển các tham số 0x00 và 0x07.

Để ngừng cuộn màn hình, bạn có thể sử dụng chức năng display.stopscroll().

Phần cụ thể cuộn

Cuộn một phần của màn hình trên mô-đun Dsiplay OLED
// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);

Đôi khi chúng tôi không muốn cuộn toàn bộ màn hình. Bạn có thể làm điều đó bằng cách chuyển thông tin trang bắt đầu và trang dừng thích hợp cho các chức năng cuộn. Tham khảo phần Bản đồ bộ nhớ OLED để biết giải thích về các trang. Vì có tám trang trong màn hình từ 0 đến 7, bạn có thể cuộn một số phần của màn hình bằng cách chuyển các số trang cụ thể làm tham số.

Trong ví dụ của chúng tôi, chúng tôi đã chuyển cả hai tham số là 0x00. Thao tác này sẽ chỉ cuộn trang đầu tiên (8 hàng đầu tiên) của màn hình.

Mã Arduino - Bản vẽ cơ bản

Trong ví dụ này, chúng ta sẽ thử một số bản vẽ cơ bản. Bản phác thảo này thể hiện nhiều chức năng vẽ, bao gồm hình chữ nhật, hình chữ nhật tròn, hình tròn và hình tam giác. Hãy thử bản phác thảo và sau đó chúng ta sẽ mổ xẻ nó một cách chi tiết.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
void setup()
{
// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer.
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Rectangle");
display.drawRect(0, 15, 60, 40, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Rectangle");
display.fillRect(0, 15, 60, 40, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Round Rectangle");
display.drawRoundRect(0, 15, 60, 40, 8, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Round Rectangl");
display.fillRoundRect(0, 15, 60, 40, 8, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Circle");
display.drawCircle(20, 35, 20, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Circle");
display.fillCircle(20, 35, 20, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Triangle");
display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Triangle");
display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {}

Hầu hết mã (Bao gồm thư viện và hiển thị khởi tạo) giống như ví dụ mã trên, ngoại trừ các đoạn mã sau để vẽ các bản vẽ cơ bản.

Vẽ hình chữ nhật

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Rectangle");
display.drawRect(0, 15, 60, 40, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Rectangle");
display.fillRect(0, 15, 60, 40, WHITE);
display.display();
delay(2000);

Bạn có thể vẽ hình chữ nhật trên màn hình bằng cách sử dụng chức năng display.drawRect(). Hàm nhận năm tham số viz. Tọa độ X, tọa độ Y, Chiều rộng, Chiều cao và màu sắc. Trên thực tế, chức năng này vẽ hình chữ nhật rỗng với đường viền 1 pixel. Bạn có thể vẽ hình chữ nhật đầy bằng chức năng display.fillRect().

Vẽ hình chữ nhật tròn

Vẽ hình chữ nhật tròn trên mô-đun Dsiplay OLEDVẽ hình chữ nhật tròn đầy trên mô-đun Dsiplay OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Round Rectangle");
display.drawRoundRect(0, 15, 60, 40, 8, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Round Rectangl");
display.fillRoundRect(0, 15, 60, 40, 8, WHITE);
display.display();
delay(2000);

Bạn có thể vẽ hình chữ nhật tròn trên màn hình bằng cách sử dụng chức năng display.drawRoundRect(). Hàm này nhận các tham số tương tự như hàm drawRect () ngoại trừ một tham số bổ sung - Bán kính làm tròn góc. Trên thực tế chức năng này vẽ hình chữ nhật tròn rỗng với đường viền 1 pixel. Bạn có thể vẽ hình chữ nhật tròn đầy bằng chức năng display.fillRoundRect.

Vẽ vòng tròn

Vẽ vòng tròn trên mô-đun Dsiplay OLEDVẽ vòng tròn được lấp đầy trên mô-đun Dsiplay OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Circle");
display.drawCircle(20, 35, 20, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Circle");
display.fillCircle(20, 35, 20, WHITE);
display.display();
delay(2000);

Bạn có thể vẽ vòng tròn trên màn hình bằng cách sử dụng drawCircle()chức năng. Hàm nhận bốn tham số viz. Tọa độ X của tâm, tọa độ Y của tâm, bán kính và màu sắc. Hàm này vẽ hình tròn rỗng với đường viền 1 pixel. Bạn có thể vẽ vòng tròn đầy bằng fillCircle()chức năng.

Vẽ hình tam giác

Vẽ hình tam giác trên mô-đun Dsiplay OLEDVẽ tam giác đầy trên mô-đun Dsiplay OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Triangle");
display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Triangle");
display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
display.display();
delay(2000);

Bạn có thể vẽ hình tam giác trên màn hình bằng cách sử dụng hàm drawTriangle(). Hàm có bảy tham số viz. 3 tọa độ X & Y (x0, y0, x1, y1, x2 & y2) của các đỉnh của tam giác và màu sắc. (X0, y0) đại diện cho đỉnh trên cùng, (x1, y1) đại diện cho đỉnh bên trái và (x2, y2) đại diện cho đỉnh bên phải.

Hàm này vẽ hình tam giác rỗng với đường viền 1 pixel. Bạn có thể vẽ hình tam giác bằng cách sử dụng hàm fillTriangle().

Mã Arduino - Hiển thị Bitmap

Ví dụ cuối cùng này cho thấy cách vẽ hình ảnh bitmap vào Màn hình OLED. Điều này rất hữu ích để tạo ra các màn hình giật gân của logo công ty, tạo các hình vẽ hoặc chỉ tạo đồ họa vui nhộn để hiển thị thông tin. Sao chép mã sau, dán vào Arduino IDE và nhấp vào tải lên.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(-1);
// Bitmap of MarilynMonroe Image
const unsigned char MarilynMonroe [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf0, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xf1, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x02, 0x78, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfe, 0x03, 0x7c, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xfe, 0x01, 0xfe, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfd, 0xe0, 0x03, 0xff, 0xff, 0xfc, 0x00, 0xfe, 0x0f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x87, 0xe0, 0xff, 0xff, 0xfc, 0x00, 0x06, 0x07, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xf9, 0xff, 0xff, 0xfc, 0x00, 0x02, 0x07, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xc3, 0xc3, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xe0, 0x0c, 0x00, 0xe7, 0x81, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xe0, 0x02, 0x00, 0x02, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1e, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0x3f, 0xf8, 0x00, 0x18, 0x7f, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf8, 0x01, 0x80, 0x03, 0xfc, 0x3f, 0xfc, 0x00, 0x70, 0xfe, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x43, 0xff, 0xff, 0xf8, 0x7f, 0xf8, 0x00, 0x00, 0x7e, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xf0, 0xff, 0xfc, 0x00, 0x00, 0x7c, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xf1, 0xef, 0xf8, 0x00, 0x01, 0xfc, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe4, 0xff, 0xff, 0xff, 0xf3, 0x80, 0xa0, 0x00, 0x07, 0xfc, 0xaf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xec, 0x5f, 0xff, 0xff, 0xe7, 0xf0, 0x00, 0x00, 0x03, 0xfe, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xee, 0x7f, 0xff, 0xff, 0xc7, 0xf8, 0x00, 0x00, 0x03, 0xff, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xf7, 0xc7, 0xff, 0x06, 0x00, 0x03, 0xff, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x5f, 0xff, 0xc7, 0x07, 0xff, 0x80, 0x00, 0x07, 0xdb, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xee, 0xff, 0xff, 0x80, 0x03, 0xff, 0xc0, 0x00, 0x03, 0xc3, 0x0f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x98, 0x03, 0xff, 0xf8, 0x00, 0x07, 0xe0, 0x0f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xfc, 0x01, 0x07, 0xfc, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xcf, 0xef, 0xff, 0xff, 0xe1, 0xff, 0xfc, 0x01, 0x07, 0xf8, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0xf8, 0x02, 0x07, 0x88, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xcf, 0xef, 0xf8, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x07, 0x84, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe7, 0xef, 0xf0, 0x04, 0x7f, 0xff, 0xc0, 0x00, 0x07, 0x84, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xff, 0xe0, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x06, 0x04, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x7f, 0xe1, 0xf0, 0x07, 0xff, 0x80, 0x00, 0x07, 0x06, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xfe, 0x03, 0xff, 0x00, 0x00, 0x03, 0x80, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf2, 0x3f, 0xc6, 0x7f, 0x81, 0xce, 0x00, 0x00, 0x01, 0xc1, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe0, 0x3f, 0xc0, 0x07, 0xc1, 0xfe, 0x00, 0x00, 0x0d, 0xc0, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe0, 0x3f, 0xc0, 0x01, 0xe0, 0xfc, 0x00, 0x00, 0x0f, 0xc0, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0x00, 0x50, 0xfc, 0x00, 0x00, 0x0e, 0xc0, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0x00, 0x18, 0xf8, 0x00, 0x00, 0x0e, 0xc1, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x66, 0x81, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x1f, 0xc7, 0x80, 0x00, 0xf8, 0x00, 0x01, 0xe0, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x1f, 0xc1, 0xe0, 0x01, 0xf8, 0x00, 0x03, 0xf0, 0x01, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x1f, 0xc0, 0x3e, 0x03, 0xf0, 0x00, 0x00, 0xe0, 0x03, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0xe0, 0x03, 0xf2, 0x00, 0x00, 0xc0, 0x03, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x1f, 0xf0, 0x00, 0x07, 0xe6, 0x00, 0x00, 0xc0, 0x03, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0x00, 0x1f, 0xee, 0x00, 0x00, 0x80, 0x07, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xb8, 0x0f, 0xff, 0xf0, 0x3f, 0xdc, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xbc, 0x0f, 0xff, 0xff, 0xff, 0xdc, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x9e, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x08, 0x0f, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x0b, 0xff, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x0b, 0xff, 0xff, 0xf9, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3c, 0x09, 0xff, 0xff, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1e, 0x08, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1f, 0x08, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xce, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff
};
void setup()
{
// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer.
display.clearDisplay();
// Display bitmap
display.drawBitmap(0, 0, MarilynMonroe, 128, 64, WHITE);
display.display();
// Invert Display
//display.invertDisplay(1);
}
void loop() {}

Đây là cách đầu ra trông như thế nào.

Hiển thị hình ảnh bitmap trên mô-đun Dsiplay OLED
Để hiển thị hình ảnh bitmap trên màn hình OLED, chúng ta cần gọi hàm drawBitmap(). Nó có sáu tham số viz. Tọa độ góc trên bên trái X, tọa độ Y góc trên bên trái, mảng byte của bitmap đơn sắc, chiều rộng của bitmap tính bằng pixel, chiều cao của bitmap tính bằng pixel và Màu sắc.

Trong ví dụ của chúng tôi, hình ảnh bitmap có kích thước 128 × 64. Vì vậy, tọa độ X & Y được đặt thành 0 trong khi chiều rộng & chiều cao được đặt thành 128 & 64.

// Display bitmap
display.drawBitmap(0, 0,  MarilynMonroe, 128, 64, WHITE);
display.display();

Tuy nhiên, trước khi có thể gọi hàm drawBitmap (), trước tiên chúng ta cần một hình ảnh để vẽ. Hãy nhớ rằng, độ phân giải màn hình của màn hình OLED là 128 × 64 pixel, vì vậy hình ảnh lớn hơn sẽ không hiển thị chính xác. Để có được một hình ảnh có kích thước chính xác, bạn có thể sử dụng các chương trình vẽ yêu thích của mình như Inkscape, Photoshop, Paint, v.v., đặt kích thước canvas thành 128 × 64 pixel.

Chúng tôi lấy hình ảnh Marilyn Monroe đang cười làm ví dụ và chuyển đổi thành 128 × 64 pixel bằng Paint và lưu dưới dạng .bmp.

Marilyn Monroe
Marilyn Monroe 128x64

Sau khi bạn có một bitmap, đã đến lúc chuyển đổi nó thành một mảng mà bộ điều khiển OLED SSD1306 có thể hiểu được. Điều này có thể được thực hiện bằng hai cách: Phương pháp trực tuyến sử dụng image2cpp và Phương pháp ngoại tuyến sử dụng Trợ lý LCD.

Trình tạo mảng bitmap trực tuyến - image2cpp

Có một ứng dụng trực tuyến tên là image2cpp - http://javl.github.io/image2cpp/ có thể chuyển đổi hình ảnh của bạn thành một mảng. Image2cpp mới hơn và mạnh hơn nhiều so với LCD Assistant (giải pháp mới hơn). Nó sẽ cho phép bạn:

  • Chuyển đổi nhiều hình ảnh đồng thời.
  • Chia tỷ lệ tệp hình ảnh của bạn - Kéo dài / Mở rộng để vừa vặn / Bản gốc
  • Điều chỉnh ngưỡng Độ sáng giữa màu đen và trắng.
  • Căn giữa hình ảnh theo chiều dọc và / hoặc chiều ngang.
  • Đảo ngược màu sắc hình ảnh

Công cụ này mạnh đến mức nó có thể hoạt động ngoại tuyến. Chỉ cần lưu trang vào PC của bạn và mở nó trong trình duyệt của bạn. Cảm ơn Jasper van Loenen vì những đóng góp xuất sắc của anh ấy.

Để bắt đầu, hãy mở image2cpp trong trình duyệt của bạn và chọn bất kỳ hình ảnh nào bạn muốn hiển thị trên màn hình OLED.

Chọn hình ảnh - image2cpp Bitmap sang Công cụ chuyển đổi trực tuyến mảng dữ liệu

Kích thước hình ảnh của bạn sẽ nằm trong tùy chọn kích thước Canvas bên dưới Cài đặt hình ảnh. Nếu bạn đã chọn hình ảnh lớn hơn 128 × 64, hãy thay đổi nó thành 128 × 64 và chọn tùy chọn Tỷ lệ thích hợp. Bạn có thể xem kết quả trong phần Xem trước.

Bạn có thể thay đổi Màu nền hoặc Đảo ngược màu ảnh nếu cần.

Cuối cùng, thay đổi tùy chọn quan trọng nhất - Ngưỡng độ sáng theo yêu cầu của bạn. Việc đặt ngưỡng sẽ làm cho các pixel trên mức này có màu trắng và bên dưới là màu đen. Trong trường hợp của chúng tôi, chúng tôi đã đặt nó thành 171 để có được những chi tiết đẹp về Marilyn Monroe.

Cài đặt hình ảnh - image2cpp Bitmap sang Công cụ chuyển đổi trực tuyến mảng dữ liệu

Bản xem trước nhỏ này phản ánh bất kỳ thay đổi nào bạn thực hiện trong cài đặt của mình. Bạn có thể thay đổi cài đặt trong khi theo dõi nó.

Xem trước hình ảnh - image2cpp Bitmap sang Công cụ chuyển đổi trực tuyến mảng dữ liệu

Khi bạn hài lòng với kết quả, bạn có thể tiến hành tạo mảng dữ liệu. Đơn giản chỉ cần chọn Định dạng đầu ra mã là Mã Arduino và nhấp vào nút Tạo mã.

Chỉ để biết thông tin của bạn, có một tùy chọn được gọi là Chế độ vẽ. Nó thực sự tạo ra hình ảnh theo kiểu quét của màn hình. Nếu hình ảnh của bạn trông lộn xộn trên màn hình, hãy thử thay đổi chế độ.

Tạo đầu ra - image2cpp Bitmap sang Công cụ chuyển đổi trực tuyến mảng dữ liệu

Đó là nó. Mảng byte của bitmap của bạn sẽ được tạo. Bạn có thể sử dụng đầu ra trực tiếp với mã ví dụ của chúng tôi. Chỉ cần chắc chắn để đặt tên nó một cách thích hợp. Sau đó, gọi mảng của bạn bên trong drawBitmap()hàm.

Đầu ra mã Arduino - image2cpp Bitmap sang Công cụ chuyển đổi trực tuyến mảng dữ liệu

Trình tạo mảng bitmap ngoại tuyến - Hỗ trợ LCD

Có một ứng dụng khác được gọi là trợ lý LCD - http://en.radzio.dxp.pl/bitmap_converter/ có thể chuyển đổi hình ảnh bitmap của bạn thành mảng dữ liệu. Nó không mạnh như image2cpp nhưng vẫn được những người yêu thích.

Để bắt đầu, bạn cần chuyển đổi hình ảnh của mình thành bitmap đơn sắc 128 × 64 1-bit. Bạn có thể sử dụng các chương trình vẽ yêu thích của mình như Inkscape, Photoshop, Paint, v.v. để thực hiện, giống như chúng ta đã làm trong MS paint.

Mở tệp của bạn trong MS Paint và thay đổi kích thước thành 128 × 64.

Bây giờ, hãy lưu tệp của bạn dưới dạng bitmap. Trong khi lưu tệp, chọn Lưu dưới dạng: Bitmap đơn sắc (*. Bmp; *. Dib). Điều này sẽ tạo ra hình ảnh bitmap 1-bit / nhị phân chỉ có hai giá trị khả dĩ cho mỗi pixel tức là 0 (đen) hoặc 1 (trắng).

Nhược điểm duy nhất ở đây là bạn không thể đặt mức ngưỡng độ sáng. Nó được đặt thành 50% theo mặc định và không thể thay đổi.

Dù sao bây giờ, hãy tải xuống chương trình trợ lý LCD. Mở tệp thực thi và tải tệp bitmap của bạn từ menu Tệp.

Bạn không thể làm gì nhiều với công cụ này. Vì vậy, chỉ cần vào menu File và nhấp vào tùy chọn Save output. Lưu tệp dưới dạng tệp văn bản.

Chỉ để biết thông tin của bạn, có một tùy chọn được gọi là Định hướng Byte. Nó thực sự tạo ra hình ảnh theo kiểu quét của màn hình. Nếu hình ảnh của bạn trông lộn xộn trên màn hình, hãy thử thay đổi chế độ.

Lưu đầu ra của Trợ lý LCD

Đó là nó. Với mảng của bạn đã tạo, hãy dán nó vào mã của bạn.

Chỉ cần chắc chắn để đặt tên nó một cách thích hợp. Sau đó, gọi mảng của bạn bên trong hàm drawBitmap().

Nguồn: https://lastminuteengineers.com