|
|
|
|
@ -95,7 +95,8 @@ roller_control_t roller_ctrl[3];
|
|
|
|
|
// For each roller, need to store the current control mode, ratio, manual speed, manual speed started, manual speed
|
|
|
|
|
// duration
|
|
|
|
|
|
|
|
|
|
// [roller1_mode] [roller2_mode] [roller2_mode] [roller1_ratio] [roller2_ratio] [roller3_ratio]
|
|
|
|
|
// Handler for MQTT messages at `airseeder/set/rollercontrol`
|
|
|
|
|
// Message format: [roller1_mode] [roller2_mode] [roller2_mode] [roller1_ratio] [roller2_ratio] [roller3_ratio]
|
|
|
|
|
// Mode is 0 for disabled, 1 for auto. If mode was manual, it is now overwritten, and manual control stops.
|
|
|
|
|
void onRollerControlMessage(const String &message) {
|
|
|
|
|
if (parse_message(message) >= 6) {
|
|
|
|
|
@ -120,11 +121,34 @@ void onRollerControlMessage(const String &message) {
|
|
|
|
|
roller_ctrl[2].wheel_ratio = msg_segments[5].toFloat();
|
|
|
|
|
|
|
|
|
|
motor_control_required = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Handler for MQTT messages at `airseeder/set/roller[1,2,3]manual`
|
|
|
|
|
// Message format: [speed] [time_to_drive]
|
|
|
|
|
void onRollerManualMessage(const String &topicStr, const String &message) {
|
|
|
|
|
|
|
|
|
|
sprintf(msg_buffer, "MTR CTRL %u %u %u %.2f %.2f %.2f", roller_ctrl[0].mode, roller_ctrl[1].mode,
|
|
|
|
|
roller_ctrl[2].mode, roller_ctrl[0].wheel_ratio, roller_ctrl[1].wheel_ratio,
|
|
|
|
|
roller_ctrl[2].wheel_ratio);
|
|
|
|
|
mqtt_client.publish("airseeder/status/log", msg_buffer, true);
|
|
|
|
|
int r_id = 0;
|
|
|
|
|
|
|
|
|
|
if (topicStr == "airseeder/set/roller1manual") {
|
|
|
|
|
r_id = 0;
|
|
|
|
|
} else if (topicStr == "airseeder/set/roller2manual") {
|
|
|
|
|
r_id = 1;
|
|
|
|
|
} else if (topicStr == "airseeder/set/roller3manual") {
|
|
|
|
|
r_id = 2;
|
|
|
|
|
} else {
|
|
|
|
|
// MQTT error
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (parse_message(message) >= 2) {
|
|
|
|
|
roller_ctrl[r_id].mode = MODE_MANUAL;
|
|
|
|
|
roller_ctrl[r_id].manual_speed = msg_segments[0].toFloat();
|
|
|
|
|
roller_ctrl[r_id].manual_duration = long(msg_segments[1].toFloat() * 1000.0);
|
|
|
|
|
|
|
|
|
|
roller_ctrl[r_id].manual_time_started = millis();
|
|
|
|
|
|
|
|
|
|
motor_control_required = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -134,6 +158,10 @@ void onConnectionEstablished() {
|
|
|
|
|
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/rollercontrol", onRollerControlMessage);
|
|
|
|
|
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller1manual", onRollerManualMessage);
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller2manual", onRollerManualMessage);
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller3manual", onRollerManualMessage);
|
|
|
|
|
|
|
|
|
|
sprintf(msg_buffer, "%u", mqtt_client.getConnectionEstablishedCount());
|
|
|
|
|
mqtt_client.publish("airseeder/status/connect_count", msg_buffer, true);
|
|
|
|
|
}
|
|
|
|
|
|