Programming 4x4x4 RGB Cube

Hey there,
I have to do a project for school, where I have to program a 4x4x4 RGB LED cube so that I can choose the colors.
The model is Iduino AD060, which needs which needs an Iduino ST1149 driver board. The cube was already built by my teacher. I have absolutely no clue how that is done so I could only give you this information.

Manual of the cube: http://www.produktinfo.conrad.com/datenblaetter/1500000-1599999/001525427-an-01-en-RGB_CUBE_KIT_WITHOUT_DRIVER_BOARD.pdf
A lot of it is about building the cube, but I don’t need that.

Manual of the driver board: http://www.produktinfo.conrad.com/datenblaetter/1500000-1599999/001525450-an-01-en-8_X_8_RGB_MATRIX_DISPLAY_TREIBER_BOARD.pdf
I don’t know if the code there has anything to do with my project, though.

At the end of the manual of the cube, there is a sample code which I copied, but there are various error messages when I compile it. I hope I installed the Colorduino library correctly. Here’s the code:

#include <Colorduino.h>
typedef struct
{
  unsigned char r;
  unsigned char g;
  unsigned char b;
} ColorRGB;

typedef struct
{
  unsigned char h;
  unsigned char s;
  unsigned char v;
} ColorHSV;

unsigned char plasma[ColorduinoScreenWidth][ColorduinoScreenHeight];
long paletteShift;
//Converts an HSV color to RGB color
void HSVtoRGB(void *vRGB, void *vHSV)
/////////////////////////////////////////////////////////////////////////////////
{
  float r, g, b, h, s, v; //this function works with floats between 0 and 1
  float f, p, q, t;
  int i;
  ColorRGB *colorRGB=(ColorRGB *)vRGB;
  ColorHSV *colorHSV=(ColorHSV *)vHSV;
  h = (float)(colorHSV->h / 256.0);
  s = (float)(colorHSV->s / 256.0);
  v = (float)(colorHSV->v / 256.0);
  
  //if saturation is 0, the color is a shade of grey
  if(s == 0.0)
  {
    b = v;
    g = b;
    r = g;
  }
  //if saturation > 0, more complex calculations are needed
  else
  {
    h *= 6.0; //to bring hue to a number between 0 and 6, better for the calculations
    i = (int)(floor(h)); //e.g. 2.7 becomes 2 and 3.01 becomes 3 or 4.9999 becomes 4
    f = h - i;//the fractional part of h
    p = (float)(v * (1.0 - s));
    q = (float)(v * (1.0 - (s * f)));
    t = (float)(v * (1.0 - (s * (1.0 - f))));
    switch(i)
    { 
      case 0: r=v; g=t; b=p; break;
      case 1: r=q; g=v; b=p; break;
      case 2: r=p; g=v; b=t; break;
      case 3: r=p; g=q; b=v; break;
      case 4: r=t; g=p; b=v; break;
      case 5: r=v; g=p; b=q; break;
      default: r = g = b = 0; break;
    }
  }
  colorRGB->r = (int)(r * 255.0);
  colorRGB->g = (int)(g * 255.0);
  colorRGB->b = (int)(b * 255.0);
}
float dist(float a, float b, float c, float d)
///////////////////////////////////////////////////////
{
  return sqrt((c-a)*(c-a)+(d-b)*(d-b));
}
void plasma_morph()
{
  unsigned char x,y;
  float value;
  ColorRGB colorRGB;
  ColorHSV colorHSV;
  for(y = 0; y < ColorduinoScreenHeight; y++)
  for(x = 0; x < ColorduinoScreenWidth; x++)
  {
    {
      value = sin(dist(x + paletteShift, y, 128.0, 128.0) / 8.0)
      + sin(dist(x, y, 64.0, 64.0) / 8.0)
      + sin(dist(x, y + paletteShift / 7, 192.0, 64) / 7.0)
      + sin(dist(x, y, 192.0, 100.0) / 8.0);
      colorHSV.h=(unsigned char)((value) * 128)&0xff;
      colorHSV.s=255;
      colorHSV.v=255;
      HSVtoRGB(&colorRGB, &colorHSV);
      Colorduino.SetPixel(x, y, colorRGB.r, colorRGB.g, colorRGB.b);
    }
  }
  paletteShift++;
  Colorduino.FlipPage(); // swap screen buffers to show it
}
  
/********************************************************
Name: ColorFill
Function: Fill the frame with a color 
Parameter:R: the value of RED. Range:RED 0~255
G: the value of GREEN. Range:RED 0~255
B: the value of BLUE. Range:RED 0~255
********************************************************/

void ColorFill(unsigned char R,unsigned char G,unsigned char B)
{
  PixelRGB *p = Colorduino.GetPixel(0,0);
  for(unsigned char y=0;y<ColorduinoScreenWidth;y++)
  {
    for(unsigned char x=0;x<ColorduinoScreenHeight;x++)
    {
      p->r = R;
      p->g = G;
      p->b = B;
      p++;
    }
  }
  Colorduino.FlipPage();
}

void setup()
{
  Colorduino.Init(); // initialize the board
  // compensate for relative intensity differences in R/G/B brightness
  // array of 6-bit base values for RGB (0~63)
  // whiteBalVal[0]=red
  // whiteBalVal[1]=green
  // whiteBalVal[2]=blue http://keyes-arduino.taobao.com
  unsigned char whiteBalVal[3] = {36,63,63}; // for LEDSEE 6x6cm round matrix
  Colorduino.SetWhiteBal(whiteBalVal);
  // start with morphing plasma, but allow going to color cycling if desired.
  paletteShift=128000;
  unsigned char bcolor;
  //generate the plasma once
  for(unsigned char y = 0;y < ColorduinoScreenHeight; y++)
  for(unsigned char x = 0; x < ColorduinoScreenWidth; x++)
  {
    //the plasma buffer is a sum of sines
    bcolor = (unsigned char)(128.0 + (128.0 * sin(x*8.0 / 16.0))+ 128.0 + (128.0 * sin(y*8.0 / 16.0))) / 2;
    plasma[x][y] = bcolor;
  }
  // to adjust white balance you can uncomment this line
  // and comment out the plasma_morph() in loop()
  // and then experiment with whiteBalVal above
  // ColorFill(255,255,255);
}

void loop()
{
  plasma_morph();
}

I don’t understand everything, I only have some experience with Gamemaker Studio, so this is something entirely new for me.

These are the error messages:

Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"

In file included from C:\Program Files (x86)\Arduino\libraries\Colorduino/Colorduino.h:44:0,

                 from C:\led_rgb_cube\led_rgb_cube.ino:1:

C:\Program Files (x86)\Arduino\libraries\Colorduino/ColorTools.h: In member function 'int ColorTools::RGBtoInt(void*)':

C:\Program Files (x86)\Arduino\libraries\Colorduino/ColorTools.h:206:40: warning: left shift count >= width of type

   return (((unsigned int)colorRGB->r)<<16) + (((unsigned int)colorRGB->g)<<8) + (unsigned int)colorRGB->b;

                                        ^

C:\led_rgb_cube\led_rgb_cube.ino: At global scope:

led_rgb_cube:7: error: conflicting declaration 'typedef struct ColorRGB ColorRGB'

 } ColorRGB;

   ^

In file included from C:\Program Files (x86)\Arduino\libraries\Colorduino/Colorduino.h:44:0,

                 from C:\led_rgb_cube\led_rgb_cube.ino:1:

C:\Program Files (x86)\Arduino\libraries\Colorduino/ColorTools.h:38:3: note: previous declaration as 'typedef struct ColorRGB ColorRGB'

 } ColorRGB;

   ^

led_rgb_cube:14: error: conflicting declaration 'typedef struct ColorHSV ColorHSV'

 } ColorHSV;

   ^

In file included from C:\Program Files (x86)\Arduino\libraries\Colorduino/Colorduino.h:44:0,

                 from C:\led_rgb_cube\led_rgb_cube.ino:1:

C:\Program Files (x86)\Arduino\libraries\Colorduino/ColorTools.h:44:3: note: previous declaration as 'typedef struct ColorHSV ColorHSV'

 } ColorHSV;

   ^

C:\led_rgb_cube\led_rgb_cube.ino: In function 'void ColorFill(unsigned char, unsigned char, unsigned char)':

led_rgb_cube:102: error: 'PixelRGB' was not declared in this scope

   PixelRGB *p = Colorduino.GetPixel(0,0);

   ^

led_rgb_cube:102: error: 'p' was not declared in this scope

   PixelRGB *p = Colorduino.GetPixel(0,0);

             ^

exit status 1
conflicting declaration 'typedef struct ColorRGB ColorRGB'

I really need help with what I have to do now. All I need to do is setting the colors of the individual to what I want.

Edit: Sorry if this is not the right page but it’s my first time on this forum.

I hope I installed the Colorduino library correctly.

You must have, since the code that doesn't compile is in the Colorduino library.

What you didn't do was post a link to the Colorduino library.

The PDF file contains a link to the Colorduino library, which has a method, GetPixel() that returns a pointer to a ColorRGB instance. Why does your code define the type as pointer to PixelRGB?

Thanks for your answer, i got rid of the error messages somehow. im having trouble uploading the code to the board but im gonna ask this somewhere else.