Fixed DHT sensor

This commit is contained in:
Ziver Koc 2016-06-10 19:33:26 +02:00
parent c2c5935284
commit 26c909ac8d
4 changed files with 26 additions and 14 deletions

View file

@ -1,11 +1,12 @@
#ifndef HALCONFIGURATION_H #ifndef HALCONFIGURATION_H
#define HALCONFIGURATION_H #define HALCONFIGURATION_H
//#define ENABLE_DEBUG // comment out to disable debug #define ENABLE_DEBUG // comment out to disable debug
#define TIMER_MILLISECOND 60*1000 // poling in minutes #define TIMER_MILLISECOND 60*1000 // poling in minutes
#define INDICATOR_PIN 13 // diode #define INDICATOR_PIN 13 // diode
// POWER CONSUMPTION SENSOR // POWER CONSUMPTION SENSOR
#define POWERCON_ENABLED // comment out to disable sensor #define POWERCON_ENABLED // comment out to disable sensor
#define POWERCON_SENSOR SensorPhotocell() #define POWERCON_SENSOR SensorPhotocell()
@ -13,16 +14,16 @@
#define POWER_TIMER_MULTIPLIER 1 #define POWER_TIMER_MULTIPLIER 1
// TEMPERATURE SENSOR // TEMPERATURE SENSOR
//#define TEMPERATURE_ENABLED // comment out to disable sensor #define TEMPERATURE_ENABLED // comment out to disable sensor
#define TEMPERATURE_SENSOR SensorDHT(DHT22, 10) #define TEMPERATURE_SENSOR SensorDHT(DHT22, 10)
#define TEMPERATURE_PROTOCOL ProtocolOregon(11, 100) #define TEMPERATURE_PROTOCOL ProtocolOregon(11, 100)
#define TEMPERATURE_TIMER_MULTIPLIER 1 #define TEMPERATURE_TIMER_MULTIPLIER 10
// LIGHT SENSOR // LIGHT SENSOR
//#define LIGHT_ENABLED // comment out to disable sensor //#define LIGHT_ENABLED // comment out to disable sensor
#define LIGHT_SENSOR SensorDH1750() #define LIGHT_SENSOR SensorDH1750()
#define LIGHT_PROTOCOL ? #define LIGHT_PROTOCOL ?
#define LIGHT_TIMER_MULTIPLIER 1 #define LIGHT_TIMER_MULTIPLIER 10
#endif // HALCONFIGURATION_H #endif // HALCONFIGURATION_H

View file

@ -99,7 +99,7 @@ void loop()
{ {
static TemperatureData tempData; static TemperatureData tempData;
tempSensor->read(tempData); tempSensor->read(tempData);
DEBUGF("Read TEMPERATURE_SENSOR= temperature:%d, humidity:%d", tempData.temperature, tempData.humidity); DEBUGF("Read TEMPERATURE_SENSOR= temperature:%d, humidity:%d", (int)tempData.temperature, (int)tempData.humidity);
tempProtocol->send(tempData); tempProtocol->send(tempData);
} }
#endif #endif

View file

@ -81,21 +81,24 @@ void Interrupt::setupPinInterrupt(int pin)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// Watchdog timer // Watchdog timer
unsigned int wdtTime; uint16_t wdtTime;
long wdtTimeLeft; int32_t wdtTimeLeft;
void Interrupt::handleWatchDogInterrupt() void Interrupt::handleWatchDogInterrupt()
{ {
//DEBUG("WDT Interrupt");
wdt_disable(); wdt_disable();
if (wdtTimeLeft < 0) if (wdtTime <= 0)
return;
DEBUGF("WDT interrupt, time=%d, timeLeft=%d", wdtTime, wdtTimeLeft);
if (wdtTimeLeft <= 0)
{ {
DEBUG("WDT interrupt");
Interrupt::wakeUp(); Interrupt::wakeUp();
(*Interrupt::wdtCallback) (); (*Interrupt::wdtCallback) ();
wdtTimeLeft = wdtTime; wdtTimeLeft = wdtTime;
} }
setupWatchDogInterrupt(); setupWatchDogInterrupt();
} }
@ -104,7 +107,7 @@ ISR(WDT_vect)
Interrupt::handleWatchDogInterrupt(); Interrupt::handleWatchDogInterrupt();
} }
void Interrupt::setupWatchDogInterrupt(unsigned int milliseconds) void Interrupt::setupWatchDogInterrupt(uint16_t milliseconds)
{ {
wdtTimeLeft = wdtTime = milliseconds; wdtTimeLeft = wdtTime = milliseconds;
setupWatchDogInterrupt(); setupWatchDogInterrupt();
@ -112,6 +115,11 @@ void Interrupt::setupWatchDogInterrupt(unsigned int milliseconds)
void Interrupt::setupWatchDogInterrupt() void Interrupt::setupWatchDogInterrupt()
{ {
if (wdtTime <= 0){
wdt_disable();
return;
}
noInterrupts(); noInterrupts();
unsigned short duration; unsigned short duration;
@ -147,7 +155,6 @@ void Interrupt::setupWatchDogInterrupt()
wdtTimeLeft -= 16; wdtTimeLeft -= 16;
duration = 0; duration = 0;
} }
//DEBUGF("WDT t -= %u", wdtTimeLeft);
wdt_reset(); wdt_reset();
MCUSR &= ~(1 << WDRF); // reset status flag MCUSR &= ~(1 << WDRF); // reset status flag
@ -177,8 +184,6 @@ void Interrupt::setupWatchDogInterrupt()
WDTCSR = (1 << WDIE) | duration; WDTCSR = (1 << WDIE) | duration;
//WDTCSR = (1 << WDIE) | (1 << WDP3) | (1 << WDP0); //WDTCSR = (1 << WDIE) | (1 << WDP3) | (1 << WDP0);
//wdt_disable();
interrupts(); interrupts();
} }

View file

@ -12,6 +12,10 @@ void SensorDHT::setup()
{ {
// set up the pins! // set up the pins!
pinMode(_pin, INPUT_PULLUP); pinMode(_pin, INPUT_PULLUP);
#ifdef __AVR
_bit = digitalPinToBitMask(_pin);
_port = digitalPinToPort(_pin);
#endif
_maxcycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for _maxcycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for
// reading pulses from DHT sensor. // reading pulses from DHT sensor.
} }
@ -86,10 +90,12 @@ void SensorDHT::read(TemperatureData& retData)
// for ~80 microseconds again. // for ~80 microseconds again.
if (expectPulse(LOW) == 0) { if (expectPulse(LOW) == 0) {
DEBUG("DHT:Timeout waiting for start signal low pulse."); DEBUG("DHT:Timeout waiting for start signal low pulse.");
interrupts();
return; return;
} }
if (expectPulse(HIGH) == 0) { if (expectPulse(HIGH) == 0) {
DEBUG("DHT:Timeout waiting for start signal high pulse."); DEBUG("DHT:Timeout waiting for start signal high pulse.");
interrupts();
return; return;
} }