#ifndef LEARNING_MANAGER_H #define LEARNING_MANAGER_H #include "fuel_learning.h" #include "ignition_learning.h" #include class LearningManager { private: FuelLearningTable fuelTable; IgnitionLearningTable ignitionTable; // Параметры обучения bool isLearningEnabled; bool isFuelLearningEnabled; bool isIgnitionLearningEnabled; unsigned long learningStartTime; unsigned long minLearningTime; // Минимальное время работы для начала обучения float minEngineTemp; // Минимальная температура для обучения float maxEngineTemp; // Максимальная температура для обучения float minThrottlePosition; // Минимальное положение дросселя для обучения float maxThrottlePosition; // Максимальное положение дросселя для обучения // Статистика обучения uint32_t totalLearningPoints; uint32_t knockEvents; uint32_t richMixtureEvents; uint32_t leanMixtureEvents; // Проверка условий для обучения bool checkLearningConditions(float engineTemp, float throttlePosition); public: LearningManager(); // Инициализация и управление void begin(); void enable(); void disable(); void reset(); // Основные методы обучения void update(float load, float rpm, float lambda, float knockLevel, float engineTemp, float throttlePosition); // Получение коррекций float getFuelCorrection(float load, float rpm); float getIgnitionCorrection(float load, float rpm); // Настройка параметров void setLearningParameters(float minTemp, float maxTemp, float minThrottle, float maxThrottle); void setLearningRates(float fuelRate, float ignitionRate); // Сохранение/загрузка bool save(); bool load(); // Статистика и диагностика uint32_t getTotalLearningPoints() const; uint32_t getKnockEvents() const; uint32_t getRichMixtureEvents() const; uint32_t getLeanMixtureEvents() const; float getLearningProgress() const; // 0-100% // Экспорт данных String exportToJson(); bool importFromJson(const String& json); }; #endif