A 4x4x4 LED cube driven by an Arduino UNO and 64 LEDs, with the layer-and-column multiplexing code that animates it.

A DIY 4x4x4 LED cube, based on an Arduino UNO and 64 LEDs. The cube is multiplexed: one helper turns a single LED on by its (x, y, z) coordinate, another switches the layers, and the animation in loop() paints patterns by lighting columns layer by layer with small delays.
void l(int x, int y, int z) { if (y == 0) { digitalWrite(2, LOW); } else if (y == 1) { digitalWrite(3, LOW); } else if (y == 2) { digitalWrite(4, LOW); }
if (x == 0) { if (z == 0) { digitalWrite(9, HIGH); } else if (z == 1) { digitalWrite(11, HIGH); } else if (z == 2) { digitalWrite(13, HIGH); } } if (x == 1) { if (z == 0) { digitalWrite(8, HIGH); } else if (z == 1) { digitalWrite(10, HIGH); } else if (z == 2) { digitalWrite(12, HIGH); } } if (x == 2) { if (z == 0) { digitalWrite(6, HIGH); } else if (z == 1) { digitalWrite(7, HIGH); } else if (z == 2) { digitalWrite(5, HIGH); } }}
void ol(int num) { // layer on if (num == 1) { digitalWrite(2, HIGH); } if (num == 2) { digitalWrite(3, HIGH); } if (num == 3) { digitalWrite(4, HIGH); }}
void onl(int num) { // layer off if (num == 1) { digitalWrite(2, LOW); } if (num == 2) { digitalWrite(3, LOW); } if (num == 3) { digitalWrite(4, LOW); }}
void off(int x) { for (int p = 5; p <= 13; p++) digitalWrite(p, LOW); delay(x);}
void setup() { for (int p = 2; p <= 13; p++) pinMode(p, OUTPUT);}
void loop() { onl(1); onl(2); onl(3); l(1, 0, 1); delay(500); off(50);
l(0,0,0); l(1,0,0); l(2,0,0); l(2,0,1); l(2,0,2); l(1,0,2); l(0,0,2); l(0,0,1); delay(350); ol(2); ol(3); delay(350); off(0);
ol(2); l(0,0,0); l(2,0,0); l(2,0,2); l(0,0,2); delay(400); off(100);}Originally published on sslabs.in.