Hallo Experten, ich bin gerade dabei mich mit dem Ardulino zu beschäftigen bzw. das programmieren eines solchen zu erlernen. Dabei gehe ich Schritt für Schritt ein Handbuch mit Code Beispielen durch.
Jetzt bin ich gerade bei der If Verzweigung und verstehe nicht ganz warum der Ardulino so reagiert.
void loop()
{
Serial.println(x);
if(x==10)
{
Serial.println(" x ist jetzt 10");
while (1);
}
x++;
}
Meine Frage:
Warum bleibt das Programm stehen nachdem ausgegeben wurde, dass x den Wert 10 erreicht hat.
Ich habe das so verstanden, dass das Programm in "void loop" eine Endlosschleife ist und dann müsste, zumindest meiner Ansicht nach, x um 1 erhöht werden und in der nächsten Zeile "11" ausgeben.
Tut es aber nicht. Im Anhang findet Ihr die tatsächliche Ausgabe.
Ich hätte noch eine Frage, ich kann (ein bisschen) VB und da gibt es so Funktionen wie Haltepunkt setzen und Schritt für Schritt weiter springen mit Variablenüberwachung, gibt es so etwas auch in der Ardulino IDE?
Das würde sowohl das Debugen als auch das Erlernen um vieles erleichtern.
nur mit Schuss durchs knie.
du müsstest an die Serielle jeweils alles ausgeben das dich interessiert und anschließend auf ein Zeichen an der Seriellen Schnittstelle warten (Serial.available).
Stand der Technik hier:
Serial.print Testausgaben, um zu sehen, was wie abläuft.
Nächste Frage: Arduino - Simulation auf PC
Ähnliche Antwort: Gibt was, aber vergiss es.
Falls du noch den Ausdruck "Arduino - Sprache" im Kopf hast:
Du schreibst deinen Sketch in C++. Bist also nicht auf die Arduino - Referenzen beschränkt.
Danke für Eure Antworten, falls ich mal wieder Fragen habe... und das wird sicher passieren weiß ich wohin ich mich wenden kann. Hier in diesem Forum wird einen wirklich und vor allem rasch geholfen.
Für größere Projekte setze ich immer eine boolesche Variable , z.B. "_debug" auf true/false. Zusätzlich schreibe ich einige Funktionen in mein Projekt, die sich bezüglich des Types von wert unterscheiden (int, String, bool usw.). Beispiel:
void int_debug(String bez, int wert)
{
if (_debug)
{
Serial.print(bez+": ");
Serial.prinln(wert);
}
}
Im Programmcode dann der Aufruf an geeigneter Stelle. Ist das Projekt fertig, wird nur die Variable _debug im Kopf auf false gesetzt, die nunmehr unwirksamen Ausgaben bleiben drin.
#define DEBUG //Uncomment for Debug.
#ifdef DEBUG //Macros are usually in all capital letters.
#define DBGPRINT(...) Serial.print(__VA_ARGS__) //DBGPRINT is a macro, debug print
#define DBGPRINTLN(...) Serial.println(__VA_ARGS__) //DBGPRINTLN is a macro, debug print with new line
#else
#define DBGPRINT(...) //now defines a blank line
#define DBGPRINTLN(...) //now defines a blank line
#endif
Das hab ich mir mal von einer anderen quelle kopiert. Weiß nicht mehr von wo. Finde es am einfachsten, weil man nicht so viel tippen muss.
bin hin und wieder ein freund, wenn man als fremder auch auf dem ersten blick versteht, was der code beschreibt.
sp und spn sind da schon wirklich schwer.
Wenn man selber diese Definitionen kreiert hat, muß man ja nicht umdenken.
So schlimm finde ich die 'Tipp-Arbeit' nun aber auch nicht - viel schlimmer wird Es, wenn man mehrere Varianten, wie Oben Die mit dem formatierten Text, verwenden will.
Und: Man muß statt Serial.print DebugPrint (oder sonst was) tippen - DA habe ich die meisten 'Aussetzer'
@harryberlin
Ich bin ein Freund von großen Buchstaben und Interpunktion - so verschieden kann's sein.
(das Argument der Zeitersparnis hatten wir schon - wurde aber als Ausrede interpretiert, da Shift drücken nun wirklich nicht sooo lange braucht - fehlende Bildung würde ich aber gelten lassen ;))