#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
const int FAN_LED = 2;
const int LIGHT_LED = 4;
const int DOOR_LED = 5;
const int BUZZER = 18;
int16_t ax, ay, az;
bool fanOn = false;
bool lightOn = false;
bool doorOn = false;
bool buzzerOn = false;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
pinMode(FAN_LED, OUTPUT);
pinMode(LIGHT_LED, OUTPUT);
pinMode(DOOR_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
mpu.initialize();
if (mpu.testConnection()) {
Serial.println("STATUS:CONNECTED");
} else {
Serial.println("STATUS:FAILED");
while (1);
}
}
void loop() {
mpu.getAcceleration(&ax, &ay, &az);
// Fan control (Left / Right tilt)
if (ax < -10000) {
fanOn = true;
digitalWrite(FAN_LED, HIGH);
} else if (ax > 10000) {
fanOn = false;
digitalWrite(FAN_LED, LOW);
}
// Light control (Up / Down tilt)
if (ay > 12000) {
lightOn = true;
digitalWrite(LIGHT_LED, HIGH);
} else if (ay < -12000) {
lightOn = false;
digitalWrite(LIGHT_LED, LOW);
}
// Door: stable flat detection
doorOn = (abs(ax) < 1000 && abs(ay) < 1000 && abs(az - 16384) < 1000);
digitalWrite(DOOR_LED, doorOn ? HIGH : LOW);
// Shake detection → buzzer
buzzerOn = (abs(ax) > 15000 || abs(ay) > 15000 || abs(az - 16384) > 8000);
digitalWrite(BUZZER, buzzerOn ? HIGH : LOW);
// Send compact CSV line: DATA:ax,ay,az,fan,light,door,buzzer
Serial.print("DATA:");
Serial.print(ax); Serial.print(",");
Serial.print(ay); Serial.print(",");
Serial.print(az); Serial.print(",");
Serial.print(fanOn ? 1 : 0); Serial.print(",");
Serial.print(lightOn ? 1 : 0); Serial.print(",");
Serial.print(doorOn ? 1 : 0); Serial.print(",");
Serial.println(buzzerOn ? 1 : 0);
delay(100);
}