Display driver code for lighting 1-64 LEDs in 4x4x4 cube.
/*
4x4x4 LED Cube
Connection Setup:
Columns
[(x,y)-Pin]
(1,1)-13
(1,2)-12
(1,3)-11
(1,4)-10
(2,1)-9
(2,2)-8
(2,3)-7
(2,4)-6
(3,1)-5
(3-2)-4
(3-3)-3
(3,4)-2
(4,1)-1
(4,2)-0
(4,3)-A5
(4,4)-A4
Layers
[layer-Pin]
a-A0
b-A1
c-A2
d-A3
JOYSTICK CONTROL
VRX - A5
VRY - A7
JSW - D21 (VRZ SIKE :-) (o'v'o)
*/
//bool thing[64]
//initializing and declaring led rows
int column[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,17,16};
//initializing and declaring led layers
int layer[4]={A3,A2,A1,A0};
int time = 250;
bool test[64];
int jsw = 21;
int vrx = A7;
int vry = A5;
int returnDir(){
int x;
int y;
//Z MAP
// 0 1 2
// 3 4 5
// 6 7 8
int z;
int w;
x = analogRead(vrx);
//Serial.print("x value: ");
//Serial.print(x);
//Serial.print(" ");
y = analogRead(vry);
//Serial.print(" y value: ");
//Serial.println(y);
if(x > 682){
z = 0;
}
if(x > 341 && x < 683){
z = 1;
}
if(x < 342){
z = 2;
}
if(y > 682){
w = 2;
}
if(y > 341 && y < 683){
w = 1;
}
if(y < 342){
w = 0;
}
return 3*w+z;
}
void setup()
{
//setting rows to ouput
for(int i = 0; i<16; i++)
{
pinMode(column[i], OUTPUT);
}
//setting layers to output
for(int i = 0; i<4; i++)
{
pinMode(layer[i], OUTPUT);
}
//seeding random for random pattern
//randomSeed(analogRead(10));
for(int i = 0; i<64; i++){
test[i] = 0;
}
pinMode(vrx, INPUT);
pinMode(vry, INPUT);
pinMode(jsw, INPUT);
Serial.begin(9600);
}
void turnEverythingOff()
{
for(int i = 0; i<16; i++)
{
digitalWrite(column[i], 1);
}
for(int i = 0; i<4; i++)
{
digitalWrite(layer[i], 0);
}
}
void turnEverythingOn()
{
for(int i = 0; i<16; i++)
{
digitalWrite(column[i], 0);
}
//turning on layers
for(int i = 0; i<4; i++)
{
digitalWrite(layer[i], 1);
}
}
void OneOn(int x, int y, int z)
{
digitalWrite(layer[z],1);
for (int i=0; i<16; i++)
{
digitalWrite(column[i],1);
}
digitalWrite(-4*x-y+20, 0);
}
void Light(bool leds[64], int dur){
for (int j=0; j<ceil(dur/10); j++){
for (int i=0; i<64; i++){
if (leds[i]){
digitalWrite(column[i%16],0);
digitalWrite(layer[int(floor(i/16))],1);
}
else {
digitalWrite(column[i%16],1);
digitalWrite(layer[int(floor(i/16))],0);
}
delayMicroseconds(156);
}
}
}
//xxxxxxxxxxxxxxxxxxxxFUNCTION LOOPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int dir;
int b = 63;
void loop(){
dir = returnDir();
if(b<63){
test[b+1]=0;
}
test[b]=1;
Light(test,10);
Light(test,100);
if(dir == 1){
b=b-1;
}
}