Hallo liebe Gemeinschaft,
Ich hab jetzt schon viele Sketches für den Arduino geschrieben und irgendwie kam ich bei Problemen immer zu einer Lösung. Hier komme ich aber nicht mehr weiter.
Mein Problem ist folgendes: Ich möchte eine Schleife durch eine if Abfrage nur einmal durchlaufen. Dazu benutze ich eine boolean Variable mit dem Namen flg_1. Bei der Variablendefinition setze ich den Wert für flg_1 auf LOW.
Dann lasse ich - aus anderen Gründen - in void setup() eine for Schleife laufen, die mir den Array h komplett mit dem Wert 40 füllt. Diese Schleife scheint aber meine Variable flg_1 zu beeinflussen, sie nimmt plötzlich den Wert 40 an. Das ist mir völlig schleierhaft.
Weiterhin ist es völlig seltsam, dass der Serial.print Befehl in Zeile 33 Einfluss auf den Programmablauf hat. Wenn ich diesen auskommentiere, tritt dieser Fehler nicht auf.
Was mich noch mehr irritiert ist, dass keine Ausgabe über den Serial Monitor erfolgt, wenn ich Zeile 24 (Stunde = 18) auskommentiere.
Ich benutze die IDE 1.8.19 auf einem PC mit Windows 10. Mich würde mal interessieren, ob Ihr dieses seltsame Verhalten auf Euren Rechnern nachvollziehen könnt und ob jemand eine Erklärung zu diesem Problem hat.
Liebe Grüße
Wolfgang
[code]
/* Fehler if Abfrage 8.10.24
* flg_1 wird ungewollt manipuliert.
* Dadurch wird die Bedingung für die if Abfrage nicht erfüllt
*/
int h[32];
int Stunde;
int n;
boolean flg_1 = LOW;
void setup() {
Serial.begin(9600);
Serial.print("flg_1: ");
Serial.println(flg_1);
for(n=0; n<=32; n++){ //Dieser Teil manipuliert ungewollt flg_1
h[n] = 40; //Der Wert von flg_1 wird auf 40 gesetzt, obwohl das nirgens steht.
}
Serial.print("flg_1: ");
Serial.println(flg_1);
Serial.println();
}
void loop() {
Stunde = 18; //Wenn diese Zeile auskommentiert wird, wird nichts mehr gedruckt
Serial.println("Ausdruck_1");
Serial.print("flg_1: ");
Serial.println(flg_1);
Serial.println();
if (Stunde==18 and flg_1 == LOW){
flg_1 = HIGH;
Serial.println("Ausdruck_2");
Serial.print("h[31]: ");
Serial.print(h[31]); //Wenn diese Zeile auskommentiert wird, tritt der Fehler nicht auf
Serial.print("\t flg_1: ");
Serial.println(flg_1);
Serial.println();
}
delay(3000);
}
[/code]
Hi combie,
vielen Dank für Deine schnelle Rückmeldung. Toll, dass Du Dich um mein Problem kümmerst. Bereichsüberschreitung ist eine schlüssige Erklärung. Aber warum < und <= soviel Unterschied macht verstehe ich noch nicht. Auch den Befehl "for(int v:h)v=40;" verstehe ich nicht so ganz.
Ich werde das mal Morgen an ein paar Beispielen testen. Auf jeden Fall bin jetzt schon mal froh, in welche Richtung ich weiter suchen muß um solche Fehler zu vermeiden.
LG Wolfgang
Meine Güte combie, vielen Dank für Deine Hilfe. Jetzt ist mir wirklich geholfen. Schön, dass es diese Forum gibt.
Vielleicht kann ich ja irgendwann mal was zurück geben.