#include <Wire.h>
#include <MPU6050.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <Ultrasonic.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
MPU6050 mpu;
const int ledPin = 12;
const int oneWireBus = 2; // DS18B20 data pin
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
RTC_DS1307 rtc;
#define TRIGGER_PIN 10
#define ECHO_PIN 11
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.initialize();
pinMode(ledPin, OUTPUT);
sensors.begin();
// Initialize OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Initialize RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Verify connection
Serial.println("Testing MPU6050 connection...");
Serial.println(mpu.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
// Initialize sensor
mpu.initialize();
// Clear the display buffer
display.clearDisplay();
}
void loop() {
// Read accelerometer and gyroscope values
int16_t ax, ay, az;
int16_t gx, gy, gz;
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// Print values to the OLED display
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("accel(x,y,z)= ");
display.print(ax); display.print(", ");
display.print(ay); display.print(", ");
display.println(az);
display.print("gyro(x,y,z)= ");
display.print(gx); display.print(", ");
display.print(gy); display.print(", ");
display.println(gz);
// Read temperature
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
display.print("Temp: ");
display.print(temperatureC);
display.println(" C");
// Read current time
DateTime now = rtc.now();
display.print("Time: ");
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
display.println();
// Read distance from HC-SR04 sensor
unsigned int distance = ultrasonic.read();
display.print("Dis: ");
display.print(distance);
display.println(" cm");
if(distance <= 120)
{
display.print("Smthng nrby");
}else if(distance <= 340)
{
display.print("be aware");
}else{
display.print("safe");
}
// Display the data on the OLED
display.display();
digitalWrite(ledPin, HIGH); // Turn the LED on
delay(1000); // Wait for 1 second
digitalWrite(ledPin, LOW); // Turn the LED off
delay(1000);
delay(1000);
}