Hallo Leute,
ich checke grad nicht was in meinem primitiven Code falsch läuft.
Versuche in einer Dauerschleife den Zustand eines Button abzufragen und bei einer Änderung(1 oder 0) eine einmalige Aktion auszuführen. Diese Aktion sollte aber nicht jedem Schleifendurchgang wiederholt werden sondern nur ein Mal bei der jeweiligen Zustandänderung auf 1 oder auf 0.
const int buttonPin = 2; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
int lastState = 0;
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println("... neue Runde ...");
buttonState = digitalRead(buttonPin); //aktuellen Zustand merken
digitalWrite(LED_BUILTIN, buttonState); //Zustand durch LED anzeigen
while (lastState != buttonState) //bei Zustandänderung
{
if (buttonState == LOW) Serial.println("Zustand geändert: 0"); // hier ne einmalige Aktion Tor_0;
if (buttonState == HIGH) Serial.println("Zustand geändert: 1"); // hier ne einmalige Aktion Tor_1;
}
lastState=buttonState; //letzter Zustand = aktueller Zustand
}
Wenn ich nun Die Pinne "D2" und "GND" verbinde passiert nix. Die (built_in)LED zeigt keine Reaktion und im Seriellen Monitor läuft nur "... neue Runde..." aber nicht "Zustand geändert: 0/1"
Hintergrund der ganzen Geschichte. Ich habe ein Tor dessen Lichtshranke ich abfragen weill. Wenn die Lichtschranke auf/zu meldet, soll das einmalig über Ethernet(enc28j60) gemeldet werden. Aber das ist ne andere Baustelle.
Kann mir eine/r nen Tip geben was ich anders machen soll.
Irgendwie scheint das setzen der Variable "buttonState" nicht richtig zu funzen.
Ach ja, ich nutze einen original Arduino Nano.
Parameter in der IDE:
Board: "Arduino Nano", Prozessor: "ATmega328P", Programmer: "ArduinoISP"