Debugging Arduino programs can be difficult, as the only easy output method is a serial console. With lots of debug messages the console soon becomes full and difficult to read efficiently. The biggest issue is the console scrolls, so with lots of output the text scrolls past too fast to read. One solution is to write a simple app on your laptop/desktop that listens to the serial data and displays it in an app with a better layout. You can create individual text boxes that just display the values of key variables, and the app can scan the serial stream looking for these variables and update the text box every time it sees a new value.
Depending on your microcontroller code purpose, you can also chose more appropriate visual representations of your debug variables. For example, you could show an arrow on a compass to represent the value you get from a magnetometer, you can plot a point on a Google map page in and HTML control to show the position you get from a GPS, and you can display green and red dots to show the value of switches, etc.
I use Visual Basic, just because I find it easy. You can design the visual layout of the app easily, and the code is very simple, but *any* programming language will work. Pick one you are most familiar with. You don’t want to waste time building the debugging console, when you could spend that time debugging your microcontroller code.
I use two techniques in the serial protocol; I prefix each line with a symbol that defines what type of data the line contains and I use name / value pairs for data to display.
e.g.
#Init Motor Driver #Init Wire library #Init IMU #Get first YPR #Set initial Input variable #Init IMU Setpoint #Exit Setup $StatusA = 1011 $CountA = 4294967255 $StatusB = 11101010 $CountB = 0 $Yaw = -130.54 $Pitch = -6.03 $Roll = 23.43 $Input = 23.4341 $Output = -400 $OutputA = -400 $OutputB = -400 $Heading = -137 $Button = 1
# – denotes debug messages. I add a time stamp to them and display them in a “messages” text box.
$ – denotes a name / value pair. The value is displayed in a text box for that name.
Instead of a difficult to read scrolling text window, I now have a stable windows app that displays each variable I want to track in an easy to read layout. In addition, I have a log of messages, with time stamps, I can scroll back through looking for interesting events. Finally, you can also decide to output some values are different frequencies, i.e. the fast changing values every 500ms, and the slow changing values every 5 seconds. The app also shows the current value for everything.
You can also get your microcontroller to listen to the input serial stream and use the app to send commands to your device. Add an XBee and now your microcontroller is wirelessly remotely monitored and controlled by your app on your desktop !
Thanks for such detailed posts of your work. I have built a self-balancing robot platform and just have to mount the 9DOF board and the platform will be done. Then I can start to code it. I will blog about this when I get time.
Your posts are really useful. Much appreciate your efforts.