#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
Adafruit_MPU6050 mpu;
Adafruit_SSD1306 display(128, 64, &Wire);
const int trigPin = 5;
const int echoPin = 18;
long duration;
float distance;
void setup(void) {
Serial.begin(115200);
// Inisialisasi MPU6050
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
// Inisialisasi OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.display();
// Set pin untuk HC-SR04
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
sensors_event_t event;
float getUltrasonicDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
return distance;
}
void loop() {
mpu.getGyroSensor()->getEvent(&event);
distance = getUltrasonicDistance();
Serial.print("Gyro [X: ");
Serial.print(event.gyro.x);
Serial.print(", Y: ");
Serial.print(event.gyro.y);
Serial.print(", Z: ");
Serial.print(event.gyro.z);
Serial.print("] rad/s, ");
Serial.print("Ultrasonic Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Tampilkan data ke OLED
display.clearDisplay();
// Tampilkan data Gyroscope
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Gyro X: ");
display.print(event.gyro.x, 2);
display.setCursor(0, 10);
display.print("Gyro Y: ");
display.print(event.gyro.y, 2);
display.setCursor(0, 20);
display.print("Gyro Z: ");
display.print(event.gyro.z, 2);
// Tampilkan data Ultrasonik
display.setCursor(0, 30);
display.print("Distance: ");
display.print(distance);
display.print(" cm");
display.display();
delay(500);
}