15 #include <propeller.h>
18 static int dht_timeout[32];
19 static int dht_last_temp, dht_last_humidity, dht_timeout_ignore;
25 int dhtpm = (1 << dht_pin);
29 dht_timeout_ignore |= dhtpm;
31 dht_timeout_ignore &= ~dhtpm;
37 int tt = dht_last_temp;
41 tt = tt * 9 / 5 + 320;
49 return dht_last_humidity;
56 if(dht_pin >= 0 && dht_pin < 32) {
59 int dhtpm = (1 << dht_pin);
62 if (
CNT - dht_timeout[dht_pin] <
CLKFREQ/2 && dht_timeout[dht_pin] != 0 && !(dht_timeout_ignore & dhtpm))
67 int dhtc = 0, dhtk = 0, dhts = 0, dhto = 0, dhth = 0, dhtt = 0, dhte = 0;
90 for (
int j = 0; j <
CLKFREQ / 2000; j++) {
91 if (!(
INA & dhtpm) && !dhst)
93 if ((
INA & dhtpm) && dhst) {
104 for (dhtc = 2; dhtc < 18; dhtc++) {
106 dhth |= (dhtp[dhtc] - dhtp[dhtc-1] >
CLKFREQ/9800);
110 for (dhtc = 18; dhtc < 34; dhtc++) {
112 dhtt |= (dhtp[dhtc] - dhtp[dhtc-1] >
CLKFREQ/9800);
116 for (dhtc = 34; dhtc < 42; dhtc++) {
118 dhtk |= (dhtp[dhtc] - dhtp[dhtc-1] >
CLKFREQ/9800);
127 dhtt *= (dhts ? -1 : 1);
130 dhte = (((dhth >> 8) & 255) + (dhth & 255) + ((dhtt >> 8) & 255) + (dhtt & 255)) & 255;
139 dht_last_humidity = dhth;
140 dht_last_temp = dhtt;
144 dht_timeout[dht_pin] =
CNT;