From be49cd9123485305c8ff40ee11bdd694d40a916e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Mon, 15 Apr 2024 14:09:16 +0200 Subject: [PATCH] logging pid-parameters too --- lib/patrix/data.h | 18 ++++++--- lib/patrix/sensors/DallasSensor.h | 9 +---- src/{ => Fermenter}/Fermenter.cpp | 65 +++++++++---------------------- src/Fermenter/FermenterData.h | 35 +++++++++++++++++ src/Test.cpp | 27 ------------- 5 files changed, 67 insertions(+), 87 deletions(-) rename src/{ => Fermenter}/Fermenter.cpp (83%) create mode 100644 src/Fermenter/FermenterData.h delete mode 100644 src/Test.cpp diff --git a/lib/patrix/data.h b/lib/patrix/data.h index 49061fb..dc30243 100644 --- a/lib/patrix/data.h +++ b/lib/patrix/data.h @@ -31,7 +31,7 @@ private: Entry *bufferWrite = buffer; - size_t dataCount = 0; + size_t usage = 0; public: @@ -41,18 +41,18 @@ public: } bool add(const time_t timestamp, const T &data) { - if (dataCount >= size) { + if (usage >= size) { return false; } bufferWrite->timestamp = timestamp; bufferWrite->data = data; bufferWrite = (bufferWrite - buffer + 1) % size + buffer; - dataCount++; + usage++; return true; } void loop() { - if (dataCount == 0 || !isTimeSet()) { + if (usage == 0 || !isTimeSet()) { return; } JsonDocument json; @@ -61,10 +61,18 @@ public: bufferRead->data.toJson(data); if (mqttPublishData(name, json)) { bufferRead = (bufferRead - buffer + 1) % size + buffer; - dataCount--; + usage--; } } + size_t getUsage() const { + return usage; + } + + size_t getSize() const { + return size; + } + }; #endif diff --git a/lib/patrix/sensors/DallasSensor.h b/lib/patrix/sensors/DallasSensor.h index fbe197d..6fcc3c9 100644 --- a/lib/patrix/sensors/DallasSensor.h +++ b/lib/patrix/sensors/DallasSensor.h @@ -15,8 +15,6 @@ private: uint64_t address; - const char *name; - const double valueThreshold; const time_t timeoutSec; @@ -37,10 +35,9 @@ private: public: - DallasSensor(Dallas &sensors, const uint64_t address, const char *name, const double valueThreshold, const time_t timeoutSec, const time_t minIntervalMillis) : + DallasSensor(Dallas &sensors, const uint64_t address, const double valueThreshold, const time_t timeoutSec, const time_t minIntervalMillis) : sensors(sensors), address(address), - name(name), valueThreshold(valueThreshold), timeoutSec(timeoutSec), minIntervalMillis(minIntervalMillis) { @@ -73,10 +70,6 @@ public: return false; } - [[nodiscard]] const char *getName() const { - return name; - } - [[nodiscard]] double getLastValue() const { return lastValue; } diff --git a/src/Fermenter.cpp b/src/Fermenter/Fermenter.cpp similarity index 83% rename from src/Fermenter.cpp rename to src/Fermenter/Fermenter.cpp index 926f9b6..e55b3e8 100644 --- a/src/Fermenter.cpp +++ b/src/Fermenter/Fermenter.cpp @@ -1,4 +1,4 @@ -#if defined(FERMENTER) +#if defined(FERMENTER) || defined(TEST8266) #include #include "sensors/Dallas.h" @@ -8,26 +8,27 @@ #include "console.h" #include #include "LedControl.h" +#include "FermenterData.h" #define SENSOR_GPIO D4 #define CONTROL_GPIO D2 #define CONTROL_PWM_BITS 10 #define CONTROL_PWM_MAX (pow(2, CONTROL_PWM_BITS) - 1) -#define PID_DEFAULT_P 100 -#define PID_DEFAULT_I 10 +#define PID_DEFAULT_P 1500 +#define PID_DEFAULT_I 0 #define PID_DEFAULT_D 0 #define PID_DEFAULT_TARGET 31 #define PID_DEFAULT_OVER 5 Dallas dallas(SENSOR_GPIO); -DallasSensor sensor(dallas, 0x3D0417C1D740FF28, "temperatur.ist", 0.1, 5, 60 * 1000); - -ArduPID pid; +DallasSensor sensor(dallas, 0x3D0417C1D740FF28, 0.1, 5, 60 * 1000); LedControl lc = LedControl(13, 14, 15, 1); +ArduPID pid; + double proportional = PID_DEFAULT_P; double integral = PID_DEFAULT_I; @@ -42,41 +43,14 @@ double temperatureCurrent = NAN; double heaterPWM = 0; -struct Data : IData { - double temperature; - double target; - double p; - double i; - double d; - - Data() { - temperature = NAN; - target = NAN; - p = NAN; - i = NAN; - d = NAN; - } - - Data(double temperature, double target, double p, double i, double d) : temperature(temperature), target(target), p(p), i(i), d(d) { - // - - } - - void toJson(JsonObject &json) const override { - json["temperature"] = temperature; - json["target"] = target; - json["p"] = p; - json["i"] = i; - json["d"] = d; - } - -}; - -Cache cache("data"); +Cache cache("data"); void writeDecimal(int *digit, double value); void displayLoop(); +void pidLoop(); + void patrixSetup() { dallas.begin(); analogWriteResolution(CONTROL_PWM_BITS); @@ -90,21 +64,16 @@ void patrixSetup() { void patrixLoop() { dallas.loop(); - if (sensor.loop()) { - Data data = { - temperatureCurrent, - temperatureTarget, - proportional, - integral, - derivative, - }; + const FermenterData data = {sensor.getLastValue(), temperatureTarget, proportional, integral, derivative}; cache.add(sensor.getLastTimestamp(), data); } cache.loop(); - displayLoop(); + pidLoop(); +} +void pidLoop() { temperatureCurrent = sensor.getLastValue(); if (!isnan(temperatureCurrent)) { pid.compute(); @@ -126,7 +95,10 @@ void patrixLoop() { lastDebug = now; int heaterPercent = (int) round(100.0 * heaterPWM / CONTROL_PWM_MAX); debug( - "p: %f | i: %f | d: %f | t: %4.1f | %3d%% | %5.2f %s", + "cache: %3d/%d | p: %f | i: %f | d: %f | target: %4.1f | heater: %3d%% | temperature: %5.2f %s", + cache.getUsage(), + cache.getSize(), + proportional == 0 ? NAN : proportional, integral == 0 ? NAN : integral, derivative == 0 ? NAN : derivative, @@ -140,7 +112,6 @@ void patrixLoop() { } } - void displayLoop() { static unsigned long lastDisplayInit = 0; if (lastDisplayInit == 0 || millis() - lastDisplayInit > 60 * 60 * 1000) { diff --git a/src/Fermenter/FermenterData.h b/src/Fermenter/FermenterData.h new file mode 100644 index 0000000..e2a5b3d --- /dev/null +++ b/src/Fermenter/FermenterData.h @@ -0,0 +1,35 @@ +#ifndef SENSOR3_FERMENTERDATA_H +#define SENSOR3_FERMENTERDATA_H + +#include "data.h" + +struct FermenterData : IData { + double temperature; + double target; + double p; + double i; + double d; + + FermenterData() { + temperature = NAN; + target = NAN; + p = NAN; + i = NAN; + d = NAN; + } + + FermenterData(double temperature, double target, double p, double i, double d) : temperature(temperature), target(target), p(p), i(i), d(d) { + // - + } + + void toJson(JsonObject &json) const override { + json["temperature"] = temperature; + json["target"] = target; + json["p"] = p; + json["i"] = i; + json["d"] = d; + } + +}; + +#endif diff --git a/src/Test.cpp b/src/Test.cpp deleted file mode 100644 index 495c2ac..0000000 --- a/src/Test.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#if defined(TEST8266) || defined(TEST32) - -#include -#include "config.h" - -void patrixSetup() { - -} - -void patrixLoop() { - -} - -void configLoaded() { - -} - -bool patrix_command(char *first) { - if (strcmp(first, "test") == 0 || strcmp(first, "t") == 0) { - configPutDouble("test", millis()); - return true; - } - return false; -} - - -#endif \ No newline at end of file