From 58cb816bf1d5dff828faa67ce05dd7b40831a25c Mon Sep 17 00:00:00 2001 From: universam1 Date: Thu, 23 Aug 2018 22:37:21 +0200 Subject: [PATCH] using wait time on Temp sensor to gain more Accelerator samples --- pio/lib/Globals/Globals.h | 24 ++++++++++++++---------- pio/src/iSpindel.cpp | 37 ++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/pio/lib/Globals/Globals.h b/pio/lib/Globals/Globals.h index 64ffee95..b03e7575 100644 --- a/pio/lib/Globals/Globals.h +++ b/pio/lib/Globals/Globals.h @@ -42,14 +42,14 @@ extern Ticker flasher; #define CONSOLELN CONSOLE #define CONSOLEF CONSOLE #else -#define CONSOLE(...) \ - do \ - { \ +#define CONSOLE(...) \ + do \ + { \ Serial.print(__VA_ARGS__); \ } while (0) -#define CONSOLELN(...) \ - do \ - { \ +#define CONSOLELN(...) \ + do \ + { \ Serial.println(__VA_ARGS__); \ } while (0) #endif @@ -58,13 +58,17 @@ extern Ticker flasher; #define ADCDIVISOR 191.8 #define ONE_WIRE_BUS D6 // DS18B20 on ESP pin12 -#define OW_PINS (const uint8_t[]){D1, D6} -#define RESOLUTION 12 // 12bit resolution == 750ms update rate +#define OW_PINS \ + (const uint8_t[]) { D1, D6 } +#define RESOLUTION 12 // 12bit resolution == 750ms update rate #define OWinterval (760 / (1 << (12 - RESOLUTION))) #define CFGFILE "/config.json" #define TKIDSIZE 40 -#define MEDIANROUNDS 39 -#define MEDIANAVRG 29 + +#define MEDIANROUNDSMAX 49 +#define MEDIANROUNDSMIN 29 +#define MEDIANAVRG MEDIANROUNDSMIN +#define MEDIAN_MAX_SIZE MEDIANROUNDSMAX #define CBP_ENDPOINT "/api/hydrometer/v1/data" diff --git a/pio/src/iSpindel.cpp b/pio/src/iSpindel.cpp index ac35113e..e6a227a0 100644 --- a/pio/src/iSpindel.cpp +++ b/pio/src/iSpindel.cpp @@ -33,7 +33,7 @@ OneWire *oneWire; DallasTemperature DS18B20; DeviceAddress tempDeviceAddress; Ticker flasher; -RunningMedian samples = RunningMedian(MEDIANROUNDS); +RunningMedian samples = RunningMedian(MEDIANROUNDSMAX); DoubleResetDetector drd(DRD_TIMEOUT, DRD_ADDRESS); #define TEMP_CELSIUS 0 @@ -725,6 +725,11 @@ void initDS18B20() requestTemp(); } +bool isDS18B20ready() +{ + return millis() - DSreqTime > OWinterval; +} + void initAccel() { // join I2C bus (I2Cdev library doesn't do this automatically) @@ -780,22 +785,28 @@ void getAccSample() float getTilt() { - uint32_t start; + uint32_t start = millis(); + uint8_t i = 0; - for (uint8_t i = 0; i < MEDIANROUNDS; i++) + for (; i < MEDIANROUNDSMAX; i++) { - start = millis(); while (!accelgyro.getIntDataReadyStatus()) - yield(); - CONSOLE(String("IRQ: ") + (millis() - start)); + delay(2); getAccSample(); float _tilt = calculateTilt(); - CONSOLE(F("ms - Spl ")); - CONSOLE(i); - CONSOLE(": "); - CONSOLELN(_tilt); samples.add(_tilt); + + if (i >= MEDIANROUNDSMIN && isDS18B20ready()) + break; } + CONSOLE("Samples:"); + CONSOLE(++i); + CONSOLE(" min:"); + CONSOLE(samples.getLowest()); + CONSOLE(" max:"); + CONSOLE(samples.getHighest()); + CONSOLE(" time:"); + CONSOLELN(millis() - start); return samples.getAverage(MEDIANAVRG); } @@ -805,12 +816,12 @@ float getTemperature(bool block = false) // we need to wait for DS18b20 to finish conversion if (!DSreqTime || - (!block && (millis() - DSreqTime < OWinterval))) + (!block && !isDS18B20ready())) return t; // if we need the result we have to block - while (millis() - DSreqTime < OWinterval) - yield(); + while (!isDS18B20ready()) + delay(10); DSreqTime = 0; t = DS18B20.getTempCByIndex(0);