That makes sense. I just modified the GUI to send data out over the serial line, this is what it is sending, all on one line:

A2147749888,B1073741824,C537133056,D268435456,E134217728,

Hit me up with a personal message and your email and I can send you the source files and the executable if that would help. From looking at the serial port monitor I am running on the open port the comms look the same if you send them through the serial monitor in arduino IDE as when you send them through the GUI.

readString *= 10;This is an integer operation on a variable whose name implies that it is a string. You might want to give some thought to using names that don't cause incorrect assumptions to be made about their purpose.

After many many hours of UI, code and coordinating with my cousin who is also a programmer we are ready to release the first version of a cube programmer. See the picture below. It can be downloaded via the links below, the first is the EXE file, the second is the source code in c# for the cube. Also the sketch is below that we used for the arduino.

void loop() { for(int rowCount=0; rowCount<5; rowCount++) { dataToRegisters(rowCount); // delay(delayCount); //this is just here for debugging so we can see what is going on } int whileCounter=0; while(Serial.available() > 0) { //store what it gets char incomingByte = Serial.read();

//this will get converted into a while depending on speed tests once we add the other rows to it if(incomingByte == 'A') { messageRow=0; //reset the incoming buffer because we just started a new row readString=NULL; //Serial.println("Row A"); } else if(incomingByte == 'B') { messageRow=1; //reset the incoming buffer because we just started a new rowreadString=NULL; //Serial.println("Row B"); } else if(incomingByte == 'C') { messageRow=2; //reset the incoming buffer because we just started a new rowreadString=NULL; //Serial.println("Row C"); } else if(incomingByte == 'D') { messageRow=3; //reset the incoming buffer because we just started a new rowreadString=NULL; //Serial.println("Row D"); } else if(incomingByte == 'E') { messageRow=4; //reset the incoming buffer because we just started a new rowreadString=NULL; //Serial.println("Row E"); } else if(incomingByte == ',') { //look for the ending number sequence rcvdMessage[messageRow] = readString; //save down the read string into the corresponding message row in our holding array shiftOutValues[messageRow] = rcvdMessage[messageRow]; //for now kick this out, but we will be waiting for a full set of row instructions before this pushes in the final //Serial.println("End of Sequence"); //debug msgs //Serial.println(rcvdMessage[messageRow]); //debug msgs } else { readString *= 10; readString += incomingByte - '0'; } }}

//clear shift register ready for sending data (not sure why we have to do this but just do it! (maybe we can remove it later????) digitalWrite(dataPin, LOW); digitalWrite(clockPin, LOW);

for (byte i = 0; i < 32; i++) { //send all 32 bits out to the registers digitalWrite(clockPin, LOW);

if (shiftdata & shiftmask) { digitalWrite(dataPin, HIGH); //Serial.print('1'); //send data to serial as well so we can see whats going on } else { digitalWrite(dataPin, LOW); //Serial.print('0'); //send data to serial as well so we can see whats going on }

digitalWrite(clockPin, HIGH); //clock each bit into shift register

shiftmask = shiftmask * 2; //right shift bit mask one bit }

digitalWrite(clockPin, LOW); //reset our clock pin just because digitalWrite(latchPin, HIGH); //latch so the LEDs reflect the new patter //Serial.println('B'); //ya just so we get a better debug}