#pragma once #include "Arduino.h" #include "config.h" #include "engine_control.h" #include "pid_controller.h" class IdleController { private: float targetRPM; float currentPosition; unsigned long lastUpdateTime; bool isAirConditionerOn; float engineTemp; // ПИД-регулятор PIDController pid; // Указатель на объект управления двигателем для получения температуры EngineControl* engineControl; // Вспомогательные методы void updateValvePosition(float position); public: IdleController(); void begin(); void update(float currentRPM); // Методы для работы с целевыми оборотами void setTargetRPM(float rpm) { if (rpm >= 700 && rpm <= 2000) { targetRPM = rpm; pid.SetSetpoint(rpm); } } float getTargetRPM() const { return targetRPM; } // Методы для настройки ПИД void setPIDParameters(float kp, float ki, float kd) { pid.SetTunings(kp, ki, kd); } // Методы для управления положением void setPosition(float position) { updateValvePosition(position); } float getCurrentPosition() const { return currentPosition; } // Методы для работы с температурой и кондиционером void setEngineTemperature(float temp) { engineTemp = temp; } void setAirConditioner(bool isOn) { isAirConditionerOn = isOn; } // Метод для установки указателя на объект управления двигателем void setEngineControl(EngineControl* control) { engineControl = control; } };