Add manual override control via MQTT

master
Tom Wilson 4 years ago
parent 6d66e8df5a
commit 30f72baa83

@ -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);
}

Loading…
Cancel
Save