The functions looks like this to day:
int skipOut=0;
void serialOut_GUI() {
if(skipOut++>=updateRate) {
skipOut = 0;
//Filtered and unfiltered angle
Serial.print(ACC_angle, DEC); Serial.print(",");
Serial.print(actAngle, DEC); Serial.print(",");
//Raw sensor data
Serial.print(sensorValue[ACC_X], DEC); Serial.print(",");
Serial.print(sensorValue[ACC_Z], DEC); Serial.print(",");
Serial.print(sensorValue[GYR_Y], DEC); Serial.print(",");
Serial.print(pTerm, DEC); Serial.print(",");
Serial.print(iTerm, DEC); Serial.print(",");
Serial.print(dTerm, DEC); Serial.print(",");
Serial.print(drive, DEC); Serial.print(",");
Serial.print(error, DEC); Serial.print(",");
Serial.print(setPoint, DEC); Serial.print(",");
//PID Parameters
Serial.print(K, DEC); Serial.print(",");
Serial.print(Kp, DEC); Serial.print(",");
Serial.print(Ki, DEC); Serial.print(",");
Serial.print(Kd, DEC); Serial.print(",");
//loop
Serial.print(STD_LOOP_TIME, DEC); Serial.print(",");
Serial.print(lastLoopUsefulTime, DEC); Serial.print(",");
Serial.print(lastLoopTime, DEC); Serial.print(",");
Serial.print(updateRate, DEC); Serial.print(",");
Serial.print(motorOffsetL, DEC); Serial.print(",");
Serial.print(motorOffsetR, DEC); Serial.print(",");
Serial.print(pTerm_Wheel, DEC); Serial.print(",");
Serial.print(dTerm_Wheel, DEC); Serial.print(",");
Serial.print(Kp_Wheel, DEC); Serial.print(",");
Serial.print(Kd_Wheel, DEC); Serial.print(",");
Serial.print("\n");
}
}
union u_tag {
byte b[4];
float fval;
} u;
int skipIn=0;
void serialIn_GUI(){
if(skipIn++>=updateRate) {
skipIn = 0;
byte id;
if(Serial.available() > 0)
{
char param = Serial.read();
//Serial.println("Have bytes");
delay(10);
byte inByte[Serial.available()];
if(Serial.read() == SPLIT){
if(Serial.available() >= 4){
u.b[3] = Serial.read();
u.b[2] = Serial.read();
u.b[1] = Serial.read();
u.b[0] = Serial.read();
Serial.flush();
switch (param) {
case 'p':
Kp = int(u.fval);
break;
case 'i':
Ki = int(u.fval);
break;
case 'd':
Kd = int(u.fval);
break;
case 'k':
K = u.fval;
break;
case 's':
setPoint = int(u.fval);
break;
case 'u':
updateRate = int(u.fval);
break;
case 'l':
motorOffsetL = u.fval;
break;
case 'r':
motorOffsetR = u.fval;
break;
case 'q':
Kp_Wheel = int(u.fval);
break;
case 'e':
serial_type = int(u.fval);
break;
case 'w':
Kd_Wheel = int(u.fval);
}
}
}
}
}
}
It's a realy long line that are beaning send to the GUI maybe it would be better to split it and sending it like bytes like I do when I send data to the Arduino..