#include <Servo.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Servo myServo;
Adafruit_MPU6050 mpu;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define PIN_TRIG1 2
#define PIN_ECHO1 3
#define PIN_TRIG2 4
#define PIN_ECHO2 5
#define PIN_TRIG3 6
#define PIN_ECHO3 7
#define PIN_LED 13
#define PIN_SERVO 9
#define PIN_BTN 8
int getDis(int PIN_TRIG, int PIN_ECHO) {
// Start a new measurement:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Read the result:
int duration = pulseIn(PIN_ECHO, HIGH)/58;
// Serial.print("Distance in CM: ");
//Serial.println(duration / 58);
return duration;
}
void setup() {
Serial.begin(115200);
myServo.attach(PIN_SERVO);
myServo.write(0);
pinMode(PIN_BTN, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_TRIG1, OUTPUT);
pinMode(PIN_ECHO1, INPUT);
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO2, INPUT);
pinMode(PIN_TRIG3, OUTPUT);
pinMode(PIN_ECHO3, INPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Hello, Wokwi!");
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
}
void loop() {
mpu.getAccelerometerSensor()->getEvent(&event);
Serial.print("[");
Serial.print(millis());
Serial.print("] X: ");
Serial.print(event.acceleration.x);
Serial.print(", Y: ");
Serial.print(event.acceleration.y);
Serial.print(", Z: ");
Serial.print(event.acceleration.z);
Serial.println(" m/s^2");
//读取距离
int dis1 = getDis(PIN_TRIG1, PIN_ECHO1);
int dis2 = getDis(PIN_TRIG2, PIN_ECHO2);
int dis3 = getDis(PIN_TRIG3, PIN_ECHO3);
if (dis1 < 15 || dis2 < 15 || dis1 < 15) { //距离小于有障碍
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
}else{
if(digitalRead(PIN_BTN)==0){
//Serial.print("ddddd");
myServo.write(90); //开门
delay(1000);
myServo.write(0); //开门
}
}
}