Problem mit Code

Hallo,

ich habe mit diesem Code folgendes Problem:

if (digitalRead(OUT6)==LOW)  {
	if (out6_on==false) {
		out6_on=true;
                Serial.println("  OUT6");
		
	}
	
 if (digitalRead(OUT6)==HIGH)  {
     out6_on=false;
    }	

Wenn OUT6 LOW wird und bleibt, soll die Schleife einmal durchlaufen werden.
Dazu setze ich das Bit out6_on auf true.
Wenn dann OUT6 wieder HIGH wird, wird out6_on false und das Spiel kann von vorne beginnen.
Das Ganze geht aber nur einmal, weil out_on nicht mehr false wird.
Es läuft auf einem ESP32 C3.

Was ist denn hier falsch???

Bitte verändere Deinen Beitrag, so daß man ihn vernüftig lesen und verstehen kann!

Du musst halt an geeigneter Stelle deine Variable wieder auf false setzen.
Zeige uns den kompletten Sketch in Code-Tags, dann können wir auch weiter helfen.

Die Variable ou6_on wird doch wieder auf false gesetzt....

Der ganz Sketch hat 1200 Zeilen, ich glaub das wäre bisschen viel...

Anhan deines gezeigten Teils ist kein Fehler zu lokalisieren.
Dann solltest du deinen Sketch soweit kürzen, dass er nur den Fehler aufzeigt.

Nein.

Wenn Du STRG-T drückst, passiert etwas.
Bei mir dann das:

  if (digitalRead(OUT6) == LOW)
  {
    if (out6_on == false)
    {
      out6_on = true;
      Serial.println("  OUT6");
    }
    if (digitalRead(OUT6) == HIGH)
    {
      out6_on = false;
    }
  }

Siehst Du, was ich sehe?

Verwirrend :wink:

Ich würde eine Doppel-Abfrage machen mit AND

Gruß

Pucki

Und Du meinst, das ist nicht verwirrend?

Nein, ist nicht verwirrend

Wobei ich nicht weiß ob " out6_on" eine Funktion hat, oder eine Hilfs-Variable ist.

Fakt ist aber durch AND abfragen schafft man ca. 40% der verschalteten IF Abfragen weg.
Das ist grundsätzlich in jeder Sprache so. Weshalb ich halt lieber eine Hilfs-Variable nutze.

Eleganter sind dann noch Switch Case Abfragen. :wink:

Gruß

Pucki

Nein!
Selbst in C++ ist das nicht (immer) so.

Vielleicht magst du ja if, auch sogar komplizierte Bedingungen.
Ich nicht.
Ein Leben ohne diese ist viel schöner.
Viel flacher
Gradliniger.
Weniger Denken, weniger Irrtümer.

Und wenn Du davon 4 mit 3 Variablen hast, musst Du erstmal nachdenken, warum die eine oder andere Stelle im Code nicht mehr funktioniert.
Hatte ich grade die Tage.
Und ich kann eigentlich ganz gut mit mehreren Variablen umgehen.

Jeden das Seine.

Ich mag halt sauber Blöcke.

Besonders wenn die Verschachtelungen über 20 Bildschirmseiten gehen.

Gruß

Pucki

Habs gefunden...
Eine Klammer falsch gesetzt.

Danke euch.

Passiert sehr oft bei tiefen Verschachtelungen. :wink:

Gruß

Pucki

Solche dämlichen Sprüche zeigen, wie weit Dein Horizont reicht.

Quatsch.

Das war kein dummer Spruch.

Das bedeutete nur, das JEDER so Programmieren sollten, das er weiß was er tut, und nach 20 Jahren noch durch ein guten Code durchblickt.

Gruß

Pucki

Nein es war eine Klammer falsch gesetzt.
Und: Jeder programmiert halt bissel anders, wobei soviel anders ist deine Variante ja auch nicht...

Gruß

Das ordentilche Einrücken ist in C /C++ nicht notwendig (anders ist es in Python) . Man kann sogar den ganzen Sketch in eine Zeile schreiben.
Ordentliches einrücken wie es STRG+T automatisch in der ArduinoIDE macht macht die Blockbildung mit {} besser sichtbar und man findet leichter Fehler bei denen Sketchteile in der falschen Bedingung hängen.

Grüße Uwe

Es ging auch nicht ums einrücken als solches.
Aber wenn man immer mal wieder dafür sorgt, dass der Code durchformatiert wird, dann sieht man - so wie hier - dass Mensch sich vertan hat :slight_smile:

@my_xy_projekt mein Post war nicht an Dich gerichtet sondern an den TO. Ich wollte Dich nur zitieren und die Sache besser erklähren.
War nicht achtsam.
Grüße Uwe