sensoresp/include/sensor_dht22.cpp

131 lines
3.5 KiB
C++
Raw Normal View History

// Digital pin connected to the DHT sensor. // dht pins: 1=power, 2=data, 3=NC, 4=GND. 10k from data to power needed
#include "sensor_dht22.h"
#ifndef SENSOR_DHT22_temperature_minchange
#define SENSOR_DHT22_temperature_minchange 0.2
#endif
#ifndef SENSOR_DHT22_temperature_senddelaymax
#define SENSOR_DHT22_temperature_senddelaymax 300000
#endif
#ifndef SENSOR_DHT22_temperature_readdelay
#define SENSOR_DHT22_temperature_readdelay 10000
#endif
#ifndef SENSOR_DHT22_humidity_minchange
#define SENSOR_DHT22_humidity_minchange 2.0
#endif
#ifndef SENSOR_DHT22_humidity_senddelaymax
#define SENSOR_DHT22_humidity_senddelaymax 300000
#endif
#ifndef SENSOR_DHT22_humidity_readdelay
#define SENSOR_DHT22_humidity_readdelay 10000
#endif
Sensor_DHT22::Sensor_DHT22(int pin)
{
dht = new DHT(pin,DHT22,11); //default:11
}
void Sensor_DHT22::init() //Things to be done during setup()
{
Serial.println("initializing dht");
dht->begin();
}
//Also called during setup()
void Sensor_DHT22::setSettings_Temperature(float minchange, unsigned long senddelaymax, unsigned long readdelay)
{
dataDHT22_temperature.minchange=minchange;
dataDHT22_temperature.senddelaymax=senddelaymax;
dataDHT22_temperature.readdelay=readdelay;
}
//Also called during setup()
void Sensor_DHT22::setSettings_Humidity(float minchange, unsigned long senddelaymax, unsigned long readdelay)
{
dataDHT22_humidity.minchange=minchange;
dataDHT22_humidity.senddelaymax=senddelaymax;
dataDHT22_humidity.readdelay=readdelay;
}
//Called during setup
void Sensor_DHT22::advertise(HomieNode& p_sensorNode)
{
sensorNode = &p_sensorNode;
#ifndef SENSOR_BMP180
sensorNode->advertise("temperature");
#else
sensorNode->advertise("temperature_dht");
#endif
sensorNode->advertise("humidity");
}
void Sensor_DHT22::sensorloop()
{
loop_DHT22_temperature();
loop_DHT22_humidity();
}
void Sensor_DHT22::loop_DHT22_temperature()
{
sensordata &d=dataDHT22_temperature;
bool _changed=false;
if (millis() >= (d.lastreadtime+d.readdelay)) {
d.value = dht->readTemperature();
if (fabs(d.lastsentvalue-d.value)>=d.minchange){
_changed=true;
}
d.lastreadtime=millis();
}
if (_changed || millis() >= (d.lastsent+d.senddelaymax)) {
Serial.print("Sending DHT22_temperature. reason=");
if (_changed) Serial.println("change"); else Serial.println("time");
if (!(isnan(d.value) == 1)){ //success
#ifndef SENSOR_BMP180
sensorNode->setProperty("temperature").send(String(d.value));
Homie.getLogger() << "temperature " << ": " << d.value << endl;
#else
sensorNode->setProperty("temperature_dht").send(String(d.value));
Homie.getLogger() << "temperature_dht " << ": " << d.value << endl;
#endif
d.lastsentvalue=d.value;
}
d.lastsent=millis();
}
}
void Sensor_DHT22::loop_DHT22_humidity()
{
sensordata &d=dataDHT22_humidity;
bool _changed=false;
if (millis() >= (d.lastreadtime+d.readdelay)) {
d.value = dht->readHumidity();
if (fabs(d.lastsentvalue-d.value)>=d.minchange){
_changed=true;
}
d.lastreadtime=millis();
}
if (_changed || millis() >= (d.lastsent+d.senddelaymax)) {
Serial.print("Sending DHT22_humidity. reason=");
if (_changed) Serial.println("change"); else Serial.println("time");
if (!(isnan(d.value) == 1)){ //success
Homie.getLogger() << "humidity " << ": " << d.value << endl;
sensorNode->setProperty("humidity").send(String(d.value));
d.lastsentvalue=d.value;
}
d.lastsent=millis();
}
}