char *pixel_paint;

Cool Neon's Total Control Lighting is a neat completely programmable LED system. Running sequences using an Arduino,  Seeeduino, or Arduino-compatible  microcontroller requires some programming skill, though I do encourage you to read about and try programming in sequences yourself. If, however, you would like to try designing sequences for a 2-D grid of pixels, I now have software that can help. PixelPaint is an application which lets you create a sequence of frames to be displayed on an arbitrarily sized grid of total control lighting pixels. This sequence can be displayed using a connected computer (connected to an Arduino which is in turn connected to the light strand) or the program can produce a program which can be compiled and loaded onto the Arduino by the open source Arduino environment.


You can download the latest version of the software below:

Linux/Unix: PixelPaint-0.4.tar.gz (also requires the pyserial library). 

You can also use easy_install under python 2.6 or 2.7. For python 2.7 just type


and for python 2.6 use:


All of these put the script in the executable path.

Source Code: The source is hosted at bitbucket.

Additional Software: You must also download and install the Arduino IDE as well as the latest version of the total control lighting arduino library.


After downloading and installing all the software, load the "serialcontrol" example sketch into the Arduino. If you have properly installed the total control lighting arduino library it can be found under the "File>Examples>TCL" menu. Compile and load the sketch onto the arduino and make a note of the name of the com port of the Arduino. You will need to enter this into the PixelPaint application in order to control the lights in real time. On windows it will be named something like COM3, while on a Mac it will have a name like /dev/tty.usbmodemfd341

Before beginning to play around with PixelPaint you can arrange your total control lighting pixels in a grid. This is accomplished by starting in a corner and stringing the pixels back and forth row by row or column by column. PixelPaint requires that your first pixel occupy a corner. You will need to specify this corner in the software, but it could be any of the 4 corners of the grid. You must also specify in which direction you begin stringing the LEDs, either horizontally if you string row by row, or vertically if you string column by column. The grid doesn't need to be square, but it must be rectangular. Hook the lights up to the Arduino and the Arduino up to the computer's USB port.

When the pixels receive power, they will generally be in random states. Start up PixelPaint. It will start with a default grid, but you can change that to match the geometry of your grid by selecting "Images>Change Pixel Grid" from the drop-down menus. Enter the number of horizontal and vertical pixels and the grid will change. Next you will want to connect to your Arduino by selecting "Arduino>Connect..." from the dropdown menu. A Popup menu will appear which asks for the port (which you noted above) and the corner in which the first pixel is located and the orientation of the stringing of the pixels (either horizontal or vertical). Make sure these match the layout (as seen from in front of the pixels) and click ok. If all goes well the pixels should turn solid black in 2 seconds. If something goes wrong an error dialog should popup.

Try clicking a few of the black disks in the PixelPaint window and they should turn red. The corresponding LEDs should also turn red. You can change the color by using the "Color Select" button. The "Reset" button sets all the lights to black. At the moment, clicking the "Previous Frame" and "Next Frame" wont do anything, but I'll get to those. If you make an image you would like to keep, use the "File>Save Image" option. It will save the single frame as a file with a ".led" extension.

So, how do you make sequences of frames? Under the "Images" menu there are two options to add frames. One adds a blank frame and the other adds a copy of the current frame. Both add a frame immediately following the current frame. If you select "Images>Add Blank Frame" you notice that all the pixels go black. To get back to the previous frame, use the "Previous Frame" button. You can also delete frames using the "Images>Delete Frame" option. Right now there is no way to reorder frames except by saving an individual image, deleting the frame, and then creating a blank frame and reloading the image there.

Once you make a couple of frames you can see them all animated by using the "Images>Play Show" menu item. By default there is a 1 second delay between frames, but this can be adjusted using the "Images>Set Frame Delay" menu option which allows you to set the delay in milliseconds between frames. If you like a sequence, you can save it using the "File>Save Show" option. 

To load a show directly onto an Arduino, load in the show you want and use the "Arduino>Create Sketch" menu item. Once again you will have to specify the corner in which the first pixel is located and the direction in which pixels are strung, but then PixelPaint will save an Arduino sketch which can be loaded into the Arduino IDE and compiled and loaded directly into the Arduino.