Hallo Leute, ich bin neu hier im Forum und auch grundsätzlich noch recht neu
beim Thema Arduino-Programmierung.
Ich habe in der Vergangenheit viel mit Bascom programmiert und auch einige Projekte damit umgesetzt.
Ich versuche mich aktuell am ersten Projekt mit Arduino,
bin jetzt aber an einem Punkt angekommen wo ich den Fehler nicht finde.
Ich hoffe dass ihr mir vielleicht weiterhelfen könnt.
Mein Problem ist aktuell, dass ich von Delay auf millis umgestellt habe um
die Schaltzeiten eines Ventils zu steuern, doch selbst 2h herumprobieren
bringt mir keine Verzögerung in die Steuerung.
Ich habe daher heute einfach mal ein ganz einfaches Programm geschrieben
um die Millis-Auswertung zu testen, doch selbst das funktioniert nicht.
Alles was ich mit Verzögerung ausführen will, wird ohne Verzögerung ausgeführt.
Kann mir vielleicht jemand sagen was ich falsch mache?
Hier der Code:
long unsigned int messIntervall = 1000; // In welchen Abständen soll aktualisiert werden?
long unsigned int messtimerStart = 0; // Startwert setzen für Aktualisierung
byte zaehler = 0;
void setup() {
Serial.begin(115200); // seriellen Monitor starten
}
void loop() {
if (millis()-messtimerStart >= messIntervall); { // Wenn Verzögerung abgelaufen ist
messtimerStart = millis();
zaehler=zaehler+1;
Serial.print(zaehler); // Textausgabe im seriellen Monitor
Serial.println(""); // sendet einen Zeilenumbruch
}
}
Na das nenne ich mal schnelle Problemlösung!
Ein etwas größerer Textschnipsel hätte es schon sein dürfen,
aber bei dem kleinen Programm hab ich diesen ja trotzdem schnell gefunden.
@combie
das Semikolon war tatsächlich der Grund für die Fehlfunktion,
vielen Dank für deine Unterstützung.
Ich bin halt noch Anfänger was Arduino betrifft und in allen
HowTo´s für Anfänger wird das Semikolon nicht mal erwähnt.
Mir war nur aufgefallen, dass am Ende jeder Befehlszeile ein Semikolon stehen muss.
den Zusammenhang kenne ich aktuell nicht. Gibt es da eine Definition für?
Selbst Fehlermeldungen erscheinen (Geschweifte Klammer erwartet vor Semikolon) wenn mal irgendwo ein Semikolon fehlt......
Ich bedanke mich recht herzlich für die Hilfe in nahezu Echtzeit
Ein SemiKolon beendet eine Zeile.
Im Falle eines IF beendet dieses die IF Bedingung und darf darum nicht dort stehen.
Ein Semikolon braucht es auch im FOR.
Jedes C++ Grundlagenbuch erklärt dir die Zusammenhänge.
(evtl. gibts auch das ein oder andere gute online Manual)
Und ja, das Leben wird deutlich einfacher, wenn man die Sprache beherrscht, welche man verwendet.
An der if Abfrage hängen immer diese { } Klammern. was zwischen diesen Klammern steht wird ausgeführt, wenn die if Abfrage wahr ist. Wenn du am Ende der If Abfrage diesen Semikolon setzt, hat das in den geschweiften Klammern nichts mehr mir der if Abfrage zu tun. Das wird dann immer ausgeführt, egal ob die if Abfrage zutrifft oder nicht.
Nach dem for(), oder if() wird eine Anweisung erwartet, wobei auch mehrere Anweisungen zu einem Block (Anweisungsblock) zusammengefasst werden dürfen/können.
Bemerke: Auch eine leere Anweisung ist eine gültige Anweisung.
Tipp:
Ein aktivieren der Warnung -Wempty-body hätte den Irrtum ans Licht gebracht
Es ist nur eine Warnung, weil eben eine leere Anweisung erlaubt ist.