#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Chiều rộng màn hình OLED
#define SCREEN_HEIGHT 64 // Chiều cao màn hình OLED
// Khai báo địa chỉ I2C của màn hình OLED
#define OLED_RESET -1 // Không cần chân reset với ESP32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
String inputString = ""; // Chuỗi để lưu dữ liệu nhập từ Serial
void setup() {
// Khởi tạo Serial Monitor để kiểm tra thông tin
Serial.begin(9600);
// Khởi động màn hình OLED với địa chỉ I2C 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Không khởi động được OLED"));
for (;;); // Dừng chương trình nếu không kết nối được
}
// Hiển thị khởi động trên màn hình trong 2 giây
display.display();
delay(500); // Đợi 0.5 giây để hiển thị
// Hiển thị dòng chữ "Hello, I2C!" khi khởi động
display.clearDisplay();
display.setTextSize(2); // Kích thước chữ
display.setTextColor(SSD1306_WHITE); // Màu trắng
display.setCursor(0, 10); // Đặt vị trí chữ bắt đầu từ (0, 10)
display.print("Hello, I2C!");
display.display(); // Cập nhật màn hình với nội dung mới
delay(2000); // Đợi 2 giây trước khi chuyển sang chế độ nhập từ Serial
// Xóa màn hình để chuẩn bị hiển thị văn bản mới
display.clearDisplay();
display.display();
}
void loop() {
// Kiểm tra nếu có dữ liệu được gửi tới từ Serial Monitor
if (Serial.available() > 0) {
// Đọc dữ liệu từ Serial Monitor
inputString = Serial.readStringUntil('\n'); // Đọc cho đến khi gặp dấu xuống dòng
// Xóa nội dung trên màn hình trước khi hiển thị nội dung mới
display.clearDisplay();
// Hiển thị nội dung đã nhập lên OLED
display.setTextSize(2); // Kích thước chữ nhỏ để hiển thị được nhiều nội dung hơn
display.setTextColor(SSD1306_WHITE); // Màu trắng
display.setCursor(0, 10); // Đặt vị trí chữ bắt đầu từ (0, 10)
// In chuỗi nhập từ Serial lên OLED
display.print(inputString);
display.display(); // Cập nhật màn hình với nội dung mới
// In chuỗi vừa nhập lên Serial Monitor (kiểm tra)
Serial.println("Hiển thị: " + inputString);
}
}