Rev 126 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include <avr/io.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "avrutil.h"
#include "dht.h"
void dht_init(uint8_t port, uint8_t pin, uint8_t type, uint8_t count) {
dht.port = port;
dht.pin = pin;
dht.type = type;
dht.count = count;
dht.first = 1;
dht.data = malloc(6 * sizeof(uint8_t));
}
float dht_readTemp() {
float t = 0.0;
if (dht_read()) {
switch (dht.type) {
case DHT11:
t = dht.data[2];
break;
case DHT21:
case DHT22:
t = dht.data[2] & 0x7F;
t *= 256;
t += dht.data[3];
t /= 10;
if (dht.data[2] & 0x80)
t *= -1;
break;
}
}
return t;
}
uint8_t dht_read() {
_delay_us(500);
uint32_t current = systime;
if (!dht.first && ((current - dht.last) < 2000)) {
return 1;
}
dht.first = 0;
dht.last = systime;
return 0;
}