Some Arduino refactoring and it builds now
This commit is contained in:
parent
606e767f34
commit
d377bbc0a9
14 changed files with 92 additions and 62 deletions
99
arduino/HalMultiSensor/SensorDHT11.cpp
Executable file
99
arduino/HalMultiSensor/SensorDHT11.cpp
Executable file
|
|
@ -0,0 +1,99 @@
|
|||
//
|
||||
// FILE: dht11.cpp
|
||||
// VERSION: 0.3.2
|
||||
// PURPOSE: DHT11 Temperature & Humidity Sensor library for Arduino
|
||||
// LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
|
||||
//
|
||||
// DATASHEET: http://www.micro4you.com/files/sensor/DHT11.pdf
|
||||
//
|
||||
// HISTORY:
|
||||
// George Hadjikyriacou - Original version (??)
|
||||
// Mod by SimKard - Version 0.2 (24/11/2010)
|
||||
// Mod by Rob Tillaart - Version 0.3 (28/03/2011)
|
||||
// + added comments
|
||||
// + removed all non DHT11 specific code
|
||||
// + added references
|
||||
//
|
||||
|
||||
#include "SensorDHT11.h"
|
||||
|
||||
|
||||
SensorDHT11::SensorDHT11(int pin)
|
||||
{
|
||||
this->pin = pin;
|
||||
}
|
||||
|
||||
void SensorDHT11::setup(){}
|
||||
int SensorDHT11::getTemperature()
|
||||
{
|
||||
return temperature;
|
||||
}
|
||||
int SensorDHT11::getHumidity()
|
||||
{
|
||||
return humidity;
|
||||
}
|
||||
|
||||
// returnvalues:
|
||||
// 0 : OK
|
||||
// -1 : checksum error
|
||||
// -2 : timeout
|
||||
int SensorDHT11::read()
|
||||
{
|
||||
// BUFFER TO RECEIVE
|
||||
uint8_t bits[5];
|
||||
uint8_t cnt = 7;
|
||||
uint8_t idx = 0;
|
||||
|
||||
// EMPTY BUFFER
|
||||
for (int i=0; i< 5; i++) bits[i] = 0;
|
||||
|
||||
// REQUEST SAMPLE
|
||||
pinMode(pin, OUTPUT);
|
||||
digitalWrite(pin, LOW);
|
||||
delay(18);
|
||||
digitalWrite(pin, HIGH);
|
||||
delayMicroseconds(40);
|
||||
pinMode(pin, INPUT);
|
||||
|
||||
// ACKNOWLEDGE or TIMEOUT
|
||||
unsigned int loopCnt = 10000;
|
||||
while(digitalRead(pin) == LOW)
|
||||
if (loopCnt-- == 0) return -2;
|
||||
|
||||
loopCnt = 10000;
|
||||
while(digitalRead(pin) == HIGH)
|
||||
if (loopCnt-- == 0) return -2;
|
||||
|
||||
// READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
|
||||
for (int i=0; i<40; i++)
|
||||
{
|
||||
loopCnt = 10000;
|
||||
while(digitalRead(pin) == LOW)
|
||||
if (loopCnt-- == 0) return -2;
|
||||
|
||||
unsigned long t = micros();
|
||||
|
||||
loopCnt = 10000;
|
||||
while(digitalRead(pin) == HIGH)
|
||||
if (loopCnt-- == 0) return -2;
|
||||
|
||||
if ((micros() - t) > 40) bits[idx] |= (1 << cnt);
|
||||
if (cnt == 0) // next byte?
|
||||
{
|
||||
cnt = 7; // restart at MSB
|
||||
idx++; // next byte!
|
||||
}
|
||||
else cnt--;
|
||||
}
|
||||
|
||||
// WRITE TO RIGHT VARS
|
||||
// as bits[1] and bits[3] are allways zero they are omitted in formulas.
|
||||
humidity = bits[0];
|
||||
temperature = bits[2];
|
||||
|
||||
uint8_t sum = bits[0] + bits[2];
|
||||
|
||||
if (bits[4] != sum) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue