My 3x3x3 and 5x5x5 LED cube

Got my LED cube build today :D! This code I made as a test:

I used for() loops as delay between the columns as well for making the led columns run at their full brightness.

int layer1 = 11; 
int layer2 = 12;
int layer3 = 13;
int led1   = 10;
int led2   = 9;
int led3   = 8;
int led4   = 7;
int led5   = 6;
int led6   = 5;
int led7   = 4;
int led8   = 3;
int led9   = 2;
int r      = 1;




void setup()
{
  pinMode(layer1, OUTPUT); 
  pinMode(layer2, OUTPUT);    
  pinMode(layer3, OUTPUT);  
  pinMode(led1,   OUTPUT); 
  pinMode(led2,   OUTPUT);  
  pinMode(led3,   OUTPUT);  
  pinMode(led4,   OUTPUT);  
  pinMode(led5,   OUTPUT);  
  pinMode(led6,   OUTPUT);  
  pinMode(led7,   OUTPUT);  
  pinMode(led8,   OUTPUT);  
  pinMode(led9,   OUTPUT);  
  

}

void loop()
{
while(r<=5){
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, LOW);
  digitalWrite (led5, HIGH);
  
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led1, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led1, LOW);
 }
 
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led2, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led2, LOW);
 }
 
for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led3, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led3, LOW);
 }
 
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led6, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led6, LOW);
 }
 
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led9, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led9, LOW);
 }
 
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led8, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led8, LOW);
 }
 
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1,  HIGH);
  digitalWrite (led7,    HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led7, LOW);
 }
 for(int i = 0; i <= 15;i++){
  digitalWrite (layer1, HIGH);
  digitalWrite (led4, HIGH);
  delay(1);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(1);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(1);
  digitalWrite (layer3, LOW);
  digitalWrite (led4, LOW);
 }
 digitalWrite (led5, LOW);
 digitalWrite (layer1, LOW);
 digitalWrite (layer2, LOW);
 digitalWrite (layer3, LOW); // RESET all layers to OFF
 r = r++;                     
}
r = 1;                        
while (r<=10){
  digitalWrite (layer1, HIGH);
  digitalWrite (led1, HIGH);
  digitalWrite (led3, HIGH);
  digitalWrite (led7, HIGH);
  digitalWrite (led9, HIGH);
  delay(75);
  digitalWrite (layer1, LOW);
  digitalWrite (layer2, HIGH);
  delay(75);
  digitalWrite (layer2, LOW);
  digitalWrite (layer3, HIGH);
  delay(75);
  digitalWrite (led1, LOW);
  digitalWrite (led3, LOW);
  digitalWrite (led7, LOW);
  digitalWrite (led9, LOW);
  delay(75);
  digitalWrite (led2, HIGH);
  digitalWrite (led4, HIGH);
  digitalWrite (led6, HIGH);
  digitalWrite (led8, HIGH);
  delay(75);
  digitalWrite (layer3, LOW);
  digitalWrite (layer2, HIGH);
  delay(75);
  digitalWrite (layer2, LOW);
  digitalWrite (layer1, HIGH);
  delay(75);
  digitalWrite (led2, LOW);
  digitalWrite (led4, LOW);
  digitalWrite (led6, LOW);
  digitalWrite (led8, LOW);
  r = r++;
}
r=1;
}

Here a video :): - YouTube
If anyone has some tips what I could do better on my code, feel free to let me know :).

Yay, working cube!

Another video :), multiplexed so only 1 layer is lit on any given time(im using array's and for loops to turn on the LEDs, easier to program/the code is shorter):

edit:
this code has even less lines as the one that I showed 2 posts back :).

Neat! Nice work. Would you mind posting the new code as a reference? Definitely think it would be helpful for me as jump into the programming of my cube. Thanks.

Yep no problem(this code is a little different than showed in the video):

/* 3x3x3 LED cube 
 * ------------
 * Created January 2013
 * http://arduino.cc/forum/index.php/topic,144057.0.html
 * Made by M.Neuhaus
 */
 
int lvlPins[3] = {11,12,13};
int ledPins[9] = {10,9,8,7,6,5,4,3,2};
int repeat_value = 0;
int speed_value;    //Used in a double while loop
int randomledPins;
int randomlvlPins;

void setup()
{
  for(int i=0; i<3; i++){
    pinMode(lvlPins[i], OUTPUT);
  }
  for(int i=0; i<9; i++){
    pinMode(ledPins[i], OUTPUT);
  }
}
void loop(){
  repeat_value = 0;
  speed_value = 50;
  while(speed_value > 1){  
    while(repeat_value < speed_value){
        for(int i=0; i<3; i++){digitalWrite(ledPins[i], HIGH);}
        for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
        for(int i=0; i<3; i++){digitalWrite(ledPins[i], LOW);}
        repeat_value+=1;  //wall 0,1,2 
    }                                                                                          
    repeat_value = 0;        
    while(repeat_value < speed_value){
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+2+i*2], HIGH);}
        for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+2+i*2], LOW);}
        repeat_value+=1;  //wall 2,5,8
    }  
    repeat_value = 0;  
    while(repeat_value < speed_value){
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+6], HIGH);}
        for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+6], LOW);}
        repeat_value+=1;  //wall 6,7,8
    }  
    repeat_value = 0;  
    while(repeat_value < speed_value){
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+i*2], HIGH);}
        for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
        for(int i=0; i<3; i++){digitalWrite(ledPins[i+i*2], LOW);}
        repeat_value+=1;  //wall 0,3,6
    }     
    repeat_value = 0; 
    speed_value-=5;       //acceleration
  }        
  while(repeat_value<200){
    digitalWrite(lvlPins[0], HIGH);
    digitalWrite(ledPins[4], HIGH);
    delay(1);
    digitalWrite(lvlPins[0], LOW);
    digitalWrite(lvlPins[1], HIGH);
    for(int i=0; i<3; i++){digitalWrite(ledPins[i+3], HIGH); digitalWrite(ledPins[1], HIGH); digitalWrite(ledPins[7], HIGH);}
    delay(1);
    digitalWrite(lvlPins[1], LOW);
    for(int i=0; i<3; i++){digitalWrite(ledPins[i+3], LOW); digitalWrite(ledPins[1], LOW); digitalWrite(ledPins[7], LOW);}
    digitalWrite(lvlPins[2], HIGH);
    digitalWrite(ledPins[4], HIGH);
    delay(1);
    digitalWrite(lvlPins[2], LOW);
    digitalWrite(ledPins[4], LOW);
    repeat_value+=1;      //Orb
  }
  repeat_value=0;
  while(repeat_value<500){
    for(int i=0; i<5; i++){digitalWrite(ledPins[i+i], HIGH);}
    for(int i=0; i<1; i++){digitalWrite(lvlPins[i+1], HIGH); delay(1); digitalWrite(lvlPins[i+1], LOW);}
    repeat_value+=1;   //Orb expands to 4 corners of cube
  }
  repeat_value = 0;
  while(repeat_value<400){
    for(int i=0; i<5; i++){digitalWrite(ledPins[i+i], HIGH);}
    for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
    for(int i=0; i<5; i++){digitalWrite(ledPins[i+i], LOW);}
    if(repeat_value>200){
      for(int i=0; i<4; i++){digitalWrite(ledPins[2*i+1], HIGH);}  //Led 1,3,5,7 ON
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
      if(repeat_value>250){
        for(int i=0; i<1; i++){digitalWrite(lvlPins[i+1], HIGH); delay(1); digitalWrite(lvlPins[i+1], LOW);}
      }
      if(repeat_value>300){
        for(int i=0; i<1; i++){digitalWrite(lvlPins[i+2], HIGH); delay(1); digitalWrite(lvlPins[i+2], LOW);}
      }
      for(int i=0; i<4; i++){digitalWrite(ledPins[2*i+1], LOW);}
    }            
    repeat_value+=1;
  }
  repeat_value=0;
  for(int i=0; i<9; i++){digitalWrite(ledPins[i], HIGH);}
  while(repeat_value<200){
    for(int i=0; i<2; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}  
    repeat_value+=1;   // Only layer 1, 2 ON
  }
  repeat_value=0;
  while(repeat_value<150){
    for(int i=0; i<1; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}  
    repeat_value+=1;   //Only layer 1 ON
  }
  for(int i=0; i<9; i++){digitalWrite(ledPins[i], LOW);}
  repeat_value=0;
  while(repeat_value<60){
    randomledPins=random(9);
    randomlvlPins=random(3);
    digitalWrite(ledPins[randomledPins], HIGH);
    digitalWrite(lvlPins[randomlvlPins], HIGH);
    delay(50);
    digitalWrite(ledPins[randomledPins], LOW);
    digitalWrite(lvlPins[randomlvlPins], LOW);
    repeat_value+=1;
  }
  repeat_value = 0;
  speed_value = 0;  
  while(repeat_value<5){
    while(speed_value<30){    //Use of 'speed_value' due double while loop
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], HIGH);}
      for(int i=0; i<3; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], LOW);}
      speed_value+=1;
    }
    speed_value = 0;
    while(speed_value<30){
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+2], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i+2], HIGH); delay(1); digitalWrite(lvlPins[i+2], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+2], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i+1], HIGH); delay(1); digitalWrite(lvlPins[i+1], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i], LOW);}
      speed_value+=1;
    }
    speed_value = 0;
    while(speed_value<90){
      for(int i=0; i<9; i++){digitalWrite(ledPins[i], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i+1], HIGH); delay(1); digitalWrite(lvlPins[i+1], LOW);}
      for(int i=0; i<9; i++){digitalWrite(ledPins[i], LOW);}
      speed_value+=1;
    }
    speed_value = 0;
    while(speed_value<30){
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i+2], HIGH); delay(1); digitalWrite(lvlPins[i+2], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i+1], HIGH); delay(1); digitalWrite(lvlPins[i+1], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+1], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+2], HIGH);}
      for(int i=0; i<1; i++){digitalWrite(lvlPins[i], HIGH); delay(1); digitalWrite(lvlPins[i], LOW);}
      for(int i=0; i<3; i++){digitalWrite(ledPins[3*i+2], LOW);}
      speed_value+=1;
    }
  repeat_value+=1;
  speed_value = 0;
  }
}

Thanks for sharing that code Arduino001 ... I like your work, well done 8) It always amazes me that you people that classify themselves as Newbies come up with such great code.... I collect any 3 x 3 cube code that I find because it helps me to learn about how to code, so yours will certainly be going into my collection. In case you're interested here is one I did and also a link to some excellent code that uses PROGMEM

/* Code by Pedro147 inspired by this -
 
 http://www.abrushfx.com/Arduino/ledcube3.html
 
*/

int ledRow[] = { 11, 12, 13 };
int ledCol[]= {  2, 3, 4, 5, 6, 7, 8, 9, 10 };
int timer= 10;




void setup() 
{  
  for( int i =  0; i < 3; i++)

  {
    pinMode( ledRow[i],OUTPUT);
  }

  {  
    for(int j =  0; j < 9; j++)

    {
      pinMode( ledCol[j],OUTPUT);
    }
  }
}


void onLED(int ledRow, int ledCol){

  digitalWrite(ledRow, HIGH); 
  digitalWrite(ledCol, HIGH); 

}


void offLED(int ledRow, int ledCol)
{
  digitalWrite(ledRow, LOW); 
  digitalWrite(ledCol, LOW); 
}


void allOff()
{
  for(int i = 3; i--;)
  {
    for(int j = 9; j--;)
    {
      offLED(ledRow[i],ledCol[j]);
    }
  }
}


void oneToNine_ColsOn()
{
  for(int j = 9; j--;)

  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}


void everySecond_ColsOn1()
{

  for(int j = 0; j< 9; j+=2)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}


void everySecond_ColsOn_2()
{

  for(int j = 1; j< 9; j+=2)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
} 
void lhWall_fToR()

{

  for(int j = 0; j< 9; j+=3)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void rhWall_fToR()

{

  for(int j = 2; j< 9; j+=3)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}


void frontWall_LtoR()
{
  for(int j = 0; j< 3; j++)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void rearWall_LtoR()
{
  for(int j = 6; j<9; j++)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(10);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}


void centreWall_LtoR()
{
  for(int j = 3; j<6; j++)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(timer);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void centreWall_fToR()

{

  for(int j = 1; j< 9; j+=3)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(timer);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void diagWall_LtoR()
{
  for(int j = 0; j < 9; j+=4)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(timer);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void diagWall_RtoL()
{
  for(int j = 2; j < 8; j+=2)
  {
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(timer);
      digitalWrite(ledCol[j], HIGH);
    }
  }
}

void rowPaneFigure8()
{
  for (int i = 0; i < 3; i++)

  {
    for(int j = 0; j < 3; j++)   // light LED's 1 - 3 on/off on top level

    {
      onLED(ledRow[i],ledCol[j]);         // 7 8 9
      delay(timer);                       // 4 5 6
      offLED(ledRow[i],ledCol[j]);        // 1 2 3
    }
    for(int j = 5; j > 2; j--)  // light LED's 6 - 4 on/off on top level
    {
      onLED(ledRow[i],ledCol[j]);
      delay(timer);
      offLED(ledRow[i],ledCol[j]);
    }
    for(int j = 6; j < 9; j++)  // light LED's 7 - 9 on/off on top level
    {
      onLED(ledRow[i],ledCol[j]);
      delay(timer);
      offLED(ledRow[i],ledCol[j]);
    }
    for(int j = 5; j > 2; j--)   // light LED's 6 - 4 on/off on top level
    {
      onLED(ledRow[i],ledCol[j]);
      delay(timer);
      offLED(ledRow[i],ledCol[j]);
    }

  }

}

void frontTorear_flash1()
{
  for(int j = 0; j < 9; j+=3)
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(20);
      digitalWrite(ledCol[j], HIGH);
    }
}


void frontTorear_flash2()
{
  for(int j = 1; j < 9; j+=3)
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(20);
      digitalWrite(ledCol[j], HIGH);
    }
}


void frontTorear_flash3()
{
  for(int j = 2; j < 9; j+=3)
    for(int i = 3; i--;)
    {
      digitalWrite(ledRow[i], HIGH);
      delay(20);
      digitalWrite(ledCol[j], HIGH);
    }
}

void randomColumnsOnOff()
{
  int colmax = 9;
  int stCol  = random(0,colmax);

  {
    digitalWrite(ledRow[0], HIGH); 
    digitalWrite(ledCol[stCol], HIGH); 
    digitalWrite(ledRow[1], HIGH); 
    digitalWrite(ledCol[stCol], HIGH); 
    digitalWrite(ledRow[2], HIGH); 
    digitalWrite(ledCol[stCol], HIGH); 
    delay(timer);
    allOff();



  }
}
void loop()
{
  oneToNine_ColsOn();
  delay(10);
  allOff();
  delay(10);
  everySecond_ColsOn1();
  delay(10);
  allOff();
  delay(10);
  everySecond_ColsOn_2();
  delay(10);

  oneToNine_ColsOn();
  delay(10);
  allOff();
  delay(10);
  everySecond_ColsOn1();
  delay(10);
  allOff();
  delay(10);
  everySecond_ColsOn_2();
  delay(10);


  lhWall_fToR();
  delay(100);
  allOff();
  centreWall_fToR();
  delay(100);
  allOff();
  rhWall_fToR();
  delay(100); 
  allOff();

  frontWall_LtoR();
  delay(100);
  allOff();
  centreWall_LtoR();
  delay(100);
  allOff();
  rearWall_LtoR();
  delay(100);
  allOff();

  rowPaneFigure8();

  centreWall_LtoR();
  allOff();
  diagWall_LtoR();
  allOff();
  centreWall_fToR();
  allOff();
  diagWall_RtoL();
  allOff();
  frontTorear_flash1();
  delay (timer);
  allOff();
  frontTorear_flash2();
  delay (timer);
  allOff();
  frontTorear_flash3();
  delay (timer);
  allOff();
  randomColumnsOnOff();
  randomColumnsOnOff();
  randomColumnsOnOff();
}

Don't know how, but Arduino001 should be me (WonderTiger), Weird..... Thanks anyway for your positive reply :D! (and thanks ofcourse for sharing your code as well ;))

WonderTiger today the cache has been playing some bad pranks to a few people.
monday we'll have a look at it and fix it.

m

My apologies WonderTiger. I just looked at the name of the person that posted the code without realising that this was not the OP... opps :grin:

p.s - that damn cache is responsible for a lot of misunderstandings on the web

No problem, I just thought it was weird because I was sure I made the post :grin:. Anyway, my next project will be 5x5x5. I already ordered some shift register to experiment with and learn the basics of them :), I probably going to use shift registers on my 3x3x3 cube first to make sure I understand the programming and the way the shift registers work.

I have a question about the current draw from the arduino 5v pin. Is it true that i can pull around 450mA from that pin(Usb powered, arduino uno itself use around 50mA or something close to that, so that leaves me 450mA IF all the digital pins are turned low).

Thanks in advance :)!

WonderTiger:
I have a question about the current draw from the arduino 5v pin. Is it true that i can pull around 450mA from that pin(Usb powered, arduino uno itself use around 50mA or something close to that, so that leaves me 450mA IF all the digital pins are turned low).

Thanks in advance :)!

On USB power, yes. You can do about 20 LEDs at 20mA, powered from the 5V pin (not from Arduino I/O pins).

For more than that you need another 5V power supply.

Ok thanks:D! I only will use around 325 mA at the most so arduino will provide enough when connected to USB, thanks again!

So after 3 days I finished my 5x5x5 LED cube. Now everything is working fine, however if I multiplex more then three layers my LEDs goes less bright then when I'm only multiplexing 3 layers. It's not a big deal but if someone has an explanation for it it would be great!

pics comming soon!

How has this been going? do you have pix or video yet?

I dont understand your statement about how its going not so bright, or why that might be happening.

Sorry for the delay but I have been on vacation lately. Tommorow I will post some pics of it. I still have some struggling with the code but I almost figured out. So the videos will be posted within a week :).

I figured out the brightness issue though. Its because the duty cycle is around 1/5 if I multiplex 5 layers. To fix it I should pulse my leds with much more current then I do right now. I dont really mind about the brightness loss so I keep it in its original state:).

25 LEDs at 20mA is 500mA; you can't go much brighter without another supply.

Hi. im an arduino newbie as well and I just built a 3x3x3 led cube this weekend and wanted to ask you a couple of questions. I built the cube and made sure all the pins worked but got a little bit stumped when it came to programming since it was my first time. Just from reading through these posts I understand now that it is smarter to light up each layer at a time so I have a 1/3 duty cycle. (I was doing 1 led at a time with 1/27th duty cycle. :*) But my first question is why use transistors? I hooked each layer up to a specific pin and when I want the layer off I just set the pin to HIGH. Is there an advantage to using transistors?

My next questions is going to be about how you simplified your code. But im going to rewrite my coding a little tonight just so I can see the cube in action and then I will post it.

Thanks in advance! and good work, I hope I will learn as fast as you did!

What I did was do the 1/27 duty cycle, alot of code but you can copy and paste so it becomes easier. You could also use for less code is lable a xyz not sure how to do that though.

But my first question is why use transistors? I hooked each layer up to a specific pin and when I want the layer off I just set the pin to HIGH. Is there an advantage to using transistors?

Not just an advantage, but a requirement to use a transistor to enable or disable each layer. As when a layer is enable the amount of current allowed to flow is dependent on the number of leds your software has commanded to be on for that layer and that can vary from 0 to 9 leds for a 3x3x3 cube.

So worst case, 9 leds x 20ma= 180ma is way more current then the arduino output pin controlling the layer can handle, so the need for the arduino output pin to control a switching transistor that can handle that amount of current.

That make sense?

Lefty