Bugfix.
- preventing strip blinking due to usermod running - temeperature reading with 0.5°C precision
This commit is contained in:
parent
1ba70706c2
commit
6b5c2be701
@ -222,9 +222,8 @@ public:
|
|||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// only check sensors 10x/s
|
// only check sensors 10x/s
|
||||||
unsigned long now = millis();
|
if (millis() - lastLoop < 100 || strip.isUpdating()) return;
|
||||||
if (now - lastLoop < 100) return;
|
lastLoop = millis();
|
||||||
lastLoop = now;
|
|
||||||
|
|
||||||
if (!updatePIRsensorState()) {
|
if (!updatePIRsensorState()) {
|
||||||
handleOffTimer();
|
handleOffTimer();
|
||||||
|
@ -27,6 +27,9 @@ class UsermodTemperature : public Usermod {
|
|||||||
int8_t temperaturePin = TEMPERATURE_PIN;
|
int8_t temperaturePin = TEMPERATURE_PIN;
|
||||||
// measurement unit (true==°C, false==°F)
|
// measurement unit (true==°C, false==°F)
|
||||||
bool degC = true;
|
bool degC = true;
|
||||||
|
// using parasite power on the sensor
|
||||||
|
bool parasite = false;
|
||||||
|
// how often do we read from sensor?
|
||||||
unsigned long readingInterval = USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
unsigned long readingInterval = USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
||||||
// set last reading as "40 sec before boot", so first reading is taken after 20 sec
|
// set last reading as "40 sec before boot", so first reading is taken after 20 sec
|
||||||
unsigned long lastMeasurement = UINT32_MAX - USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
unsigned long lastMeasurement = UINT32_MAX - USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
||||||
@ -45,25 +48,24 @@ class UsermodTemperature : public Usermod {
|
|||||||
static const char _name[];
|
static const char _name[];
|
||||||
static const char _enabled[];
|
static const char _enabled[];
|
||||||
static const char _readInterval[];
|
static const char _readInterval[];
|
||||||
|
static const char _parasite[];
|
||||||
|
|
||||||
//Dallas sensor quick (& dirty) reading. Credit to - Author: Peter Scargill, August 17th, 2013
|
//Dallas sensor quick (& dirty) reading. Credit to - Author: Peter Scargill, August 17th, 2013
|
||||||
int16_t readDallas() {
|
float readDallas() {
|
||||||
byte i;
|
byte i;
|
||||||
byte data[2];
|
byte data[2];
|
||||||
int16_t result; // raw data from sensor
|
int16_t result; // raw data from sensor
|
||||||
oneWire->reset();
|
if (!oneWire->reset()) return -127.0f; // send reset command and fail fast
|
||||||
oneWire->write(0xCC); // skip ROM
|
oneWire->skip(); // skip ROM
|
||||||
oneWire->write(0xBE); // read (temperature) from EEPROM
|
oneWire->write(0xBE); // read (temperature) from EEPROM
|
||||||
for (i=0; i < 2; i++) data[i] = oneWire->read(); // first 2 bytes contain temperature
|
for (i=0; i < 2; i++) data[i] = oneWire->read(); // first 2 bytes contain temperature
|
||||||
for (i=2; i < 8; i++) oneWire->read(); // read unused bytes
|
for (i=2; i < 8; i++) oneWire->read(); // read unused bytes
|
||||||
result = (data[1]<<8) | data[0];
|
result = (data[1]<<4) | (data[0]>>4); // we only need whole part, we will add fraction when returning
|
||||||
result >>= 4; // 9-bit precision accurate to 1°C (/16)
|
if (data[1]&0x80) result |= 0xFF00; // fix negative value
|
||||||
if (data[1]&0x80) result |= 0x8000; // fix negative value
|
|
||||||
//if (data[0]&0x08) ++result;
|
|
||||||
oneWire->reset();
|
oneWire->reset();
|
||||||
oneWire->write(0xCC); // skip ROM
|
oneWire->skip(); // skip ROM
|
||||||
oneWire->write(0x44,0); // request new temperature reading (without parasite power)
|
oneWire->write(0x44,parasite); // request new temperature reading (without parasite power)
|
||||||
return result;
|
return (float)result + ((data[0]&0x0008) ? 0.5f : 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void requestTemperatures() {
|
void requestTemperatures() {
|
||||||
@ -225,6 +227,7 @@ class UsermodTemperature : public Usermod {
|
|||||||
top["pin"] = temperaturePin; // usermodparam
|
top["pin"] = temperaturePin; // usermodparam
|
||||||
top["degC"] = degC; // usermodparam
|
top["degC"] = degC; // usermodparam
|
||||||
top[FPSTR(_readInterval)] = readingInterval / 1000;
|
top[FPSTR(_readInterval)] = readingInterval / 1000;
|
||||||
|
top[FPSTR(_parasite)] = parasite;
|
||||||
DEBUG_PRINTLN(F("Temperature config saved."));
|
DEBUG_PRINTLN(F("Temperature config saved."));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +256,14 @@ class UsermodTemperature : public Usermod {
|
|||||||
degC = (bool)(str!="off"); // off is guaranteed to be present
|
degC = (bool)(str!="off"); // off is guaranteed to be present
|
||||||
}
|
}
|
||||||
readingInterval = min(120,max(10,top[FPSTR(_readInterval)].as<int>())) * 1000; // convert to ms
|
readingInterval = min(120,max(10,top[FPSTR(_readInterval)].as<int>())) * 1000; // convert to ms
|
||||||
DEBUG_PRINTLN(F("Temperature config (re)loaded."));
|
if (top[FPSTR(_parasite)].is<bool>()) {
|
||||||
|
// reading from cfg.json
|
||||||
|
parasite = top[FPSTR(_parasite)].as<bool>();
|
||||||
|
} else {
|
||||||
|
// new configuration from set.cpp
|
||||||
|
String str = top[FPSTR(_parasite)]; // checkbox -> off or on
|
||||||
|
parasite = (bool)(str!="off"); // off is guaranteed to be present
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG_PRINTLN(F("No config found. (Using defaults.)"));
|
DEBUG_PRINTLN(F("No config found. (Using defaults.)"));
|
||||||
}
|
}
|
||||||
@ -261,7 +271,9 @@ class UsermodTemperature : public Usermod {
|
|||||||
if (!initDone) {
|
if (!initDone) {
|
||||||
// first run: reading from cfg.json
|
// first run: reading from cfg.json
|
||||||
temperaturePin = newTemperaturePin;
|
temperaturePin = newTemperaturePin;
|
||||||
|
DEBUG_PRINTLN(F("Temperature config loaded."));
|
||||||
} else {
|
} else {
|
||||||
|
DEBUG_PRINTLN(F("Temperature config re-loaded."));
|
||||||
// changing paramters from settings page
|
// changing paramters from settings page
|
||||||
if (newTemperaturePin != temperaturePin) {
|
if (newTemperaturePin != temperaturePin) {
|
||||||
// deallocate pin and release memory
|
// deallocate pin and release memory
|
||||||
@ -284,3 +296,4 @@ class UsermodTemperature : public Usermod {
|
|||||||
const char UsermodTemperature::_name[] PROGMEM = "Temperature";
|
const char UsermodTemperature::_name[] PROGMEM = "Temperature";
|
||||||
const char UsermodTemperature::_enabled[] PROGMEM = "enabled";
|
const char UsermodTemperature::_enabled[] PROGMEM = "enabled";
|
||||||
const char UsermodTemperature::_readInterval[] PROGMEM = "read-interval-s";
|
const char UsermodTemperature::_readInterval[] PROGMEM = "read-interval-s";
|
||||||
|
const char UsermodTemperature::_parasite[] PROGMEM = "parasite-pwr";
|
||||||
|
@ -97,7 +97,7 @@ class AutoSaveUsermod : public Usermod {
|
|||||||
* Da loop.
|
* Da loop.
|
||||||
*/
|
*/
|
||||||
void loop() {
|
void loop() {
|
||||||
if (!autoSaveAfterSec || !enabled) return; // setting 0 as autosave seconds disables autosave
|
if (!autoSaveAfterSec || !enabled || strip.isUpdating()) return; // setting 0 as autosave seconds disables autosave
|
||||||
|
|
||||||
unsigned long now = millis();
|
unsigned long now = millis();
|
||||||
uint8_t currentMode = strip.getMode();
|
uint8_t currentMode = strip.getMode();
|
||||||
|
@ -179,9 +179,7 @@ class FourLineDisplayUsermod : public Usermod {
|
|||||||
* Da loop.
|
* Da loop.
|
||||||
*/
|
*/
|
||||||
void loop() {
|
void loop() {
|
||||||
if (millis() - lastUpdate < (clockMode?1000:refreshRate)) {
|
if (millis() - lastUpdate < (clockMode?1000:refreshRate) || strip.isUpdating()) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
lastUpdate = millis();
|
lastUpdate = millis();
|
||||||
|
|
||||||
redraw(false);
|
redraw(false);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2105251
|
#define VERSION 2105261
|
||||||
|
|
||||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||||
//#define WLED_USE_MY_CONFIG
|
//#define WLED_USE_MY_CONFIG
|
||||||
|
Loading…
Reference in New Issue
Block a user