#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_MPU6050.h>
// Cấu hình màn hình OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Cấu hình MPU6050
Adafruit_MPU6050 mpu;
void setup() {
// Khởi động Serial Monitor
Serial.begin(115200);
while (!Serial);
// Khởi tạo giao tiếp I2C
Wire.begin();
// Khởi động màn hình OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Không tìm thấy màn hình OLED!"));
while (true);
}
// Khởi động MPU6050
if (!mpu.begin(0x68)) {
Serial.println("Không tìm thấy MPU6050!");
while (true);
}
// Xóa màn hình OLED và hiển thị thông báo khởi động
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Bat dau...");
display.display();
delay(2000); // Hiển thị thông báo khởi động
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Hiển thị giá trị gia tốc trên Serial Monitor
Serial.print("Gia toc X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.println(a.acceleration.z);
// Hiển thị giá trị gia tốc trên màn hình OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Gia toc MPU6050:");
display.setCursor(0, 10);
display.print("X: ");
display.print(a.acceleration.x);
display.setCursor(0, 20);
display.print("Y: ");
display.print(a.acceleration.y);
display.setCursor(0, 30);
display.print("Z: ");
display.print(a.acceleration.z);
display.setCursor(0, 50);
if (abs(a.acceleration.x) > abs(a.acceleration.y)) {
display.print("Nghieng: X cao hon Y");
} else if (abs(a.acceleration.x) < abs(a.acceleration.y)) {
display.print("Nghieng: Y cao hon X");
} else {
display.print("Can bang");
}
display.display();
delay(1000); // Cập nhật dữ liệu mỗi giây
}