From 2b885ec91541e1621d1d4d2297b2ae4850d46b54 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Sat, 27 Apr 2024 14:36:23 +0200 Subject: [PATCH] Fix for 1Wire sensor reading. Only 1value per loop step --- lib/obp60task/OBPSensorTask.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/obp60task/OBPSensorTask.cpp b/lib/obp60task/OBPSensorTask.cpp index c461942..7e11c50 100644 --- a/lib/obp60task/OBPSensorTask.cpp +++ b/lib/obp60task/OBPSensorTask.cpp @@ -328,6 +328,7 @@ void sensorTask(void *param){ double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat(); double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat(); + static long loopCounter = 0; // Loop counter for 1Wire data transmission long starttime0 = millis(); // GPS update all 100ms long starttime5 = millis(); // Voltage update all 1s long starttime6 = millis(); // Environment sensor update all 1s @@ -390,18 +391,22 @@ void sensorTask(void *param){ float tempC; ds18b20.requestTemperatures(); // Collect all temperature values (max.8) for(int i=0;isendN2kMessage(N2kMsg); - api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%1d Temp: %.1f",i,tempC); - } + // Send only one 1Wire data per loop step (time reduction) + if(i == loopCounter % numberOfDevices){ + if(ds18b20.getAddress(tempDeviceAddress, i)){ + // Read temperature value in Celsius + tempC = ds18b20.getTempC(tempDeviceAddress); + } + // Send to NMEA200 bus for each sensor with instance number + if(!isnan(tempC)){ + sensors.onewireTemp[i] = tempC; // Save values in SensorData + SetN2kPGN130316(N2kMsg, 0, i, N2kts_OutsideTemperature, CToKelvin(tempC), N2kDoubleNA); + api->sendN2kMessage(N2kMsg); + api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%1d Temp: %.1f",i,tempC); + } + } } + loopCounter++; } // If GPS not ready or installed then send RTC time on bus all 500ms