It can be a tricky task to debug and visualize realtime data on the Arduino board. You are usually stuck with the standard serial output, as the complexity of your Arduino code grows this makes it impossible to comprehend what is actually going on inside the board. To solve this I have created a little library that will enable you to create your own custom GUI for your Arduino projects. Watch this video to get a demonstration of a basic hello world with a potmeter and a diode:
As of now, the program has the following possibilities and features:
Custom design your interface from the Arduino board
You define which sliders, graphs and buttons you need for your interface. You do this in your Arduino sketch which means that the gui program acts as a slave to the sketch. All information is stored in your board.
Visualize and manipulate realtime data
Whether you are making an RGB light controller or a robot arm, getting a graphical feedback is crucial to understand what is going on inside the board. This enables you to understand whether it is your hardware or the code that is causing problem. Further the sliders and buttons enables you to tweak the individual parameters in realtime. This way you can see what effect different thresholds have on the interaction.
Save the parameters in the boards memory
When you have tweaked the parameters you can save them to the EEProm of the board. The parameters will be auto loaded next time you power on the board, even if the computer is not connected.
Use the same app for all your Arduino projects
I have made tons of small apps for different projects. My problem is always to find them again a year later. Because we save everything in the Arduino I only need to keep one app around the Arduino will automatically configure the app for the current project.
Prototype the interface before you turn on the soldering iron
Because you can design the gui as you like it (within reasonable limits), you can prototype the interface before you have made a physical interface. This also enables you to divide the tasks between multiple people e.g. one person is working on the hardware and another person is working on the code. When you have made the physical interface the Guino will integrate seamlessly.
Use it as a fullscreen dashboard
You can use it as a fullscreen dashboard by pressing F and pressing T toggles the visibility of the settings panel. You hereby only present your custom interface for the world around you.
Control the background color
The background color can be controlled from the Arduino this enables you to create different colors for different sketches. It can also bes used to make alerts when something is wrong. It can be green when everything is ok and red when something is wrong.
Fast and Slim
I have taken great care in making the footprint on the Arduino as small as possible - It only stores a minimum amount of data in the memory (concretely a pointer list of 100 items). This setting can be changed to lower or higher depending on the amount of gui items you intend to have in your interface. Further the system relies on the EasyTransfer library which transfers the information in binary form. Each package consists of a byte for command, a byte for item # and an integer for the value. Ideally, all your data should be normalized to a 16 bit signed integer range. This means optimal usage of the serial port when working with integers (technically we use a little extra space for a checksum).
Good for Instructables
The GUI enables you to make Instructables that only requires the core components. Extra components like potmeters etc. can be made virtually via the gui.
Limitations and future plans
Right now the app has been compiled to the Mac OSX and Windows platform. It is written in Openframeworks so It should be able to run on other platforms as well. Since the app is using the serial port you will not be able to connect other programs to the Arduino. This will be solved in a future release which will include a Open Sound Control and a Midi bridge.
Programming and idea by: Mads Hobye
Easytransfer library by: Bill Porter
GUI library by: Reza Ali