void finish_autotune() {
  Serial.println("Finished autotune");
  Serial.print("Kp: ");
  Serial.println(auto_tune.GetKp());
  Serial.print("Ki: ");
  Serial.println(auto_tune.GetKi());
  Serial.print("Kd: ");
  Serial.println(auto_tune.GetKd());
  
  profiles[config.driving].kp = auto_tune.GetKp();
  profiles[config.driving].ki = auto_tune.GetKi();
  profiles[config.driving].kd = auto_tune.GetKd();
  
  save();
  tuning = false;
}
示例#2
0
  void update() {
    if (settings.enabled) {
      if (autotune_running) {
        if (pid_autotune.Runtime()) {
          autotune_running = false;

          settings.pid.kp = pid_autotune.GetKp();
          settings.pid.ki = pid_autotune.GetKi();
          settings.pid.kd = pid_autotune.GetKd();

          update_pid_tunings();
          write_settings();
        }
      }

      if (! autotune_running) {
        pid.Compute();
      }

      pid_output_sum += pid_output;
      pid_output_count++;

      unsigned long now = millis();
      if (now >= window_end_millis) {
        pid_output_average = pid_output_sum / pid_output_count;

        if (pid_output_average >= settings.heat_on.threshold) {
          set_heat(true);
        } else if (pid_output_average + settings.heat_on.delta <=
                   settings.heat_on.threshold) {
          set_heat(false);
        }

        reset_window();
      }
    }
  }