#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
// Pins für den Drehgeber
const int laserPin = 9; // Pin für die Laserdiode
const int ledPin = 10; // Pin für die Leuchtdiode
const int ldrPin = A0; // Pin für die Fotozelle
const int pin_vz_A = 2; // DT - Drehgeber für Verzögerung PIN A
const int pin_vz_B = 3; // CLK - Drehgeber für Verzögerung PIN B
const int pin_sw_A = 4; // DT - Drehgeber für Schwellenwert PIN A
const int pin_sw_B = 5; // CLK - Drehgeber für Schwellenwert PIN B
// Erstelle einen Encoder-Objekt
Encoder verzoegerung(pin_vz_A, pin_vz_B); // Drehgeber Verzögerung
Encoder schwelle(pin_sw_A, pin_sw_B); // Drehgeber Schwellenwert
// Erstelle ein LCD-Objekt
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD-Adresse (muss ggf. angepasst werden)
int verz = 300; // Anfangswert für Verzögerung
int sw = 200; // Anfangswert für Schwellenwert
int previousVerz;
int previousSw;
uint32_t previousMillis;
void setup() {
pinMode(laserPin, OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(laserPin, HIGH); // Laserdiode einschalten
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("VZ-Wert:");
lcd.setCursor(0, 1);
lcd.print("SW-Wert:");
updateDisplay();
}
void loop() {
long pos1 = verzoegerung.read(); // Lese die Encoder-Position
// Berechne den neuen Wert in 5er-Schritten
if (pos1 % 5 == 0) {
verz = constrain(pos1 + 300, 0, 1000); // Begrenze den Wert auf 0 - 1 Sekunden
updateDisplay();
}
long pos2 = schwelle.read(); // Lese die Encoder-Position
// Berechne den neuen Wert in 5er-Schritten
if (pos2 % 5 == 0) {
sw = constrain(pos2 + 150, 0, 1000); // Begrenze den Wert auf 0 - 1 Sekunden
updateDisplay();
}
int sensorValue = analogRead(ldrPin);
if (analogRead(ldrPin) > sw) { // Bestätige die Unterbrechung
delay(verz); // Warte die eingestellte Verzögerung ab
digitalWrite(ledPin, HIGH); // LED einschalten
delay(1000); // Warte die eingestellte Verzögerung ab
digitalWrite(ledPin, LOW); // LED ausschalten
}
}
// Funktion zum Aktualisieren des Displays
void updateDisplay() {
// Erste Zeile für Verzögerung
lcd.setCursor(9, 0); // Setze den Cursor auf die zweite Zeile
lcd.print(" "); // Leere Zeile
lcd.setCursor(9, 0); // Setze den Cursor wieder auf die zweite Zeile
lcd.print(verz); // Zeige den aktuellen Wert an
// Zweite Zeile für Schwellenwert
lcd.setCursor(9, 1); // Setze den Cursor auf die zweite Zeile
lcd.print(" "); // Leere Zeile
lcd.setCursor(9, 1); // Setze den Cursor wieder auf die zweite Zeile
lcd.print(sw); // Zeige den aktuellen Wert an
}