|
|
|
|
@ -17,6 +17,7 @@ that's been bundled out into its own FreeRTOS module (using the ESP IDF librarie
|
|
|
|
|
#define WHEEL_FAN_STATUS_UPDATE_PERIOD_MS 1000 // also includes oil pressure sensor
|
|
|
|
|
#define BIN_STATUS_UPDATE_PERIOD_MS 3000
|
|
|
|
|
#define PIPE_PRESSURE_UPDATE_PERIOD_MS 2000
|
|
|
|
|
#define MOTOR_PARAMETER_UPDATE_PERIOD_MS 10000
|
|
|
|
|
#define HEARTBEAT_PERIOD_MS 1000
|
|
|
|
|
|
|
|
|
|
// Rate at which the current wheel speed will be used to update the desired roller speed
|
|
|
|
|
@ -107,6 +108,8 @@ int parse_message(const String &message) {
|
|
|
|
|
|
|
|
|
|
bool motor_control_required = true;
|
|
|
|
|
|
|
|
|
|
bool motor_parameter_mqtt_update_required = true;
|
|
|
|
|
|
|
|
|
|
typedef enum { MODE_DISABLED = 0, MODE_AUTO = 1, MODE_MANUAL = 2 } roller_control_mode_t;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
@ -215,6 +218,7 @@ void onRollerParamsMessage(const String &topicStr, const String &message) {
|
|
|
|
|
motor_parameters_to_send.motor_3 = motor_parameters[2];
|
|
|
|
|
|
|
|
|
|
set_motor_parameters(motor_parameters_to_send);
|
|
|
|
|
motor_parameter_mqtt_update_required = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -248,6 +252,7 @@ unsigned long last_motor_status = 0;
|
|
|
|
|
unsigned long last_wheel_status = 0;
|
|
|
|
|
unsigned long last_bin_status = 0;
|
|
|
|
|
unsigned long last_pipe_pressure_status = 0;
|
|
|
|
|
unsigned long last_motor_parameter_update = 0;
|
|
|
|
|
unsigned long last_heartbeat = 0;
|
|
|
|
|
unsigned long no_comms_timeout_start = 0;
|
|
|
|
|
|
|
|
|
|
@ -436,5 +441,23 @@ void loop() {
|
|
|
|
|
set_motor_control(motor_control_group);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Periodically trigger a motor parameter update
|
|
|
|
|
if ((now - last_motor_parameter_update) > MOTOR_PARAMETER_UPDATE_PERIOD_MS) {
|
|
|
|
|
motor_parameter_mqtt_update_required = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (motor_parameter_mqtt_update_required and motor_parameters_retrieved){
|
|
|
|
|
motor_parameter_mqtt_update_required = false;
|
|
|
|
|
last_motor_parameter_update = now;
|
|
|
|
|
|
|
|
|
|
//[kp] [ki] [kd] [min_duty]
|
|
|
|
|
sprintf(msg_buffer, "%.2f %.2f %.2f %.2f", motor_parameters[0].kp, motor_parameters[0].ki, motor_parameters[0].kd, motor_parameters[0].min_duty);
|
|
|
|
|
mqtt_client.publish("airseeder/status/roller1params", msg_buffer, true);
|
|
|
|
|
sprintf(msg_buffer, "%.2f %.2f %.2f %.2f", motor_parameters[1].kp, motor_parameters[1].ki, motor_parameters[1].kd, motor_parameters[1].min_duty);
|
|
|
|
|
mqtt_client.publish("airseeder/status/roller2params", msg_buffer, true);
|
|
|
|
|
sprintf(msg_buffer, "%.2f %.2f %.2f %.2f", motor_parameters[2].kp, motor_parameters[2].ki, motor_parameters[2].kd, motor_parameters[2].min_duty);
|
|
|
|
|
mqtt_client.publish("airseeder/status/roller3params", msg_buffer, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mqtt_client.loop();
|
|
|
|
|
}
|