Arduino + Winamp charlieplexed 6X5

Ardor from posted a question about simplifying his charlieplexed code,  and I didn't have a straight answer for him because I haven't charlieplexed before.  So in order to solve this I built myself a 6x5 led array using 6 wires.  I pretty much copied Andrew Magill's design on everything except I'm using an Arduino.

so my answer for simplifying the code was two arrays... one that would store the led location and one that would decide whether to turn it on or off. once i had that figured out then i just mixed in my code for processing the winamp data and that was it. the hardest part was trying to get a 950 micro second delay working.. on all my previous projects this wasn't hard but for some reason this one put up a fight.

--- Arduino + Winamp charlieplexed
--- Copyright 2011 - Dave Johnson 
--- -


#define A 0 // index number of pins[] array
#define B 1
#define C 2
#define D 3
#define E 4
#define F 5

#define NUMBER_OF_PINS 6
byte pins[] = {5,6,7,8,9,10}; // arduino pins
Charlieplex plex = Charlieplex(pins,NUMBER_OF_PINS);
long previousMillis = 0;        
long interval = 950; //micro second delay
int j = 0;
int i = 0;
int data[10];

//array of all leds, 
int c[5][6][2] = {
  { {F, A}, {E, A}, {D, A}, {C, A}, {B, A}, {A, B} },
  { {F, B}, {E, B}, {D, B}, {C, B}, {B, C}, {A, C} },
  { {F, C}, {E, C}, {D, C}, {C, D}, {B, D}, {A, D} },
  { {F, D}, {E, D}, {D, E}, {C, E}, {B, E}, {A, E} },
  { {F, E}, {E, F}, {D, F}, {C, F}, {B, F}, {A, F} },


void setup() {

void loop() {
    int full[35];
    int divide = 2;
    float total;

    if (Serial.available() > 10) {
      byte x =;
      if (int(x) == 255) {
        for (int h = 0; h <= 9; h++){
          data[h] = int(;


    for (int i = 0; i < 35; i++){ full[i] = 0; }// clears the full[] array

    int length = 1; // sets the length of leds in each column
    for (int i = 0; i < 6; i++){ 
        int maplvls[6];
        int maplvlsM[6]; 
        maplvls[i] = map(data[i+3], 0, 255, 0, 7);

        if (maplvls[i] > length) {
            maplvlsM[i] = maplvls[i] - length;

        for (int z = maplvlsM[i]; z < maplvls[i]; z++){
            full[z + ((i * 5) - 1)] = 1; 

    // this is the finshed array of 1's and 0's or on/off       
    int list[5][6] = { 
        { full[4], full[9], full[14], full[19], full[24], full[29]},
        { full[3], full[8], full[13], full[18], full[23], full[28]}, 
        { full[2], full[7], full[12], full[17], full[22], full[27]},
        { full[1], full[6], full[11], full[16], full[21], full[26]},
        { full[0], full[5], full[10], full[15], full[20], full[25]}

    if (j >= 6) {

    charliePin LED0 = {c[0][j][0], c[0][j][1]};
    charliePin LED1 = {c[1][j][0], c[1][j][1]};
    charliePin LED2 = {c[2][j][0], c[2][j][1]};
    charliePin LED3 = {c[3][j][0], c[3][j][1]};
    charliePin LED4 = {c[4][j][0], c[4][j][1]};

    unsigned long currentMillis = micros();

    int count = 0;
    if (list[0][j] == 1){
        //checks to see if it's on or off
    if (list[1][j] == 1){
    if (list[2][j] == 1){
    if (list[3][j] == 1){
    if (list[4][j] == 1){

    if(currentMillis - previousMillis > interval) {
        previousMillis = currentMillis;
Tagged ,

Arduino + HDD + ESC Progress.

I got everything up and running, thanks to some help from I was able to spin it up to full speed,  cut the slice in the hard disk plater,  and even get a small POV effect with an RGB led. what's left on the list is a hall effect sensor and some RGB led tape.

Tagged , , ,

Arduino + HDD + ESC

my project for the past two days has been to get a BLDS hard drive motor to spin at 5400rpms I read high and low on how to control these motors and everyone said that a ESC (electronic speed controller) would be the best route to go in. so a made a visit at my local hobby shop that specialize in airplanes and picked up a E-Flite Pro 10A ESC. and it took me 24hour to figure out how to get a steady speed. I'll post schematics and code in a later post after i get it all figured out.

Tagged , ,

Fixed my 3x3x3 led cube

I haven't really done much with my LED Cube since I built it a year ago, so it wound up in my parts box. Despite my best efforts not to smash it, I eventually did. Last night I decided to salvage it and see if I could true it up and make it a perfect square again.

I had to fix a few solder points but it's back up and working again and even adapted my vu meter code to it with a some small changes.

and here are some pictures from when I built it a year ago.

Tagged , ,