//Arduino ports #define clockpin 13 // CI #define enablepin 10 // EI #define latchpin 9 // LI #define datapin 11 // DI //Matrix dimensions #define NROWS 4 #define NCOLS 4 //Signals to control the state machine in the Arduino part #define HEAD_R 0x55 #define HEAD_G 0x56 #define HEAD_B 0x57 #define HEAD_ROW 0x58 #define HEAD_COL 0x59 #define HEAD_ALL 0x60 #define HEAD_DIA1 0x61 #define HEAD_DIA2 0x62 #define HEAD_MATRIX 0x63 int NumLEDs = NROWS * NCOLS; int _leds[NROWS*NCOLS][3] = {0}; int SB_CommandMode; int SB_RedCommand; int SB_GreenCommand; int SB_BlueCommand; int _globalC = 0; int _inc; int loopC = 0; //Serial stuff int state = 0; //0 nothing, 1 red, 2 green, 3 blue, 4 read mode int mode = 0; int matrixIndex = 0; int matrixItems[16*3]; int red = 0; int green = 0; int blue = 0; int iRow = 0; int iCol = 0; int iDia1 = 0; int iDia2 = 0; // current values int iR = 0; int iG = 0; int iB = 0; char incomingByte = 0; // for incoming serial data void setup() { pinMode(datapin, OUTPUT); pinMode(latchpin, OUTPUT); pinMode(enablepin, OUTPUT); pinMode(clockpin, OUTPUT); SPCR = (1<0) { int input = Serial.read(); switch (state) { case 0: if (input==HEAD_R) { state = 1; } else if (input==HEAD_G) { state = 2; } else if (input==HEAD_B) { state = 3; } else if (input==HEAD_ROW) { state = 4; } else if (input==HEAD_COL) { state = 5; } else if (input==HEAD_DIA1) { state = 7; } else if (input==HEAD_DIA2) { state = 8; }else if (input==HEAD_ALL) { state = 0; updateColors(); all(0,iR,iG,iB); }else if (input==HEAD_MATRIX) { state = 6; } break; case 1: red = input; state = 0; break; case 2: green = input; state = 0; break; case 3: blue = input; state = 0; break; case 4: state = 0; iRow = input; updateColors(); all(0,0,0,0); row(iRow,0,iR,iG,iB); break; case 5: state = 0; iCol = input; updateColors(); all(0,0,0,0); col(iCol,0,iR,iG,iB); break; case 6: if (matrixIndex>4; while(!(SPSR & (1<>6; while(!(SPSR & (1<>8; while(!(SPSR & (1<