#include <ESP32Servo.h>
#include <Adafruit_MPU6050.h>
#define LED 13
#define PIR 15
#define PWM 12
#define RELAY 15
#define SWITCH 13
#define BUZZ 14
#define ECHO 2
#define TRIG 4
Servo servo;
Adafruit_MPU6050 mpu;
void setup() {
Serial.begin(115200);
if(!mpu.begin(0x69)){
Serial.println("Failed to start MPU");
while(1);
}
Serial.println("TUGAS WOKWI !");
Serial.println("Hello, A2 - HENDRI HANANTA WAHYU WIBOWO");
pinMode(LED, OUTPUT);
pinMode(PIR, INPUT);
servo.attach(PWM);
pinMode(SWITCH, INPUT_PULLUP);
pinMode(RELAY, OUTPUT);
pinMode(BUZZ, OUTPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
int val = 0;
int pirState = LOW;
void readMPU(){
sensors_event_t data_acc, data_gyro, temp;
mpu.getEvent(&data_acc, &data_gyro,&temp);
data_acc.acceleration.x += 20;
data_acc.acceleration.z += 1000; // menambahkan agar ke detik
delay(data_acc.acceleration.z); // Data Z untuk atur delay
if(data_acc.acceleration.x < 20){ // jika x kurang dari 20 saat di atur ke minus maka dikurangi 20 agar balik ke 0
data_acc.acceleration.x -= 20;
servo.write(data_acc.acceleration.x); // menggerakan servo dengan hasil data X
}
servo.write(data_acc.acceleration.x); // menggerakan servo dengan hasil data X
}
void relayTest(){
int value = digitalRead((SWITCH));
if (value == 0){
digitalWrite(RELAY, HIGH);
}else{
digitalWrite(RELAY, LOW);
}
}
void testRotation(){
for(int pos=0; pos <=180; pos += 1){
servo.write(pos); // perintah untuk menggerakan servo
delay(15);
Serial.println(pos);
}
for(int pos=180; pos >=0; pos -= 1){
servo.write(pos);
delay(15);
Serial.println(pos);
}
}
void pirLED(){
val = digitalRead(PIR);
if (val == HIGH){
digitalWrite(LED, HIGH);
if(pirState == LOW){
Serial.println("Gerakan terdeteksi");
pirState = HIGH;
}
}else{
digitalWrite(LED, LOW);
if(pirState == HIGH){
Serial.println("Gerakan tidak terdeteksi");
pirState = LOW;
}
}
}
void buzzbuzz(){
tone(BUZZ, 150);
delay(1000);
noTone(BUZZ);
delay(1000);
tone(BUZZ, 100, 1000);
delay(2000);
}
float readDistanceCM() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
int duration = pulseIn(ECHO, HIGH);
return duration * 0.034 / 2;
}
void loop() {
readMPU();
// put your main code here, to run repeatedly:
// testRotation();
// relayTest();
// float distance = readDistanceCM();
// if (distance < 120){
// servo.write(0);
// noTone(BUZZ);
// }else{
// servo.write(90);
// Serial.println("lewat");
// buzzbuzz();
// }
// Serial.println(distance);
}