Files
arduino-filament-dryer/include/tuning_store.h
2026-07-05 10:06:21 +02:00

46 lines
1.0 KiB
C

#pragma once
#include <Arduino.h>
#include <EEPROM.h>
#include "config.h"
static const uint16_t TUNING_MAGIC = 0xDA7A;
static const int TUNING_EEPROM_ADDR = 0;
struct TuningData {
uint16_t magic = 0;
float kp = PID_KP;
float ki = PID_KI;
float kd = PID_KD;
uint8_t fanMixMax = FAN_MIX_MAX_PWM;
};
inline uint8_t tuningChecksum(const TuningData &data) {
const uint8_t *bytes = reinterpret_cast<const uint8_t *>(&data);
uint8_t sum = 0;
for (uint8_t i = 0; i < sizeof(TuningData) - 1; ++i) {
sum ^= bytes[i];
}
return sum;
}
inline bool tuningLoad(TuningData &out) {
EEPROM.get(TUNING_EEPROM_ADDR, out);
const uint8_t stored = EEPROM.read(TUNING_EEPROM_ADDR + sizeof(TuningData));
if (out.magic != TUNING_MAGIC) {
return false;
}
return tuningChecksum(out) == stored;
}
inline void tuningSave(const TuningData &data) {
EEPROM.put(TUNING_EEPROM_ADDR, data);
EEPROM.write(TUNING_EEPROM_ADDR + sizeof(TuningData), tuningChecksum(data));
}
inline void tuningClear() {
TuningData cleared;
tuningSave(cleared);
}