Full walk through tutorial.. After the break..
4×4 RGB Charlie Cube
What is it?
Charliecube is a programmable Full Color 4x4x4 LED Cube. What makes it special is it’s the first of it kind to employ the use of full color Led’s with out all the additional hardware such as shift registers. Using shift register IC’s both up’s the cost and complexity. Thanks to Asher Glick who developed this new method a 4x4x4 RGB LED Cube can be built using very few materials, on the cheap and my fav, the finished product is hands down Way more organized and pleasing to the eyes. So with this new method all 64 RGB Leds can be controlled with only 16 digital Pins from a single arduino.
The Build. SECTION: 1
In this section I’m am going to show you what you need and how to build 1 of the 16 LED Spires.
Materials:
- Arduino: any type with a 328p Chip. Hopefully you already have one. If not Check EBAY A NANO Clone is about $15 free Shipping
- 64 RGB LEDS, Diffused, Common Cathode ( I sourced 100 of them from Ebay for about $15 free shipping. LINK )
- 1 Large RadioShack PC Grid Proto Board (4.5″ x 6.625″ ) $2.19
- 40 feet of Solid Core 20 Gauge Wire (or Similar Size) for supporting the spires. “Lowes” has a nice package of 20 gauge x 175ft galvanized steel Wire for about $5-6 Wire Package Looks like This
- 10 feet of 22 gauge wire (or Similar) for wiring the Spires together and to Arduino.
- Optional – Paint to Color protoboard. White reflects, Black Hides Everything.
- Optional – Large project case from Radio shack to put your Cube in and hide the unsightly.
Building a Spire:
Take your first 4 Leds and bend all the Leads out as shown below.
Make note of the notch so you bend ALL leds the SAME!
Next I found it best to build a jig. This is so you can solder them all spaced evenly.
To do this I found an old package box. You can use what ever you have that is deep enough for the led leads to poke through.
I then poked four holes in a straight line using a Ruler spaced “3.5cm=35mm” apart.
Then start from the top and placing your leds in each hole.
Note: VERY IMPORTANT! Each Led is 90 degrees clockwise from each other. :
- TOP = Notch on Right
- Next one down = Notch on the bottom
- Third one down = Notch on the left
- Bottom = Notch on top
Below you can see a Picture of what this looks like…
Now your going to need some of the 20 gauge steel wire to solder together your LED Spires.
NOTE: The biggest trick to this looking good is to get the wire as straight as possible.
The wire as you get it is wound up so when you try to straighten it ends up anything but. There are many different methods to getting it straight again. I found my way to be the quickest and cheapest with pretty damn good results. I though about just explaining how i do it but in the end who doesn’t just want to see in action RIGHT!
So here’s a video with me showing you how I do it.
Note: I cut the wire lengths to about 20cm=200mm So I have plenty extra wire hanging off the top and bottom.
Next Were going to take 4 wires and one by one solder them to there parallel leads as shown below.
After you solder all four leads to the single piece of wire. Rotate all your leds in your jig so it is easier to solder with the wire on top.
You can see in the picture below I have already done two sides. Try to use as little solder as possible.
NOTE: Check ONE MORE TIME all your LEDS are Rotated Correctly. Before You solder all your leads. It’s much simpler to fix a mistake here than it will be later on.
Ok once you have all four side soldered.
And you have made 15 more exactly the same. You should have a grand total of 16 spires looking like THIS!
And now would be a good time to check all your connections. If you have AA battery or 3-5v power source you can put them on the wires in every combination to make sure all you leds light up. When your properly satisfied or Have Tiger Blood Confidence and decide to skip checking them you can move on to trimming all the leads sticking out.
After the Trimming you should end up with bunch of these.
Time For The ProtoBoard:
So For the protoboard I know there is going to be 16 spires in all. Too have a good even spacing, that would also fit on the protoboard I Marked 10 holes between each spire future location’s center evenly on the board. After i mark it all out you can see the cut edge of the board on the right. I cut down the access board i didn’t need so the spires would be even from both edges. then drilled holes for mounting. The holes for mounting are only if you intend to put it in an enclosure. As these holes will need to be drilled to fit what ever enclosure you decide to use if you use one.
Once your marking are made you should end up with a board looking like this.
At This Point..Take a darn Break you deserve it. I’m sure all that soldering has left you a soldering professional with hand cramps and permanent scwinty Eye Syndrome.
Assembly. Section: 2
Time to Start placing the spires in there proper locations and soldering them in. Pay Attention to the rotation of the spires you want them all Facing the same direction. Below is a diag showing notch locations on the led. If by mistake you get them facing the wrong direction as long as there all facing the same direction, all that will be off are which colors turn on and can be changed in the code. How ever don’t make a mistake Why add stuff to do. lol
Start from the back and work your way to the front. It makes it simpler to solder that way. So your not trying to solder in between everything.
Wiring. Section: 3
So Now It’s Time to turn the Board over and start wiring.
The Easiest way to wire the board is in four groups of four.
The First and Second groups are fairly simple.
The third and fourth Groups Are a Little tricky just take your time and double and triple check before you solder.
NOTE: That the Fourth Group’s Wires are not in the Same order.
Arduino Pins. Section:4
Connect those 16 Wires to the arduino as lists below and then you are done.
You’ll see that we use 3 of the analog pins as Digital pins. Cool Huh!
| Wire Number | Arduino Pin | AVR Pin |
|---|---|---|
| 1 | Digital 2 | Port D – Pin 2 [PD2] |
| 2 | Digital 3 | Port D – Pin 3 [PD3] |
| 3 | Digital 4 | Port D – Pin 4 [PD4] |
| 4 | Digital 5 | Port D – Pin 5 [PD5] |
| 5 | Digital 6 | Port D – Pin 6 [PD6] |
| 6 | Digital 7 | Port D – Pin 7 [PD7] |
| 7 | Digital 8 | Port B – Pin 0 [PB0] |
| 8 | Digital 9 | Port B – Pin 1 [PB1] |
| 9 | Digital 10 | Port B – Pin 2 [PB2] |
| 10 | Digital 11 | Port B – Pin 3 [PB3] |
| 11 | Digital 12 | Port B – Pin 4 [PB4] |
| 12 | Digital 13 | Port B – Pin 5 [PB5] |
| 13 | Analog 0 (Digital 14) | Port C – Pin 0 [PC0] |
| 14 | Analog 1 (Digital 15) | Port C – Pin 1 [PC1] |
| 15 | Analog 2 (Digital 16) | Port C – Pin 2 [PC2] |
| 16 | Analog 3 (Digital 17) | Port C – Pin 3 [PC3] |
The AVR pins are ment for an ATmega328 if you are using an ATmega32U4 (Arduino Leonardo) you will need to use a different pin mapping
Download Project Files/Sketch. HERE
Programming. Section:6
The libraries developed by Asher Glick for the charliecube provide you with a nice set of functions that you can use to draw animations.
| drawLed() | drawBoxOutline() | drawHollowBox() | flushBuffer() |
| drawBox() | drawBoxWalls() | drawLine() | clearBuffer() |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawLed()
This function turns on leds at a specified position. Depending on which color this function turns on different colors of the LED
drawLed(color, x-pos, y-pos, z-pos);
integer: red, blue, green, purple, yellow, teal, white, off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include "cubeplex.h"int color = red;void setup() { // initilize the cube display initCube(); // how many secconds until continuePattern is set to false animationMax = 10;}void loop() { randomLed();}void randomLed(){ continuePattern = true; int animationSpeed = 100; while (continuePattern) { int xpos = random(0,4); int ypos = random(0,4); int zpos = random(0,4); drawLed(color,xpos,ypos,zpos); flushBuffer(); clearBuffer(); delay(animationSpeed); }} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawBox()
This function will draw a filled in box of the specified color on the cube
drawBox(color, start-x, start-y, start-z, end-x, end-y, end-z);
integer red blue green purple yellow teal white off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
end-x: x coordinate for the ending point
integer 0 1 2 3
end-y: y coordinate for the ending point
integer 0 1 2 3
end-z: z coordinate for the ending point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include "cubeplex.h"void setup() { //initilize the cube display initCube(); // set the number of seconds until continuePattern is set to false animationMax = 10;}void loop() { bigBlueBox(); tinyGreenBox();}void bigBlueBox() { continuePattern = true; draw(blue,0,0,0,3,3,3); flushBuffer(); clearBuffer(); // do nothing while the pattern continues while(continuePattern);}void tinyGreenBox() { continuePattern = true; drawBox(green,FULL,1,1,1,2,2,2); flushBuffer(); clearBuffer(); // loop until the pattern is done while(continuePattern);} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawHollowBox()
This function will draw the walls, celing, and floor of a defined box
drawHollowBox(color, start-x, start-y, start-z, end-x, end-y, end-z);
integer red blue green purple yellow teal white off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
end-x: x coordinate for the ending point
integer 0 1 2 3
end-y: y coordinate for the ending point
integer 0 1 2 3
end-z: z coordinate for the ending point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include "cubeplex.h"int color = red;void setup() { // initilize the cube display initCube(); // set the number of seconds each animation should run for animationMax = 10;}void loop() { pulsingCube();}void pulsingCube() { continuePattern = true; int animationSpeed = 100; while (continuePattern) { for (int i = 0; i < 4; i++) { drawHollowBox(color,0,0,0,i,i,i); flushBuffer(); clearBuffer(); delay(animationSpeed); } for (int i = 0; i < 4; i++) { drawHollowBox(color,i,i,i,3,3,3); flushBuffer(); clearBuffer(); delay(animationSpeed); } color=nextColor(color); }} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawBoxOutline()
This function will draw edges of a defined box but none of the planes
drawBoxOutline(color, start-x, start-y, start-z, end-x, end-y, end-z);
integer red blue green purple yellow teal white off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
end-x: x coordinate for the ending point
integer 0 1 2 3
end-y: y coordinate for the ending point
integer 0 1 2 3
end-z: z coordinate for the ending point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include "cubeplex.h"int color = red; void setup() { // initilize the cube display initCube(); // set the number of seconds each animation should run for animationMax = 10;}void loop() { pulsingCube();}void pulsingCube() { continuePattern = true; int animationSpeed = 100; while (continuePattern) { for (int i = 0; i < 4; i++) { drawBoxOutline(color,0,0,0,i,i,i); flushBuffer(); clearBuffer(); delay(animationSpeed); } for (int i = 0; i < 4; i++) { drawBoxOutline(color,i,i,i,3,3,3); flushBuffer(); clearBuffer(); delay(animationSpeed); } color=nextColor(color); }} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawBoxWalls()
This function will draw the virtical walls and all four sides of a defined box
drawBoxWalls(color, start-x, start-y, start-z, end-x, end-y, end-z);
integer red blue green purple yellow teal white off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
end-x: x coordinate for the ending point
integer 0 1 2 3
end-y: y coordinate for the ending point
integer 0 1 2 3
end-z: z coordinate for the ending point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include "cubeplex.h"int color = red; void setup() { // initilize the cube display initCube(); // set the number of seconds each animation should run for animationMax = 10;}void loop() { fountian();}void fountian() { continuePattern = true; int animationSpeed = 100; while (continuePattern) { for (int z = 0; z <= 3; z++) { drawBoxWalls(color,1,1,z,2,2,z); flushBuffer(); clearBuffer(); delay(animationSpeed); } for (int z = 3; z >= 0; z--) { drawBoxWalls(color,0,0,z,3,3,z); flushBuffer(); clearBuffer(); delay(animationSpeed); } color=nextColor(color); }} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
drawLine()
This function will attempt to draw a line between the two points given. Due to the limited avalibility of pixels the best approximation is chosen for each pixel value
drawLine(color, start-x, start-y, start-z, end-x, end-y, end-z);
integer red blue green purple yellow teal white off
brightness: what brightness should the led be at
integer 0 1 2 3 4 5 6 7 8 HALF=4 FULL=8
start-x: x coordinate for the starting point
integer 0 1 2 3
start-y: y coordinate for the starting point
integer 0 1 2 3
start-z: z coordinate for the starting point
integer 0 1 2 3
end-x: x coordinate for the ending point
integer 0 1 2 3
end-y: y coordinate for the ending point
integer 0 1 2 3
end-z: z coordinate for the ending point
integer 0 1 2 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include "cubeplex.h"int color = red;void setup() { initCube; animationMax = 10;}void loop() { planarSpin();}void planarSpin() { continuePattern = true; int animationSpeed = 50; int spinsPerColor = 5; // a spin is actually half a revolution while (continuePattern) { int x = 0; int y = 0; for (int i = 0; i < spinsPerColor; i++) { for (int x = 0; x < 3; x++) { drawLine(color,x,0,0,3-x,3,0); drawLine(color,x,0,1,3-x,3,1); drawLine(color,x,0,2,3-x,3,2); drawLine(color,x,0,3,3-x,3,3); flushBuffer(); clearBuffer(); delay(animationSpeed); } for (int y = 0; y < 3; y++) { drawLine(color,3,y,0,0,3-y,0); drawLine(color,3,y,1,0,3-y,1); drawLine(color,3,y,2,0,3-y,2); drawLine(color,3,y,3,0,3-y,3); flushBuffer(); clearBuffer(); delay(animationSpeed); } } color = nextColor(color); }} |
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
flushBuffer()
This takes the buffer frame and sets the display memory to match, because the display memory needs to be faster it is split up into two arrays instead of just one. The display frame is actually a ciclic linked list which allows the program to just loop through and turn on the LEDs without the need to check to see if it is at the end of the loop
=-=-==-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
clearBuffer()
This function will clear the buffer that you can write to, this will allow you to draw an eniterly new frame int othe buffer
Download Project Files/Sketch. HERE

Subscribe













There’s an easier way to straighten the wire (good call on the Lowes wire, BTW): Use a drill and a vise. Clamp one end of the wire in the vise and the other end in an adjustable-speed drill, then slowly run the drill while maintaining tension on the wire. It’ll straighten out fairly quickly. Remove it from the drill’s chuck and voila: feet of straight wire! And, as always, wear eye protection!
I don’t know why I can’t get any of the code to compile. I need help.
I’ll be glad to help you. But im afraid i need a few more details than it doesn’t work. Are you using arduino IDE 22 or 1.0 if so is it set for the proper arduino board your using. If so what errors are you getting when you try to upload your sketch.
Sobiguy
I am using Arduino 1.0.1, I have the Arduino Uno and the program is set to the “Arduino Uno “board. When I try to compile I get a long list of errors about undecleared items. Example => sketch_aug22a:361: error: ‘nextcolor’ was not declared in this scope. I can’t seem to copy and paste them onto this page to show them to you. Also I’m just starting and don’t know how to write code so knowing the errors does not help me much.
I have successfully built and run a 4×4 LED cube recently using code found online so I know the Arduino is working fine.
Hope this helps and thanks for your timely response.
js
If your getting the error no declared for nextcolor. I’d say that you need to add the three .h files to your library folder within the arduino ide.
If you notice at the top of the .pde sketech it uses an #include “cubeplex.h”
This like many other sketches is used to link to many lines of functions written for you to be called upon.
In the zip file you downloaded there’s three files:
cubeplex.h
mappings.h
niceTimer.h
These all need to be placed in your arduino ide’s library folder as this is the default location there #includes are looked for.
Be sure to restart the IDE after you copy them there……
If this works for you please come back and let me know So others may learn as well
Thx,
Sobiguy
How exactly is this programmed did you just do it yourself or did you use the “charliecube” example when you. Im having a hard time programming this.
Need to replace #include WProgram.h for Arduino compatibility with this:
#if defined(ARDUINO) && ARDUINO >= 100
#include “Arduino.h” // for digitalRead, digitalWrite, etc
#else
#include “WProgram.h”
#endif
Sketch is now Updated to be IDE 1.0+ Compliant .
Good catch thx AW….
Sobiguy…..
I love the easier set up you have here for the cube build. I have 200 rgb leds that I want to use but they are common anode, I’ll be using an arduino uno too. What do I need to do to make this work?
I’m afraid That the code is designed for common cathode by mr. glick.
It could in theory be re-coded for common anode but it but be quite extensive. If its something you would care to try by all means your welcome to. You can start with remapping the led pins arrangement in mappings.h and a few more changes cubeplex.h. if you complete your tasks Let me know as i would gladly like to share your results with others.
Thx sobiguy
Hi guys,
first of all.. awesome project.
I already build a 4x4x4 rgb cube.. but now i want to do it the “arduino” way.
Is there any chance to get the IDE1.0+ compatible sketch ? The download link
below seems to be down.
Thank you
greets
tehDroid
Hey there tehDroid,
Thx for letting me know the link was down. Totally my fault.
But now it ‘s fixed and it is the IDE 1.0+ version..
Enjoy!!
Sobiguy
Hey, thanks to you and Glick for your work and putting up this information. As this is my first real project, I made some mistakes along the way. I used an arduino micro, which uses the 32u4 chip. I believe this is the root cause to my compiling issues where it tells me WGM22 is not defined in the proper scope. Maybe I’m wrong about that but regardless the pin mapping will inevitably not work as is. I’ve been trying to figure how to remap the pins but have no luck on finding this info. First I tried to find info about the 328 that could lead me to understanding what the mapping is doing but I have yet to figure that out. I’m assuming that if I can wrap my brain around that then I would be able to reconfigure it for the 32u4. If you have any advice, it would be greatly appreciated. Wish I had paid more attention to chip requirements.
Dustin,
As i do not own a arduino mirco. Wheres little I’m afraid that i like “sure sure help you with.
The two libraries your really going to have to work on are mappings.h and nicetimer.h The mappings.h sets the pin ports and value… the nice timer sets the prescale freq of the MCU.
Think it would be easier just to jump on the E-Bay and get a arduino nano which use a 328P same as the uno. And there Super Cheap!!! Like $12 free shipping. Thats cheaper than lunch……
Good luck dustin With what ever path you choose……
Quick question, Arduino Uno is running on 5V. Don’t we need any resistors?
Walker,
Good question. Legally I should probably say yes, However this is two fold,
1. It would up the component count with not much advantage. Because the brightness would be considerably dimmer. The reason for this leads me to part two.
2. The code is setup to increase the clock cycle rate and act like a matrix-ed display being as that is basically what it is. The leds are handled in a “POV/PWM manor” meaning they are being turned off and on fast enough to falsely appear as tho more than one led is on at a time. The Leds are only being lit for less than a faction of a Milli Second. Meaning there is Not really adequate time to do any real damage to either the leds or the MCU.
I also would like to mention this method has been used quite successfully many times and are still running strong.
Hope this helps
Sobiguy
I have a few problems. The LEDs seem to be offset by 1 height, This isn’t noticable during trifade, or planar spin but during fountain for example, the fountain “erupts” at the 3rd level – if you know what i mean – and continues down to the first level and then to the fourth level. Same with the boxes, the boxes are chopped in half and displayed on the fourth and first level.
Also, there seem to be some sort of leakage, causing, very dim red colour to be turned on at certain points of time. Is this normal?
btw, drawLed(red, 0, 0, 0) turns on the top LED for first row and columun.
drawLed(red, 0, 0, 1) turns on the bottommost LED for first low and column.
z= 0 is top(4th)
z= 1 is bottom(1st)
z = 2 is 2nd from bottom
z = 3 is 3rd from bottom.
Pretty sure I wired them correctly.
WaLker,
Very little red flicker is normal. if your getting a lot of other colors flickering when they shouldn’t be then you have a cold solder joint and/or a mis-wiring. Don’t be discouraged this happens to all of us. There’s a lot of joints. I myself actually had a few spires in the wrong rotation the first time around. So I added the sketch i used to determine were I went wrong when i built mine. Above you will see I have added a Hardware Test Sketch. This will go through each LED one by one in each color. 0,0,0 should be in lower corner it goes up and out from there. IF your colors are not in order chances are you have mis-wired something. This Sketch should help you along with double checking your spire rotation and wiring diagrams from above.
Lastly, Pay close attention To group four of the wiring as they are not in the same numbering order as the rest.
Sobiguy
Checked the wireings a bazillion times, its all correct.
Anyways since the offsets are consistent, I just added a little bit of code to fix it.
My cube is now 100 percent complete. Thank you for your fast replies!
The red leakage irks me somehow, is it because the foward voltage of the red is lower than blue and green? Definitely no way to fix it huh?
My cube is offset too, any word on walkers code to fix this?
Thanks
WaLKeR, I have had the very same problem with the 1st and 4th plane being swapped. Must be a human error writing this manual, cause I also checked it over and over again. This should be resolved by rotating every led tower 90° Counter Clockwise before soldering.
what did you change in your code?
If you already soldered your cube changing the code is the only alternative off course
so i did everything and nothing seems to happen..
all wires are connected on an arduino mega adk to digital 2-17, code compiles and uploads ok, everything seems fine, except that no led is turning on, not with the test or the actual program
nevermind, it worked. i had to remap the ports http://arduino.cc/en/Hacking/PinMapping2560
Yeah the red comes from cross talk in the over clocked pins. It could be fixed but would up the parts count alot. people having a group that comes out wrong make sure you double and triple check group 4 as they are in a different order. I will however double check it as i believe I ended up wiring group 4 differently in the end for easier soldering. I check it for sure this week and make updates.. Ok
Sobiguy….
is it only me that if i wanna turn off the cube
drawBox(off,0,0,0,3,3,3);
flushBuffer();
clearBuffer();
i still get the first led (0,0) on ?
same thing happens if i only want to draw on led to off
Hey WaLkeR
Having the exact same problem as you have. What did you change in the code?
@sobisource could you drop him a mail so he checks back this blog post?
Check below.
Love this and had to make it.
I made a small adaptation. I bent the led pins as you have done but then bent them back to their original direction so they now have a small dogleg. Then I lay the next led between the legs turn the notch to the left and solder and repeat.
Makes it easier to hold in my helping hand clamps and I don’t need the extra wire from top to bottom.
This means I can also add layers to the top as high as I want as long as I turn the notch to the right for each layer.
If you have already soldered it onto the board, the only way is a code fix. Fortunately the code fix is ridiculously simple.
Open up “cubeplex.h” and locate the drawLed() function.
Add the following to the start of the function.
z++;
If (z==4) z = 0;
Thanks, that worked perfectly.