File size: 2,605 Bytes
96a5049
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef LEARNING_MANAGER_H
#define LEARNING_MANAGER_H

#include "fuel_learning.h"
#include "ignition_learning.h"
#include <Preferences.h>

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