Anfänger sucht passende Software

Hallo,
als absoluter Neuling habe ich die letzten Wochenenden damit verbracht, meine erste Arduino Schaltungen aufzubauen.
Meine Frage ist, ob es nicht eine gute Software gibt, mit der ich Online die Variablen, Ein- und Ausgänge des Arduinos überprüfen kann?

Bei der Fehlersuche wäre es sehr hilfreich, wenn ich mir die Zwischenstände und Variableninhalte anschauen könnte.
Vielen Dank

Ich verwende die Arduino Sketche Version 1.8.5

Es gibt einen "Debugger" für Arme: die serielle Schnittstelle

Ansonsten hat die kostenpflichtige Version von VisualMicro einen Software Debugger. Das stört aber evtl. das Zeitverhalten. Es gibt für AVR Prozessoren auch Hardware Debugger, aber die werden nicht mit der Arduino Software kompatibel sein.

Das hast Du schon. Du musst er nur nutzren.

Serial.begin(Baudrate) im Setup

Serial.print()/Serial.println() an den Stellen, wo Du etwas ausgeben willst

Im seriellen Monitor der IDE schaust Du Dir das dann an. Beide müssen auf die gleiche Baudrate eingestellt sen (z.B. 115200).

Gruß Tommy

Hi

Zum Debuggen, oder einfach, um mir während der Entwicklung zur Laufzeit Meldungen ausgeben zu lassen, habe ich folgende Makro-Sammlung zusammen getragen:

//*****************************************************
//** stellt abschaltbare/skalierbare Serial.print Funktionalität
//** ohne define DEBUG werden alle Ausgaben gar nicht erst eingebunden
//** mit define DEBUG je nach 'Wichtigkeit' ausgegeben, oder ignoriert
//** Je höher das 'Debuglevel'
//** einstellbar per ''debuglevel(12);'' -> stellt den Debuglevel auf 12
//** debugablevel wird fest im Sketch eingetragen, alle Level >= werden ausgegeben
//**
//** Definitionen ganz vorne im Sketch, NICHT innerhalb einer Funktion wie setup()
//*****************************************************
#define DEBUG    //ausklammern, wenn keine serielle Ausgabe zum Terminal mehr gebraucht wird

#ifdef DEBUG
 const byte debugablevel = 0xF0;    //  unterhalb diesem Level keine Ausgabe, ** hier anpassen **
 const boolean debugother = true;   //  Anzeigen der Zeilennummern von nicht angezeigten Debug-Ausgaben - false lässt auch Diese verschwinden, ** hier anpassen **
 byte debuglevel = 0;            // wird per debuglevel(xx); angepasst, je höher der Level, desto 'eher' die Ausgabe
 #define debugBegin(...) Serial.begin(__VA_ARGS__)
 #define debugPrint(...)  {if (debuglevel>=debugablevel){Serial.print(__VA_ARGS__);}else if (debugother){Serial.print("(");Serial.print(debuglevel,HEX);Serial.print("@"); Serial.print(__LINE__);Serial.print(")");} }
 #define debugPrintln(...)  {if (debuglevel>=debugablevel){Serial.println(__VA_ARGS__);}else if (debugother){Serial.print("(");Serial.print(debuglevel,HEX);Serial.print("@"); Serial.print(__LINE__);Serial.print(")");} }
 #define debuglevel(...) debuglevel=__VA_ARGS__;
//
//Quelle: https://forum.arduino.cc/index.php?topic=46900.0
 #define DEBUG_PRINT(str)    \
   Serial.print(millis());     \
   Serial.print(": ");    \
   Serial.print(__PRETTY_FUNCTION__); \
   Serial.print(' ');      \
   Serial.print(__FILE__);     \
   Serial.print(':');      \
   Serial.print(__LINE__);     \
   Serial.print(' ');      \
   Serial.println(str);
 #pragma message ("DEBUG angegeben");  //Anzeige/Hinweis beim Compilieren
#else
 #define debugBegin(...)
 #define debugPrint(...)
 #define debugPrintln(...)
 #define debuglevel(...)
 #define DEBUG_PRINT(str)
#endif
//*****************************************************

Das Groh ist hier aus dem Forum, neu hinzugekommen ist die 'DEBUG_PRINT(...);' Anweisung. (oha, auch hier aus dem Forum - englischer Teil) Diese gibt, neben dem angegebenem Text auch die aktuelle Funktion und die aktuelle Zeilennummer des Quelltext mit aus. Diese Ausgabe ist ab Gestern neu in dem Block enthalten und wurde von mir bis jetzt nur 1x angetestet - nur um zu sehen, was das Teil ausgibt - also noch keine wirklichen Erfahrungen oder Erfolge beim Debuggen mit gehabt. Aber so kannst Du sehen, wo der µC gerade im Programm rumhuscht.

Klar, Das braucht während der Entwicklung einiges an Speicher - die Texte und die Befehle müssen ja irgendwo hin. Auch braucht die Serielle Schnittstelle viel Zeit, muß man also beim Entwickeln auch bedenken. Du kannst aber die entsprechenden Ausgaben wieder entfernen, wenn eine Funktion klappt. Selber habe ich mir meinen 'debuglevel' da hinzu geschrieben. Ich kann im Code den Debuglevel ändern (debuglevel(0xA0); -> Debuglevel wird auf A0 hex gesetzt). Bei den darauf folgenden Ausgaben wird geprüft, ob der aktuelle Level hoch genug ist, um ausgegeben zu werden. Das passiert während des Compilieren - Ausgaben, Die NICHT ausgegeben werden, fressen auch keinen Speicher.

Der ganze Block kommt an den Anfang des Programm, im Programm wird statt Serial.print eben debugPrint geschrieben - man kann sich dran gewöhnen.

Wenn das #define debug auskommentiert wird, werden gar keine Ausgaben mehr gemacht. Sonst wird debuglevel bei jeder Ausgabe mit 'debugablevel' geprüft, wenn das Level >= ist, wird der Text ausgegeben. Wenn Nicht, wird geprüft, ob ein Hinweis auf den verwendeten Debuglevel ausgegeben werden soll (debugother==true). Wenn Das aber auf false steht, entfällt die Zeile mit der Seriellen Ausgabe komplett, dann wird kein Byte Speicher dafür gebraucht.

Vll. kann ja Wer was damit anfangen - Erweiterungen wären auch willkommen.

MfG

Tag: Debug,Ausgabe,Abschaltbar,DebugLevel,Serial,Macro,Makro,#define