#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
#define FRONT_LEFT_LED 3
#define FRONT_RIGHT_LED 4
#define REAR_LEFT_LED 5
#define REAR_RIGHT_LED 6
#define TURN_BUTTON 7
bool isTurn = false;
bool isSkidding = false;
int16_t ax, ay, az; // Accelerometer readings (int16_t instead of float)
int16_t gx, gy, gz; // Gyroscope readings (int16_t instead of float)
void setup() {
Serial.begin(9600);
pinMode(FRONT_LEFT_LED, OUTPUT);
pinMode(FRONT_RIGHT_LED, OUTPUT);
pinMode(REAR_LEFT_LED, OUTPUT);
pinMode(REAR_RIGHT_LED, OUTPUT);
pinMode(TURN_BUTTON, INPUT_PULLUP); // Assuming a button with a pull-up resistor
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println("MPU6050 connection failed");
while (1); // Halt the program if MPU6050 connection fails
}
}
void loop() {
mpu.getAcceleration(&ax, &ay, &az); // Get accelerometer data
mpu.getRotation(&gx, &gy, &gz); // Get gyroscope data
isTurn = digitalRead(TURN_BUTTON) == LOW; // Detect turn when button is pressed
// Simple logic for detecting skidding based on changes in acceleration or rotation
if (abs(gy) > 10000 || abs(gz) > 10000) { // High gyroscope values suggest sharp turns/skidding
isSkidding = true;
} else {
isSkidding = false;
}
if (isTurn && isSkidding) {
activateBrakes(); // Apply brakes if skidding is detected
} else {
releaseBrakes(); // Release brakes if no skidding
}
delay(100); // Delay for stability in readings
}
void activateBrakes() {
digitalWrite(FRONT_LEFT_LED, HIGH);
digitalWrite(FRONT_RIGHT_LED, HIGH);
digitalWrite(REAR_LEFT_LED, HIGH);
digitalWrite(REAR_RIGHT_LED, HIGH);
Serial.println("Skidding detected! Brakes applied.");
}
void releaseBrakes() {
digitalWrite(FRONT_LEFT_LED, LOW);
digitalWrite(FRONT_RIGHT_LED, LOW);
digitalWrite(REAR_LEFT_LED, LOW);
digitalWrite(REAR_RIGHT_LED, LOW);
Serial.println("Brakes released.");
}