3x3x3 led cube program slow down and stop

Well here is the problem, I built the 3x3x3 cube here http://www.instructables.com/id/LED-Cube-and-Arduino-Lib/ built ran great for a few minutes the slows down and freezes. there is the code sorry i am new to this software stuff I do want to learn though. I am new to posting on the forums as well

/*
    ledcube.pde - Example sketch for controlling an LED cube.
    Created by Gamaiel Zavala (gzip), 2009-2012
    MIT License. See accompanying LICENSE file for terms.
*/

#include <LedCube.h>

#define SIZE 3
#define COLS (SIZE*SIZE)

byte levelPins[SIZE] = {11,12,13};
byte colPins[COLS] = {2,3,4,5,6,7,8,9,10};

LedCube cube(SIZE, levelPins, colPins);

void setup ()
{
}

void loop ()
{
    delay(10);
    
    // light each light one at a time
    for(byte level=0; level<cube.getLevels(); level++)
    {
        for(byte col=0; col<cube.getCols(); col++)
        {
            cube.lightPulse(level, col, 100);
        }
    }
    
    // light one level at a time, increasing speed each time
    for(byte d=25; d>2; d-=2)
    {
        for(byte l=1; l <= cube.getLevels(); l++)
        {
            cube.lightLevel(l, d);
        }
    }
    
    // light each row on each level
    for(byte level=1; level<=cube.getLevels(); level++)
    {
        for(byte row=1; row<=cube.getLevels()*2; row++)
        {
            cube.lightRow(row, level);
        }
    }
    
    // light each plane
    for(byte i=3; i; i--)
    {
        for(byte row=1; row<=cube.getLevels()*2; row++)
        {
            cube.lightPlane(row, 10*i);
        }
    }
    
    // single random light at a time
    cube.randomLight(random(25,100),100);
    
    // random column drop
    for(byte x=0; x<=15; x++)
    {
        cube.lightDrop(random(0,cube.getCols()), random(50,150));
    }
    
    // circle around cube at a random level
    for(byte x=0; x<=5; x++)
    {
        cube.lightPerimeter(random(0,cube.getLevels()), random(1,5), random(25,100));
    }
    
    // light each face
    byte planes[] = {cube.getLevels()+1,cube.getLevels(),cube.getLevels()*2,1};
    for(byte i=5; i; i--)
    {
        for(byte p=0; p<sizeof(planes); p++)
        {
            cube.lightPlane(planes[p], 5*i);
        }
    }
    
    // random columns
    cube.randomColumn(25);
    
    // turn off a single column randomly
    cube.enableBuffer();
    for(byte c=0; c<30; c++)
    {
        cube.fillBuffer();
        cube.invertBuffer();
        cube.randomColumn();
        cube.drawBuffer(7);
    }
    cube.enableBuffer(false);
    
    // cols in and out
    for(byte c=1, d=0; c<=10; c++)
    {
        if(c%2 == 0)
        {
            for(d=0; d<20; d++)
            {
                cube.lightColumn(2,1);
                cube.lightColumn(4,1);
                cube.lightColumn(6,1);
                cube.lightColumn(8,1);
            }
        }
        else if(c%4 == 1)
        {
            for(d=0; d<30; d++)
            {
                cube.lightColumn(1,1);
                cube.lightColumn(3,1);
                cube.lightColumn(7,1);
                cube.lightColumn(9,1);
            }
        }
        else
        {
            for(d=0; d<70; d++)
            {
                cube.lightColumn(5,1);
            }
        }
    }
    
    // diamond and box
    byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
    byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };
    cube.lightSequence(box, sizeof(box), 200);
    cube.lightSequence(diamond, sizeof(diamond), 400);
    
    // helicopter effect
    byte topSeq[8] = {0,3,6,7,8,5,2,1};
    byte botSeq[8] = {8,5,2,1,0,3,6,7};
    for(byte loops = 0, delay = 50; loops<=8; loops++)
    {
        for(byte s=0; s<8; s++)
        {
            byte seq[] = {2,topSeq[s], 1,4, 0,botSeq[s]};
            cube.lightSequence(seq, sizeof(seq), delay);
        } 
        if(loops < 5) delay-=10;  else delay += 10;
    }
    
    // turn off one light at a time
    cube.enableBuffer();
    cube.fillBuffer();
    cube.drawBuffer(25);
    for(byte w=0, l, c, max = cube.getNumLights(); w<max; )
    {
        // lower bound is inclusive, upper is exclusive
        l = random(0, cube.getLevels());
        c = random(0, cube.getCols());
        
        if(cube.getBufferAt(l,c) == HIGH)
        {
            cube.lightOff(l,c);
            cube.drawBuffer(5);
            w++;
        }
    }
    cube.enableBuffer(false);
}

led cube 3x3x3.txt (4.26 KB)

When you remove all the commented out code, I'll have another look. I'm not wading through all that mess to pick out what is actually executing to see IF there is a problem with the code.

What do you mean commented code, like i said earlier I am new to this code stuff, sorry

What do you mean commented code

// Lines like
// this are comments

There I hopefully fixed the code so it is more easily viewed :slight_smile:

You are creating these arrays every time through the loop until you run out of memory. I think if you move these arrays out of the loop and up with the other variables you will probably be ok.

[code] byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
    byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };
    
    // helicopter effect
    byte topSeq[8] = {0,3,6,7,8,5,2,1};
    byte botSeq[8] = {8,5,2,1,0,3,6,7};

[/code]

Better yet would be to make them 'static"

lloyddean:
Better yet would be to make them 'static"

what do you mean thanks, sorry if this sounds like a "stupid" Question

static byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
static byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };
    
    // helicopter effect
static byte topSeq[8] = {0,3,6,7,8,5,2,1};
static byte botSeq[8] = {8,5,2,1,0,3,6,7};

http://en.wikipedia.org/wiki/Static_variable

lloyddean:

static byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};

static byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };
   
    // helicopter effect
static byte topSeq[8] = {0,3,6,7,8,5,2,1};
static byte botSeq[8] = {8,5,2,1,0,3,6,7};




OK thanks, I will give it a try. Like i said the the building and designing came easy it is this coding that was a little harder for me to wrap my head around

I think you're doing just fine. You're learning, not giving up and that's good!

Well good news bad news, bad news is i made the changes in the trouble area as instructed and it goes through one cycle and stops. But the good news is then i deleted the offending code project comes to life an seems to stay going knock on wood , and i did not let the magic smoke out yet, that i an happy for.

It's always useful to post complete modified code when discussing cause and effect results.

void loop ()
{
... IT WON"T WORK HERE AS THE ARRAY IS BUILT FROM POSSIBLY DYNAMIC DATA

    // light each face
    byte planes[] = {cube.getLevels()+1,cube.getLevels(),cube.getLevels()*2,1};

...

    // diamond and box
    static byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
    static byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };

...

    // helicopter effect
    static byte topSeq[8] = {0,3,6,7,8,5,2,1};
    static byte botSeq[8] = {8,5,2,1,0,3,6,7};

... IT WON"T WORK HERE AS THE ARRAY IS BUILT FROM POSSIBLY DYNAMIC DATA

            byte seq[] = {2,topSeq[s], 1,4, 0,botSeq[s]};

...

}

lloyddean:
It's always useful to post complete modified code when discussing cause and effect results.

void loop ()

{
... IT WON"T WORK HERE AS THE ARRAY IS BUILT FROM POSSIBLY DYNAMIC DATA

// light each face
    byte planes[] = {cube.getLevels()+1,cube.getLevels(),cube.getLevels()*2,1};

...

// diamond and box
    static byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
    static byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };

...

// helicopter effect
    static byte topSeq[8] = {0,3,6,7,8,5,2,1};
    static byte botSeq[8] = {8,5,2,1,0,3,6,7};

... IT WON"T WORK HERE AS THE ARRAY IS BUILT FROM POSSIBLY DYNAMIC DATA

byte seq[] = {2,topSeq[s], 1,4, 0,botSeq[s]};

...

}

Thank you for the forum code Etiquette , I guess I was not thinking, thanks again for the lesson. :slight_smile: