#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>

#define ALARM_LED_PIN 14
#define KEY_SWITCH_PIN 13
#define BUZER_PIN 12

#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)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_MPU6050 mpu;

float pich = 0;

void setup() {
  pinMode(ALARM_LED_PIN, OUTPUT);
  digitalWrite(ALARM_LED_PIN, LOW);

  pinMode(KEY_SWITCH_PIN, INPUT_PULLUP);
  pinMode(BUZER_PIN, OUTPUT);
  digitalWrite(BUZER_PIN, LOW);

  Serial.begin(115200);

  // Initialize with the I2C addr 0x3D (for the 128x64)
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }

  while (!mpu.begin()) {
    Serial.println("MPU6050 not connected!");
    delay(1000);
  }
  Serial.println("MPU6050 ready!");

  display.clearDisplay();
  display.setTextSize(1);           
  display.setTextColor(SSD1306_WHITE);      
  display.setCursor(0,0); 
  display.println("Welcome!");
  display.display();
  delay(100);

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
  Serial.println("+-2G");
  break;
  case MPU6050_RANGE_4_G:
  Serial.println("+-4G");
  break;
  case MPU6050_RANGE_8_G:
  Serial.println("+-8G");
  break;
  case MPU6050_RANGE_16_G:
  Serial.println("+-16G");
  break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
  Serial.println("+- 250 deg/s");
  break;
  case MPU6050_RANGE_500_DEG:
  Serial.println("+- 500 deg/s");
  break;
  case MPU6050_RANGE_1000_DEG:
  Serial.println("+- 1000 deg/s");
  break;
  case MPU6050_RANGE_2000_DEG:
  Serial.println("+- 2000 deg/s");
  break;
  }
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
  Serial.println("260 Hz");
  break;
  case MPU6050_BAND_184_HZ:
  Serial.println("184 Hz");
  break;
  case MPU6050_BAND_94_HZ:
  Serial.println("94 Hz");
  break;
  case MPU6050_BAND_44_HZ:
  Serial.println("44 Hz");
  break;
  case MPU6050_BAND_21_HZ:
  Serial.println("21 Hz");
  break;
  case MPU6050_BAND_10_HZ:
  Serial.println("10 Hz");
  break;
  case MPU6050_BAND_5_HZ:
  Serial.println("5 Hz");
  break;
  }
  Serial.println("");
  delay(100);

}



void loop() {
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  /* Print out the values */
  Serial.print("Acceleration X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");
  Serial.print("Rotation X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" deg/s");
  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");
  Serial.println("");
  
  if  (!digitalRead(KEY_SWITCH_PIN) == LOW) {
    Serial.println("key off"); //key is turn to off
    delay(1500);
    digitalWrite(ALARM_LED_PIN, HIGH);
    delay(1000);
    digitalWrite(ALARM_LED_PIN, LOW);

    if (g.gyro.x > pich) {
      Serial.println("ok pich / buzer");
      digitalWrite(BUZER_PIN, HIGH);
    }
    
  } else {
    Serial.println("key on"); //key is turn to on
    digitalWrite(BUZER_PIN, LOW);
    pich = g.gyro.x;
  }




  display.clearDisplay(); // Clear the display buffer
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.print("Ready");

  display.setTextSize(1);
  display.setCursor(0, 10);
  display.print(temp.temperature);
  display.print(" C");

  display.display(); // Display the content in the buffer
  delay(2000); // Pause for 2 seconds
}
Loading
ssd1306