#define LDR_PIN 2 // Your LDR digital pin
#define BUTTON_PIN 7 // Button input pin
#define LASER_PIN 6 // Laser control pin (output)
#define LED_PIN 5 // LED indicator pin
#define BUZZER_PIN 9 // Buzzer pin
bool laserOn = true; // Laser starts ON
bool lastButtonState = HIGH;
bool lastBeamState = HIGH; // to track changes and avoid flooding serial
void setup() {
pinMode(LDR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Button with pullup resistor
pinMode(LASER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LASER_PIN, HIGH); // Turn laser ON at start
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
Serial.begin(9600);
}
void loop() {
bool buttonState = digitalRead(BUTTON_PIN);
// Toggle laser on button press (detect LOW to HIGH transition)
if (buttonState == LOW && lastButtonState == HIGH) {
delay(1000); // debounce
laserOn = !laserOn;
digitalWrite(LASER_PIN, laserOn ? HIGH : LOW);
Serial.print("Laser turned ");
Serial.println(laserOn ? "ON" : "OFF");
}
lastButtonState = buttonState;
// Read LDR digital pin to detect beam break
int ldrState = digitalRead(LDR_PIN);
if (laserOn) {
if (ldrState == LOW) {
// Light detected (beam unbroken)
digitalWrite(LED_PIN, HIGH); // LED ON = safe
noTone(BUZZER_PIN); // Buzzer OFF
if (lastBeamState != LOW) {
Serial.println("Beam OK - Light detected");
lastBeamState = LOW;
}
} else {
// Dark detected (beam broken)
digitalWrite(LED_PIN, LOW); // LED OFF
tone(BUZZER_PIN, 1000); // Buzzer ON at 1000 Hz
if (lastBeamState != HIGH) {
Serial.println("Beam Broken - No light detected");
lastBeamState = HIGH;
}
}
} else {
// Laser OFF, turn off LED and buzzer
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
}