#include "WiFi.h"
#include <ESP32Servo.h>

const int trigPin = 14;
const int echoPin = 27;
const int ledPin = 2;
const int buzzerPin = 15;

Servo myservo;

void setup() {
  Serial.begin(9600);
  WiFi.mode(WIFI_STA);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  myservo.attach(12);  // Mengganti 6 dengan pin yang sesuai untuk servo

    Serial.println("Scan Wifi...");
  int networks = WiFi.scanNetworks();
  if(networks == 0){
    Serial.println("No WiFi Networks!");
  }else{
    Serial.print(networks);
    Serial.println(" Networks Found!");
    for(int i= 0; i < networks; i++){
      Serial.print("WiFi ke-");
      Serial.println(i+1);
      Serial.println(WiFi.SSID(i));
      Serial.println(WiFi.RSSI(i));
      delay(10);
    }
  }
}

void loop() {
  // Mengirim sinyal ultrasonik
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Menerima sinyal pantul
  long duration = pulseIn(echoPin, HIGH);
  // Menghitung jarak
  int distance = duration * 0.034 / 2;

  Serial.print("Jarak: ");
  Serial.println(distance);

  // Jika jarak setengah meter, aktifkan LED, buzzer, dan gerakan servo
  if (distance <= 50) {
    digitalWrite(ledPin, HIGH);
    tone(buzzerPin, 1000, 500);
    myservo.write(90);  // Putar servo ke posisi 90 derajat
    delay(1000);
  } else {
    digitalWrite(ledPin, LOW);
    noTone(buzzerPin);
    myservo.write(0);  // Putar servo ke posisi 0 derajat
  }

  delay(1000);  // Tunggu 1 detik sebelum mengukur jarak lagi
}