const byte hupePin = 2;
const byte lichtschrankePin = 10;
byte LS_State;
byte LS_lastState;
bool LS_flanke_HIGH_LOW = false;
unsigned long startHupe; // Variable für ZeitStempel Wann hat hupen angefangen
unsigned long hupeEinschaltZeit = 500; // Zeit in ms!
#define LS_unterbrochen LOW
#define Einschalten HIGH
#define Ausschalten LOW
void setup() {
pinMode (hupePin, OUTPUT);
pinMode (lichtschrankePin, INPUT);
}
void loop() {
LS_State = digitalRead(lichtschrankePin);// IO-pin status einlesen und speichern
if (LS_lastState != LS_State) { // prüfe ob sich IO-pin status geändert hat
// WENN sich IO-pin-Status geändert hat
if (LS_State == LS_unterbrochen) { // prüfe ob NEUER Zustand Lichtschranke unterbrochen ist
// WENN Lichtschranke unterbrochen ist
LS_flanke_HIGH_LOW = true; // setze Flankenmerker
}
LS_lastState = LS_State; // nach dem Vergleich if (LS_lastState != LS_State) LS_lastState aktualisieren
}
if (LS_flanke_HIGH_LOW) { // prüfe ob es eine HIGH_LOW-FLANKE ist
// WENN es eine HIGH-LOW-Flanke ist
LS_flanke_HIGH_LOW = false; // flankenmerker zurücksetzen
startHupe = millis(); // aktuellen Zeitstempel speichern
digitalWrite(hupePin, Einschalten);
}
if (millis() - startHupe >= hupeEinschaltZeit) { // prüfe ob Hupe-Einschaltzeit vorbei ist
// WENN Hupe-Einschaltzeit vorbei ist
digitalWrite(hupePin, Ausschalten);
}
}