// robot mower communication standard
void Robot::rmcsPrintInfo(Stream &s){
// Period since last send
unsigned long now = millis();
unsigned long durationSinceLastSendState = now - rmcsInfoLastSendState;
unsigned long durationSinceLastSendMotorCurrent = now - rmcsInfoLastSendMotorCurrent;
unsigned long durationSinceLastSendSonar = now - rmcsInfoLastSendSonar;
unsigned long durationSinceLastSendBumper = now - rmcsInfoLastSendBumper;
unsigned long durationSinceLastSendOdometry = now - rmcsInfoLastSendOdometry;
unsigned long durationSinceLastSendPeri = now - rmcsInfoLastSendPeri;
if (consoleMode == CONSOLE_OFF) {
} else {
if (durationSinceLastSendState > RMCS_interval_state){
rmcsInfoLastSendState = now;
// ROBOT State, Timestamp, state, error code, battery, charging
Streamprint(s, "$RMSTA,%6u,",((millis()-stateStartTime)/1000));
Streamprint(s, "%4s,", stateNames[stateCurr]);
Streamprint(s, "%4s,", "E000");
Streamprint(s, "%2d.%01d,",(int)batVoltage, (int)((batVoltage *10) - ((int)batVoltage*10)));
Streamprint(s, "%2d.%01d,",(int)chgVoltage, (int)((chgVoltage *10) - ((int)chgVoltage*10)));
Streamprint(s, "%2d.%01d",(int)chgCurrent, (int)((abs(chgCurrent) *10) - ((int)abs(chgCurrent)*10)) );
Streamprint(s, "rn");
}
if (durationSinceLastSendMotorCurrent > RMCS_interval_motor_current){
rmcsInfoLastSendMotorCurrent = now;
// ROBOT motor current, Timestamp, Motor left A, Motor right A, Motor Mow A, Motor left trigger, motor right trigger, motor mow trigger
Streamprint(s, "$RMMOT,%6u,", (millis()-stateStartTime)/1000);
Streamprint(s, "%4d ,",(int)motorLeftSense);
Streamprint(s, "%4d ,",(int)motorRightSense);
Streamprint(s, "%4d ,",(int)motorMowSense);
Streamprint(s, "%4d ,",motorLeftSenseCounter);
Streamprint(s, "%4d ,",motorRightSenseCounter);
Streamprint(s, "%4d ",motorMowSenseCounter);
Streamprint(s, "rn");
}
if (durationSinceLastSendSonar > RMCS_interval_sonar and sonarUse){
rmcsInfoLastSendSonar = now;
// ROBOT sonar sensor data, Timestamp, sonar left dist, sonar right dist, sonar center dist, sonar left trigger, sonar right trigger, sonar center trigger
Streamprint(s, "$RMSON,%6u,", (millis()-stateStartTime)/1000);
Streamprint(s, "%4d ,",sonarDistLeft);
Streamprint(s, "%4d ,",sonarDistRight);
Streamprint(s, "%4d ,",sonarDistCenter);
Streamprint(s, "%4d ,",sonarDistCounter);
Streamprint(s, "%4d ,",sonarDistCounter);
Streamprint(s, "%4d ",sonarDistCounter);
Streamprint(s, "rn");
}
if (durationSinceLastSendBumper > RMCS_interval_bumper and bumperUse){
rmcsInfoLastSendBumper = now;
// ROBOT bumper data, Timestamp, bumper left value, bumper right value, bumper center value, bumper left trigger, bumper right trigger, bumper center trigger
Streamprint(s, "$RMBUM,%6u,", (millis()-stateStartTime)/1000);
Streamprint(s, "%4d ,",bumperLeftCounter);
Streamprint(s, "%4d ,",bumperRightCounter);
Streamprint(s, "%4d ,",0);
Streamprint(s, "%4d ,",bumperLeft);
Streamprint(s, "%4d ,",bumperRight);
Streamprint(s, "%4d ",0);
Streamprint(s, "rn");
}
if (durationSinceLastSendOdometry > RMCS_interval_odometry and odometryUse){
rmcsInfoLastSendOdometry = now;
// ROBOT odometry data, Timestamp, odometry left value, odometry right value
Streamprint(s, "$RMODO,%6u,", (millis()-stateStartTime)/1000);
Streamprint(s, "%4d ,",odometryLeft);
Streamprint(s, "%4d ",odometryRight);
Streamprint(s, "rn");
}
if (durationSinceLastSendPeri > RMCS_interval_perimeter and perimeterUse){
rmcsInfoLastSendPeri = now;
// ROBOT Perimeter data, Timestamp, perimeter value, perimeter in/out, perimeter counter
Streamprint(s, "$RMPER,%6u,", (millis()-stateStartTime)/1000);
Streamprint(s, "%4d ,",perimeterMag);
Streamprint(s, "%4d ,",perimeterInside);
Streamprint(s, "%4d ",perimeterCounter);
Streamprint(s, "rn");
}
}
}