#define TRIG_PIN 10
#define ECHO_PIN 11
#define IR_PIN 12
#define SWITCH_PIN 15
#define BUTTON_PIN 16
#define LED_PIN 18
#define BUZZER_PIN 19
unsigned long previousMillis = 0;
const long interval = 2000;
bool lightOn = false;
long readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
long distance = duration * 0.034 / 2;
return distance;
}
void beep() {
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(BUZZER_PIN, LOW);
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(IR_PIN, INPUT);
pinMode(SWITCH_PIN, INPUT_PULLUP);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
Serial.println("AutoLume System Ready");
}
void loop() {
long distance = readDistance();
int irState = digitalRead(IR_PIN);
int systemSwitch = digitalRead(SWITCH_PIN);
int button = digitalRead(BUTTON_PIN);
if (systemSwitch == LOW) {
if (button == LOW) {
beep();
lightOn = !lightOn;
digitalWrite(LED_PIN, lightOn);
delay(500);
}
if (distance > 0 && distance < 50 && irState == HIGH && !lightOn) {
beep();
digitalWrite(LED_PIN, HIGH);
lightOn = true;
Serial.println("Presence detected - Light ON");
previousMillis = millis();
}
if ((distance >= 50 || distance == 0) && irState == LOW && lightOn) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
beep();
digitalWrite(LED_PIN, LOW);
lightOn = false;
Serial.println("No presence - Light OFF");
}
} else {
previousMillis = millis();
}
}
else {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
lightOn = false;
previousMillis = millis();
}
delay(50);
}