#define timeSeconds 10
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
#define LDR_PIN 34
const int led = 26;
const int motionSensor = 27;
const int trigPin = 5;
const int echoPin = 18;
unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;
boolean motion = false;
long duration;
float distanceCm;
float distanceInch;
// PIR Motion Sensor
void IRAM_ATTR detectsMovement() {
digitalWrite(led, HIGH);
startTimer = true;
lastTrigger = millis();
}
void setup() {
Serial.begin(115200);
// PIR Motion Sensor
pinMode(motionSensor, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
// HC-SR04 Ultrasonic Distance Sensor
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Photoresistor (LDR) Sensor
pinMode(LDR_PIN, INPUT);
}
void loop() {
// Photoresistor (LDR) sensor
int lightIntensity = analogRead(LDR_PIN);
Serial.print("Intensitas Cahaya: ");
Serial.println(lightIntensity);
// Logika LED berdasarkan intensitas cahaya
if (lightIntensity > 30) {
digitalWrite(led, HIGH); // Nyalakan LED jika intensitas cahaya tinggi
} else {
digitalWrite(led, LOW); // Matikan LED jika intensitas cahaya rendah
}
// HC-SR04 Ultrasonic Distance Sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = (duration * SOUND_SPEED) / 2;
distanceInch = distanceCm * CM_TO_INCH;
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);
// PIR Motion Sensor menyalakan LED
now = millis();
if ((digitalRead(led) == HIGH) && !motion) {
Serial.println("MOTION DETECTED!!!");
motion = true;
}
if (startTimer && (now - lastTrigger > (timeSeconds * 1000))) {
Serial.println("Motion stopped...");
digitalWrite(led, LOW);
startTimer = false;
motion = false;
}
delay(1000); // this speeds up the simulation
}