Bài viết này sẽ hướng dẫn các bạn cách cách hiển thị lên SSD1306 OLED Arduino bằng cách sử dụng Arduino IDE. Chúng tôi sẽ trình bày về cách viết một đoạn text, chỉnh phông chữ, vẽ hình khối và hiển thị hình ảnh bitmaps trên đó.
Mục lục
Giới thiệu về màn hình OLED Arduino:
Màn hình Oled 0.96 inch giao tiếp I2C cho khả năng hiển thị đẹp, sang trọng, rõ nét vào ban ngày và khả năng tiết kiệm năng lượng tối đa với mức chi phí phù hợp, màn hình sử dụng giao tiếp I2C cho chất lượng đường truyền ổn định và rất dễ giao tiếp chỉ với 2 chân GPIO.
Thông số kỹ thuật:
- Hỗ trợ cả 3.3V và 5V
- Số điểm hiển thị: 128×64 điểm.
- Độ rộng màn hình: 0.96 inch
- Màu hiển thị: Trắng / Xanh Dương.
- Giao tiếp: I2C
- Driver: SSD1306
- Tương thích với chuẩn cắm plug & play 4 pin Blocky Piece
CÁC THIẾT BỊ CẦN CÓ:
- Màn hình Oled 0.96 inch
- Board Node Wifi 32
- Dây cắm
KẾT NỐI PHẦN CỨNG
Màn hình oled Arduino có nhiều loại và có 2 chuẩn kết nối chính là SPI và I2C. Màn hình Oled chúng ta sử dụng trong bài này sử dụng giao thức I2C bao gồm 2 dây là SCL và SDA.
Kết nối như sau:
CÀI ĐẶT THƯ VIỆN:
Cài đặt thư viện OLED: chúng tôi sử dụng bộ thư viện SSD1306 library của Adafruit.
Sau khi cài xong thư viện SSD1306 chúng ta cài tiếp thư viện GFX.
Test hiển thị Oled Arduino với Node Wifi32:
Trong Arduino IDE, vào File > Examples > Adafruit SSD1306 và chọn ví dụ như hình:
Nếu như Oled Arduino không có chân Reset thì bạn nên chỉnh giá trị OLED_RESET bằng -1 như bên dưới:
Biên dịch và nạp code, kết quả hiển thị trên Oled Arduino sẽ được như sau:
Nếu Oled Arduino không hiển thị được gì cả thì bạn hãy xem lại địa chỉ I2C:
Địa chỉ I2C mặc định của Oled Arduino là 0x3C
Hiển thị chữ “Hello, world!” lên Oled Arduino:
Nạp code
Nạp đoạn code sau vào Node Wifi 32:
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 10); // Display static text display.println("Hello, world!"); display.display(); } void loop() { }
Kết quả nhận được:
Giải thích Code:
Đầu tiên, ta khai báo thư viện bằng hàm sau:
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
Sau đó, định nghĩa độ phân giải của màn hình Oled Arduino. Oled ta sử dụng có độ phân giải là 128 x 64 pixels:
#define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels
Sau đó, khởi tạo đối tượng hiển thị với chiều rộng và chiều cao được xác định trước đó bằng giao thức I2C (& Wire):
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Trong hàm setup(), khởi tạo chức năng Serial, kiểm tra xem thử màn hình Oled Arduino đã được kết nối với ESP32 chưa, đúng địa chỉ chưa.
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); }
Chờ khoảng 2s để màn hình Oled Arduino có đủ thời gian để khởi tạo trước khi ghi:
delay(2000);
Sau khi khởi tạo, xóa bộ đệm hiển thị:
display.clearDisplay();
Cài font size sử dụng hàm display.setTextSize():
display.setTextSize(1);
Cài màu chữ sử dụng hàm display.setTextColor():
display.setTextColor(WHITE);
Đưa con trỏ đến vị trí cần ghi bằng hàm display.setCursor(x, y) với x là hàng còn y là cột:
display.setCursor(0, 10);
Hiển thị dòng chữ “Hello, world!” lên màn hình Oled Arduino:
display.println("Hello, world!"); display.display();
Scrolling Text:
Thư viện Adafruit OLED cung cấp những phương pháp hữu dụng dễ dàng scroll text:
- startscrollright(0x00, 0x0F): scroll text từ trái sang phải
- startscrollleft(0x00, 0x0F): scroll text từ phải sang trái
- startscrolldiagright(0x00, 0x07): scroll text từ góc dưới bên trái sang góc trên bên phải
- startscrolldiagleft(0x00, 0x07): scroll text từ góc dưới bên phải sang góc trên bên trái
Code:
#include#include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); // Display static text display.println("Scrolling Hello"); display.display(); delay(100); } void loop() { // Scroll in various directions, pausing in-between: display.startscrollright(0x00, 0x0F); delay(2000); display.stopscroll(); delay(1000); display.startscrollleft(0x00, 0x0F); delay(2000); display.stopscroll(); delay(1000); display.startscrolldiagright(0x00, 0x07); delay(2000); display.startscrolldiagleft(0x00, 0x07); delay(2000); display.stopscroll(); delay(1000); }
Sử dụng nhiều kiểu chữ khác nhau:
Thư viện Adafruit GFX cho phép chúng ta sử dụng một số phông chữ thay thế bên cạnh các phông chữ có sẵn. Mỗi phông chữ có sẵn in đậm, nghiêng và ở các kích cỡ khác nhau.
Kích thước được thiết lập bởi phông chữ thực tế. Vì vậy phương thức setTextSize() không hoạt động với các phông chữ này.
Bạn có thể chọn những phông chữ bên dưới:
Để sử dụng 1 trong những phông chữ trên thì bạn phải include nó trong sketch, ví dụ:
#include <Fonts/FreeSerif12pt7b.h>
Tiếp theo, bạn cần phải sử dụng hàm setFont():
display.setFont(&FreeSerif12pt7b);
Để sử dụng lại phông chữ ban đầu chỉ cần gọi lại hàm setFont() không đối số.
display.setFont();
Upload đoạn ví dụ sau để hiểu rõ hơn:
#include#include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println("SSD1306 allocation failed"); for (;;); } delay(2000); display.setFont(&FreeSerif9pt7b); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 20); display.println("Hello, world!"); display.display(); delay(2000); } void loop() { }
Bây giờ chữ “Hello, world!” đã được hiển thị với phông chữ FreeSerif trên màn hình Oled Arduino:
Vẽ hình trên Oled:
Vẽ 1 pixel
Để vẽ 1 pixel, bạn có thể dùng hàm drawPixel(x, y, color). Với x, y là vị trí mà pixel xuất hiện cùng với màu sắc của nó. Ví dụ:
display.drawPixel(64, 32, WHITE);
Vẽ 1 đường thẳng
Dùng hàm drawLine(x1, y1, x2, y2, color) để tạo 1 đường thẳng. x1,y1 là tọa độ điểm bắt đầu, x2,y2 là tọa độ điểm kết thúc của đường thẳng. Ví dụ:
display.drawLine(0, 0, 127, 20, WHITE);
Vẽ 1 hình chữ nhật
Hàm drawRect(x, y, width, height, color) cung cấp một cách dễ dàng để vẽ một hình chữ nhật với x,y là tọa độ góc trên cùng bên trái của hình chữ nhật với chiều rộng, chiều cao và màu sắc. Ví dụ:
display.drawRect(10, 10, 50, 30, WHITE);
Bạn có thể sử dụng hàm fillRect(x, y, width, height, color) để vẽ 1 hình chữ nhật được lấp đầy. Ví dụ:
Thư viện cũng cung cấp các hàm vẽ hình chữ nhật với góc được bo tròn như là: drawRoundRect() và fillRoundRect(). Các hàm này chấp nhận các đối số như các hàm trước đó cộng với bán kính của góc bo. Ví dụ:
display.drawRoundRect(10, 10, 30, 50, 2, WHITE);
Lấp đầy hình chữ nhật trên:
display.fillRoundRect(10, 10, 30, 50, 2, WHITE);
Vẽ 1 mình tròn
Để vẽ hình tròn chúng ta sử dụng hàm drawCircle(x, y, radius, color). Với x,y là vị trí tâm của đường tròn, radius là bán kính cùng với màu sắc của hình tròn. Ví dụ:
display.drawCircle(64, 32, 10, WHITE);
Cũng như các phương pháp trên, để lấp đầy hình tròn này chúng ta dùng hàm:
display.fillCircle(64, 32, 10, WHITE);
Vẽ 1 mình tam giác
Sử dụng hàm drawTriangle(x1, y1, x2, y2, x3, y3, color) để vẽ hình tam giác. x,y lần lượt là tọa độ 3 đỉnh của tam giác. Ví dụ:
display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE);
Để lấp đầy hình tam giác đó dùng hàm:
display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE);
Đảo ngược màu sắc
Thư viện cung cấp một phương thức bổ sung mà bạn có thể dùng với văn bản là invertDisplay(). Truyền True nếu muốn đảo ngược màu sắc của màn hình hoặc False để quay lại màu ban đầu:
display.invertDisplay(true);
Code:
#include#include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(5000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); // Draw a single pixel in white display.drawPixel(64, 32, WHITE); display.display(); delay(5000); // Draw line display.clearDisplay(); display.drawLine(0, 0, 127, 20, WHITE); display.display(); delay(5000); // Draw rectangle display.clearDisplay(); display.drawRect(30, 10, 50, 30, WHITE); display.display(); delay(5000); // Fill rectangle display.fillRect(30, 10, 50, 30, WHITE); display.display(); delay(5000); // Draw round rectangle display.clearDisplay(); display.drawRoundRect(10, 10, 30, 50, 2, WHITE); display.display(); delay(5000); // Fill round rectangle display.clearDisplay(); display.fillRoundRect(10, 10, 30, 50, 2, WHITE); display.display(); delay(5000); // Draw circle display.clearDisplay(); display.drawCircle(64, 32, 10, WHITE); display.display(); delay(5000); // Fill circle display.fillCircle(64, 32, 10, WHITE); display.display(); delay(5000); // Draw triangle display.clearDisplay(); display.drawTriangle(10, 10, 55, 20, 5, 40, WHITE); display.display(); delay(5000); // Fill triangle display.fillTriangle(10, 10, 55, 20, 5, 40, WHITE); display.display(); delay(5000); // Invert and restore display, pausing in-between display.invertDisplay(true); delay(5000); display.invertDisplay(false); delay(5000); } void loop() { }
Hiển thị hình ảnh Bitmap trên Oled:
Bạn có thể hiển thị hình ảnh bitmap đơn sắc 128 x 64 trên màn hình Oled. Sau đây, OhStem sẽ hướng dẫn bạn:
Trước tiên, sử dụng một phần mềm để điều chỉnh kích thước của ảnh và lưu nó dưới dạng monologue bitmap. Nếu trên máy tính Windows, bạn có thể sử dụng Paint.
Sau đó bạn lưu hình lại với đuôi .bmp (monologue bitmap)
Cài đặt phần mềm LCD Image Converter.
Link lcd-image-converter download | SourceForge.net
Mở phần mềm ra và chọn ảnh, chúng ta sẽ có giao diện
Vào Image → Import import hình đã thay đổi kích thước trước đó
Vào Options → Conversion vào mục Prepare chọn như hình:
Mục Image chọn:
Sau khi chọn Oke, vào mục File → Convert. File sau khi convert có đuôi .c
Copy đoạn mã array vào được code như bên dưới:
#include#include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); static const uint8_t image_data_Saraarray[1024] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x14, 0x9e, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x6d, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xfb, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xd7, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xef, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xdf, 0xff, 0x90, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xbf, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1d, 0x7f, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x1b, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x02, 0xa7, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0x80, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0x07, 0xff, 0xf8, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0e, 0x01, 0xff, 0xc0, 0x38, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1c, 0x46, 0xff, 0xb1, 0x18, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0x97, 0xff, 0xc0, 0x7a, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xdc, 0xff, 0xfa, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xf5, 0xff, 0xd7, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x00, 0x0f, 0xfb, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xfd, 0xff, 0xdf, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x67, 0xff, 0xe0, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40, 0x00, 0x00, 0xf3, 0xff, 0xc4, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00, 0xfc, 0xff, 0x8c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0x3c, 0x3c, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x7c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff }; void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); // Pause for 2 seconds // Clear the buffer. display.clearDisplay(); // Draw bitmap on the screen display.drawBitmap(0, 0, image_data_Saraarray, 128, 64, 1); display.display(); } void loop() { }
Sau khi upload code, kết quả nhận được như sau:
Tổng kết
Trên đây, OhStem đã hướng dẫn bạn những cách cơ bản để hiển thị lên màn hình Oled Arduino các loại ký tự, hình ảnh,… mà bạn thích. Bây giờ, bạn có thể áp dụng để màn hình Oled hiển thị những thứ bạn muốn. Rất đơn giản phải không nào?
Để xem tất cả các bài hướng dẫn về lập trình Arduino, bạn truy cập vào đây nhé: Tổng hợp các bài hướng dẫn về Arduino. Nếu bạn có bất kỳ ý kiến đóng góp hoặc thắc mắc gì, bạn có thể để lại comment phía dưới hoặc liên hệ với OhStem qua Fanpage để được hỗ trợ nhé