[vc_row][vc_column][vc_column_text][/vc_column_text][vc_tour][vc_tab title=”Introduction” tab_id=”1395023110-1-12″][vc_column_text]8x8x8 RGB LED cube is one of the stunning RGB LED Cube designed by LinkSprite. It has Arduino compatible interface and uses the SPI interface to communicate with Arduino/pcDuino.
[/vc_column_text][/vc_tab][vc_tab title=”Wiring Diagram” tab_id=”1395023110-2-2″][vc_column_text]
The 8x8x8 LED Cube can be directly installed on pcDuino. However, we do recommend to use a T Board to translate the voltage.[/vc_column_text][/vc_tab][vc_tab title=”Test code” tab_id=”1395024761307-2-8″][vc_column_text]
#include <SPI.h> #define STATUS_PIN 9 #define CS_PIN 10 #define MOSI_PIN 12 #define MISO_PIN 11 #define SCK_PIN 13 #define SPI_MODE SPI_MODE1 #ifdef PCDUINO_IDE #define SpiExchangeByte(x) SPI.transfer(x,SPI_CONTINUE) #else #define SpiExchangeByte(x) SPI.transfer(x) #endif void SetDefaultTask(char task,long repeatTime) { bool DeviceStatus; unsigned short count; DeviceStatus = digitalRead(STATUS_PIN); digitalWrite(CS_PIN,LOW); SpiExchangeByte(2); while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(task);//X while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Y while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Z while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(repeatTime & 0xff);//R while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((repeatTime>>8) & 0xff);//G while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((repeatTime>>16) & 0xff);//B while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((repeatTime>>24) & 0xff);//RSV while(digitalRead(STATUS_PIN) == DeviceStatus); digitalWrite(CS_PIN,HIGH); } void SetLedCubeColor(long color) { bool DeviceStatus; unsigned short count; DeviceStatus = digitalRead(STATUS_PIN); digitalWrite(CS_PIN,LOW); SpiExchangeByte(1); while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//X while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Y while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Z while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(color & 0xff);//R while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>8) & 0xff);//G while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>16) & 0xff);//B while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>24) & 0xff);//RSV while(digitalRead(STATUS_PIN) == DeviceStatus); digitalWrite(CS_PIN,HIGH); } void SetPonitColor(char x,char y,char z,long color) { bool DeviceStatus; unsigned short count; DeviceStatus = digitalRead(STATUS_PIN); digitalWrite(CS_PIN,LOW); SpiExchangeByte(3); while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(x);//X while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(y);//Y while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(z);//Z while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(color & 0xff);//R while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>8) & 0xff);//G while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>16) & 0xff);//B while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte((color>>24) & 0xff);//RSV while(digitalRead(STATUS_PIN) == DeviceStatus); digitalWrite(CS_PIN,HIGH); } void SendImageData(void) { unsigned short tmpShort; bool DeviceStatus; unsigned short count; DeviceStatus = digitalRead(STATUS_PIN); digitalWrite(CS_PIN,LOW); SpiExchangeByte(4); while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//X while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Y while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//Z while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//R while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//G while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//B while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; SpiExchangeByte(0);//RSV while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; for(tmpShort =0;tmpShort < 512*3;tmpShort ++) { SpiExchangeByte((char)tmpShort); while(digitalRead(STATUS_PIN) == DeviceStatus); DeviceStatus = !DeviceStatus; } digitalWrite(CS_PIN,HIGH); } void setup() { // put your setup code here, to run once: pinMode(STATUS_PIN, INPUT); pinMode(CS_PIN, OUTPUT); pinMode(MOSI_PIN, OUTPUT); pinMode(MISO_PIN, INPUT); pinMode(SCK_PIN, OUTPUT); digitalWrite(CS_PIN,HIGH); digitalWrite(STATUS_PIN,HIGH); digitalWrite(SCK_PIN,LOW); SPI.begin(); SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE); SPI.setClockDivider(SPI_CLOCK_DIV4); SetDefaultTask(0,15); SetLedCubeColor(0x00000000); SendImageData(); delay(5000); } void loop() { // put your main code here, to run repeatedly: printf("SetLedCubeColor(R);n"); SetLedCubeColor(0x00ff0000); delay(1000); printf("SetLedCubeColor(G);n"); SetLedCubeColor(0x0000ff00); delay(1000); printf("SetLedCubeColor(B);n"); SetLedCubeColor(0x000000ff); delay(1000); printf("SetDefaultTask(1);n"); SetDefaultTask(1,20); delay(5000); printf("SetDefaultTask(2);n"); SetDefaultTask(2,15); delay(5000); printf("SetDefaultTask(3);n"); SetDefaultTask(3,15); delay(5000); }
[/vc_column_text][/vc_tab][vc_tab title=”Descriptions of Commands” tab_id=”1395024762137-3-1″][vc_column_text]8x8x8 RGB LED cube supports four kinds of commands. The format of the commands is below: [cmd] [x] [y] [z] [r] [g] [b] [rsv]
In the command sequence:
cmd is the command byte.
x, y, z, represents the three axis coordinate values.
r, g, b represents the three color of red, blue, green value of corresponding coordinate , rsv is a reserved char.
Command 0x01: Set the whole LED cube into a certain color. X/Y/Z is invalid.
Command 0x02: Set a demo mode, X means demo mode X. Y and Z are invalid. t/h/b/rsv means the repeat number. There are currently three demo mode.
Command 0x03: Set the color of a certain LED. x, y, z is the coordinate. r, g, b is the color.
Command 0x04: Send the data starting from (0,0,0). x, y, z, r, g, b, rsv are invalid. The data after the command is the data of color.
[/vc_column_text][/vc_tab][vc_tab title=”Test result” tab_id=”1395026470746-4-0″][vc_column_text][/vc_column_text][/vc_tab][/vc_tour][/vc_column][/vc_row]
Leave a Reply
You must be logged in to post a comment.