diff --git a/platformio.ini b/platformio.ini index f0a0806..95f7be5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,6 +15,7 @@ lib_deps = https://github.com/milesburton/Arduino-Temperature-Control-Library bblanchon/ArduinoJson Wire https://github.com/phassel/ArduPID/ + https://github.com/wayoda/LedControl [env:TEST32] upload_port = 10.42.0.66 diff --git a/src/Fermenter.cpp b/src/Fermenter.cpp index 006d920..c74fa97 100644 --- a/src/Fermenter.cpp +++ b/src/Fermenter.cpp @@ -7,6 +7,7 @@ #include "config.h" #include "console.h" #include +#include "LedControl.h" #define SENSOR_GPIO D4 #define CONTROL_GPIO D2 @@ -25,6 +26,8 @@ DallasSensor sensor(dallas, 0x3D0417C1D740FF28, "temperatur.ist", 0.1, 5, 60 * 1 ArduPID pid; +LedControl lc = LedControl(13, 14, 15, 1); + double proportional = PID_DEFAULT_P; double integral = PID_DEFAULT_I; @@ -39,6 +42,10 @@ double temperatureCurrent = NAN; double heaterPWM = 0; +void writeDecimal(int *digit, double value); + +void displayLoop(); + void patrixSetup() { dallas.begin(); analogWriteResolution(CONTROL_PWM_BITS); @@ -54,6 +61,8 @@ void patrixLoop() { dallas.loop(); sensor.loop(); + displayLoop(); + temperatureCurrent = sensor.getLastValue(); if (!isnan(temperatureCurrent)) { pid.compute(); @@ -89,6 +98,31 @@ void patrixLoop() { } } + +void displayLoop() { + static unsigned long lastDisplayInit = 0; + if (lastDisplayInit == 0 || millis() - lastDisplayInit > 60 * 60 * 1000) { + lastDisplayInit = millis(); + lc.shutdown(0, true); + lc.shutdown(0, false); + lc.setIntensity(0, 4); + lc.clearDisplay(0); + } + int digit = 0; + writeDecimal(&digit, temperatureCurrent); + digit++; + digit++; + writeDecimal(&digit, temperatureTarget); +} + +void writeDecimal(int *digit, double value) { + const int integer = (int) value; + const int decimal = (int) ((value - integer) * 10) % 10; + lc.setDigit(0, (*digit)++, decimal, false); + lc.setDigit(0, (*digit)++, integer % 10, true); + lc.setDigit(0, (*digit)++, integer / 10 % 10, false); +} + bool setDouble(const char *name, double *destinationPtr, double min, double max) { const char *valueStr = strtok(nullptr, ""); if (valueStr == nullptr) {