Befehl in Loop nur 1 mal ausführen mit flags

Hallo zusammen!

Ich möchte über den Seriellen Port Daten an ein Nextion Display senden und zwar wenn am Pin 5V anliegen soll er 1 mal etwas an das Display senden und wenn 5V NICHT anliegen soll er wieder 1 mal was anderes an das Display senden.

Hier dazu ein kleiner Versuchsaufbau im Vorfeld:

const int sig = 2;

bool flag = false;

void setup() {
  Serial.begin(9600);
  pinMode(sig, INPUT);
}

void loop() {
  if (flag == false && digitalRead(sig) == HIGH) {
    Serial.println("HIGH");
    flag = true;
  }
  if (flag == true && digitalRead(sig) == LOW) {
    Serial.println("LOW");
    flag = false;
  }
}
  1. Wenn ich jetzt den Seriellen Monitor starte erhalte ich am Anfang gar nichts -> Soweit OK

  2. Ich gebe an meinen Pin 2 5V und erhalte 1 mal "HIGH" -> PERFEKT

  3. Ich nehme die 5V wieder weg und erhalte aber das hier:

LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW

Ich erhalte immer das selbe, immer dieselbe Anzahl von Zeilen und das jedes mal, gebe ich wieder 5V drauf erhalte ich richtigerweise wieder 1 mal "HIGH", gebe ich die 5V weg erhalte ich wieder das selbe wie oben.

Ich weis nicht welchen Fehler ich mache, daher bitte ich um hilfe.

Vielen dank im Voraus.

Wie ist dein Input-Pin beschalten?
Ein Schaltplan wäre günstig.

s-fr:
3. Ich nehme die 5V wieder weg und erhalte aber das hier:

Was bedeutet "nehme ich die 5V wieder weg"?
Welche Spannung liegt an deinem Input-Pin, wenn "nichts" anliegt?
Möglicherweise hängt dein Input-Pin "in der Luft" und hat deshalb keine definierte Spannung. Eine definierte Spannung ist nötig um die gewünschten Ergebnisse zu erhalten.
Wahrscheinlich brauchst du einen Pullup- oder Pulldown-Widerstand.

Du kannst auch versuchen statt

pinMode(sig, INPUT);

das zu verwenden:

pinMode(sig, INPUT_PULLUP);

Die if-Abfragen musst du dann entsprechend anpassen.

Falls du einen Taster oder Schalter am Input-Pin hast, oder ein loses Kabel, bedenke, dass Phänomen "Prellen".

s-fr:
Ich weis nicht welchen Fehler ich mache, daher bitte ich um hilfe.

Ohne viel nachgedacht zu haben, tippe ich auf fehlenden Pullup-/Pulldown-Widerstand. Der Pin „sig“ bekommt statt „keine 5 Volt“ einfach „gar nichts“ (auch kein GND). Schalte einen Widerstand (ich benutze üblicherweise 4,7 oder 10 kOhm) zwischen „sig“ und GND.

Gruß

Gregor

gregorss:
Ohne viel nachgedacht zu haben, tippe ich auf fehlenden Pullup-/Pulldown-Widerstand. Der Pin „sig“ bekommt statt „keine 5 Volt“ einfach „gar nichts“ (auch kein GND). Schalte einen Widerstand (ich benutze üblicherweise 4,7 oder 10 kOhm) zwischen „sig“ und GND.

Gruß

Gregor

Genau das war der Fehler, bei einem Pinloch am Breadboard war kein Kontakt mehr zum Arduino, anderes Loch verwendet und es funktioniert wies soll!

Vielen dank!