#define ECHO_PIN 3
#define TRIG_PIN 2
#define BUZZ_PIN 5
#define LED_PIN 7
#define PIR_PIN 1
#include <Servo.h>
Servo myServo;
int potpin = 0;
int val = 0;
float readDistanceCM(){
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, HIGH);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
Serial.begin(115200);
pinMode(BUZZ_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
myServo.attach(9);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(readDistanceCM());
int distance = readDistanceCM();
val = digitalRead(PIR_PIN);
if (distance < 100 && val == LOW){ //Servo akan membuka pintu apabila objek terdeteksi pada jarak kurang dari 100 cm
myServo.write(0);
tone(BUZZ_PIN, 100);
digitalWrite(LED_PIN, LOW);
delay(200);
} else if (distance > 100 && val == HIGH){ //Servo akan menutup pintu apabila jarak objek lebih dari 100 cm,
//dan akan menyalakan lampu apabila terdeteksi oleh sensor PIR.
myServo.write(90);
noTone(BUZZ_PIN);
digitalWrite(LED_PIN, HIGH);
delay(250);
} else if (val == HIGH){ // LED akan tetap menyala selama ada orang di dalam.
myServo.write(90);
noTone(BUZZ_PIN);
digitalWrite(LED_PIN, HIGH);
delay(250);
}else { // Lampu led akan mati, dan pintu akan menutup apabila tidak ada orang pada ruangan.
myServo.write(90);
noTone(BUZZ_PIN);
digitalWrite(LED_PIN, LOW);
delay(250);
}
}