In meiner Modifikation Deines Scetchs ging es um eine LED
Also habe ich auch eine Merkvariable eingeführt.
int ledtogglestate = LOW; //Blink LED State
Bei drei verschiedenen LEDs muss man folglich auch die Zustände mit 3 Merkvariablen händeln.
int led1togglestate = LOW;
int led2togglestate = LOW;
int led3togglestate = LOW;
Da eine Variable die nur LOW und HIGH kennt nur die zwei Zustände einer LED darstellen kann.
Auch vergleiche ich nirgendswo den Zustand der Merkvariable mit einem Eingang.
Ich habe am Anfang die Variable definiert und den Startzustand festgelegt.
Danach wird ja nur noch der aktuelle Zustand der Merkvariablen verglichen und wenn er LOW ist auf HIGH gesetzt und umgekehrt.
Da der Programmteil immer nur aufgerufen wird wenn die Kartennummer stimmt, wird bei jedem richtigen Erkennen der Nummer einmal der Zustand gewechselt.
Wenn also das Lesegerät eine Karte beim Davor halten mehrfach einliest, dann Toggelt die LED auch dauernd.
Ein Delay an der Stelle ist allerdings nicht schön.
Der Programmteil macht ja das was er soll.
Eigentlich liegt die Baustelle beim Einlesen der Werte vom Kartenleser.
Dort kommt normalerweise eine Verriegelung rein.
Wird die Kartennummer erkannt, gibt man sie Weiter und speichert sie. Bei jeder neu eingelesenen Nummer wird diese mit der gespeicherten verglichen.
Sind sie identisch verwirft man den neuen Wert.
Damit ist es egal ob jemand die selbe Karte 2 Sekunden oder 10 Minuten vor den Sensor hält.
Das kannst Du mit einem starren Delay niemals hinbekommen.
Lesezeichen