# 3x3x3 LED Cube by Eric and Alex

This is a code for a 3x3x3 LED cube. This cube is run off of 12 pins. To wire this cube, connect all of the anodes on a given level and connect all of the cathodes down vertically in one column. int anode [] ={5, 6, 7, 9, 10, 11, 12, 13, 8}; // sets an aray for lights to be usedint anode2 [] ={8, 13, 12, 11, 10, 9, 7, 6, 5}; // opposeite aray

int catone [] ={2, 2, 2, 2, 2, 2, 2, 2, 2}; // negative for bottom level

int cattwo [] ={3, 3, 3, 3, 3, 3, 3, 3, 3}; // negative for middle level

int catthree [] ={4, 4, 4, 4, 4, 4, 4, 4, 4}; // negative for top level

int x; //sets variables

int d;

int c;

void setup ()

{

}

void one(int wait) // bottom level light sequence

// wait can be defined in the void loop

{

for(x=0; x<=8; x++) // variable for different numbers in

// the aray corresponding to there place

{

pinMode(anode[x], OUTPUT); // sets as output

pinMode(catone[x], OUTPUT);

digitalWrite(anode[x], HIGH); // turns on positives

digitalWrite(catone[x], LOW); // turns on negatives

delay(wait); // if you don't know what delay is your a moron

pinMode(anode[x], INPUT); //sets them back to inputs so the lights turn off

pinMode(catone[x], INPUT);

}

}

void two(int wait)

{ for(x=0; x<=8; x++)

{

pinMode(anode2[x], OUTPUT);

pinMode(cattwo[x], OUTPUT);

digitalWrite(anode2[x], HIGH);

digitalWrite(cattwo[x], LOW);

delay(wait);

pinMode(anode2[x], INPUT);

pinMode(cattwo[x], INPUT);

}

}

void three(int wait)

{ for(x=0; x<=8; x++)

{

pinMode(anode[x], OUTPUT);

pinMode(catthree[x], OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(catthree[x], LOW);

delay(wait);

pinMode(anode[x], INPUT);

pinMode(catthree[x], INPUT);

}

}

void column(int wait) // loops through columns

{

for(x=0; x<=8; x++) // loops through the aray

{

pinMode(anode[x], OUTPUT);

for(d=1; d<=wait; d++) // delay on each column

{

for(c=2; c<=4; c++) // loops through lights on a column

{

pinMode(c, OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(c, LOW);

pinMode(c, INPUT);

delayMicroseconds(100);

}

}

pinMode(anode[x], INPUT);

}

}

void levelone (int wait) // turns entire level on

{

for(d=1; d<=wait; d++)

{

for(x=0; x<=8; x++)

{

pinMode(anode[x], OUTPUT);

pinMode(catone[x], OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(catone[x], LOW);

delayMicroseconds(100); // loops really fast so it looks like

pinMode(anode[x], INPUT); // all the lights are one at the same time

pinMode(catone[x], INPUT);

}

}

}

void leveltwo (int wait)

{

for(d=1; d<=wait; d++)

{

for(x=0; x<=8; x++)

{

pinMode(anode[x], OUTPUT);

pinMode(cattwo[x], OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(cattwo[x], LOW);

delayMicroseconds(100);

pinMode(anode[x], INPUT);

pinMode(cattwo[x], INPUT);

}

}

}

void levelthree (int wait)

{

for(d=1; d<=wait; d++)

{

for(x=0; x<=8; x++)

{

pinMode(anode[x], OUTPUT);

pinMode(catthree[x], OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(catthree[x], LOW);

delayMicroseconds(100);

pinMode(anode[x], INPUT);

pinMode(catthree[x], INPUT);

}

}

}

void randlight(int repeat) // number of lights turned on

{

randomSeed (millis()); // random lights

for (int d=1; d<=repeat; d++)

{

x=random(0,9);

c=random(2,5);

pinMode(anode[x], OUTPUT);

pinMode(c, OUTPUT);

digitalWrite(anode[x], HIGH);

digitalWrite(c, LOW);

delay(100);

pinMode(anode[x], INPUT);

pinMode(c, INPUT);

}

}

void loop ()

{

one(50);

two(50);

three(50);

two(50);

one(50);

column(500);

levelthree(500);

leveltwo(500);

levelone(500);

one(75);

leveltwo(500);

two(75);

levelthree(500);

three(75);

randlight(100);

}