Ich habe ein kleines Projekt angefangen, inem ich aus dem Arudino eine kleine Kasse machen, bei der man den 1. und 2. Knopf benutzt um die Anzahl der zwei Getränke zu erhöhen. Der 3. dient dazu, den Preis eines Getränks zu ändern und der 4. dient als Reset, bei dem die insgesammt eingenommenen Bons gezählt werden.
Alles funktionierte einwandfrei, bis ich den Preisändernknopf eingebaut habe.
Wenn man den Knopf drückt ändert sich die Variable "na" von 0 auf 1, damit an den eingegeben Getränkemengen keine änderungen vorgenommen werden. Je öfter man auf den Knopf drückt, desto höher wird der Preis für das später ausgewählte Getränk. Wenn man drei mal auf den Knop gedrückt hat, müsste die Variable "neu" (neuer Preis) auf 2 stehen. Jetzt soll man den 1. oder 2. Knopf drücken, damit der Preis für das Getränk übernommen wird, aber kein Getränk auf die "Quittung" eingetragen wird. Danach setzt sich "na" auf 0 zurück, damit man Getränke auf die "Quittung" schreiben kann.
Ich wollte, dass auf dem Display angezeigt wird, wie hoch der Preis wird, dazu muss ich den rest erst ausblenden also habe ich versucht die normale anzeige auszublenden sobald "na" auf 1 ist. Also den Bildschirmteil in eine if oder while abfrage gepackt und gesagt das es angezeigt werden soll solange na = 0 ist. Es wird aber nichts auf dem Bildschirm angezeigt. wenn ich sage dass es angezeigt werden soll, wenn na = 1 ist dann wird was angezeigt, aber ich kann keine Veränderungen vornehmen.
Im serialmonitor wird mir angezeigt, dass na = 0 ist.
Eine If-Anweisung kennt nur ein boolsches Ergebnis. Entweder ist die Bedingung wahr, oder halt falsch.
Werte ungleich 0 sind immer wahr, Werte gleich 0 sind falsch.
if(i = 12) // ...;
Der Wert der Zuweisung i=12 ist ungleich 0 und somit wahr.
if(i = 0) // ...;
Hingegen ist i=0 nicht wahr.
Einen Fehler/Error muss die IDE bzw der Compiler nicht raushaufen dafür. Eine Warnung wäre aber keinesfalls unangebracht.
Visual Studio drückt sich bei sowas wie folgt aus:
suggest parentheses around assignment used as truth value
Manawyrm:
Warum heult der avr-gcc der Arduino-IDE dabei eig. nicht rum? Die meisten aktuellen C/C++ Compiler werfen bei sowas doch mindestens eine Warnung..
Weil die Arduino IDE alle Warnings unterdrückt.
Und "if(a=1)" ist ja auch ein gültiger C-Code, auch wenn wenig sinnvoll.
Grüße Uwe
Uh, ja, jetzt wo du es sagst, test ist natürlich != 1 :~
Da wird es dann etwas verwirrend da if(test) trotzdem als boolscher Ausdruck ausgewertet wird und dann true ist, da wie oben gesagt alles ungleich 0 true ist. Es sein denn man schreibt direkt == true
Geht ja doch! Danke für die Info (Karma+). Somit sollte das auch geklärt sein. Ob es vorteilhaft ist, dieses dauerhaft einzuschalten, sei mal dahingestellt. Da ich nicht glaube, dass jemand mit der Gcc Meldungen immer wirklich was anfangen kann 8)