55 #define DHT11_SIGNAL_HIGH (1) 61 #define DHT11_SIGNAL_LOW (0) 67 #define DHT11_SIGNAL_START_PHASE1_DURATION (40) 73 #define DHT11_SIGNAL_START_PHASE2_DURATION (80) 79 #define DHT11_SIGNAL_START_PHASE3_DURATION (80) 85 #define DHT11_SIGNAL_RESPONSE_PHASE1_DURATION (50) 91 #define DHT11_SIGNAL_RESPONSE_BIT_0_DURATION (28) 97 #define DHT11_SIGNAL_RESPONSE_BIT_1_DURATION (70) 106 #define DHT11_TICKS_GUARD (1) 115 #define DHT11_US_GUARD RTIMERTICKS_TO_US(1) 121 #define DHT11_DATA_SAMPLES (40) 127 #define DHT11_DATA_SIZE (5) 133 #define DHT11_SAMPLING_RATE_SECONDS (1) 159 clock_time_t last_read;
174 dht11_humidity_integer(
void)
180 dht11_humidity_decimal(
void)
186 dht11_temperature_integer(
void)
192 dht11_temperature_decimal(
void)
198 dht_signal_duration(uint8_t active, uint32_t max_duration)
200 rtimer_clock_t elapsed_ticks;
201 rtimer_clock_t max_wait_ticks = US_TO_RTIMERTICKS(max_duration) +
DHT11_TICKS_GUARD;
209 if(elapsed_ticks > max_wait_ticks) {
213 return RTIMERTICKS_TO_US(elapsed_ticks);
217 dht_signal_transition(uint8_t active, uint32_t max_duration)
219 return dht_signal_duration(active, max_duration);
223 dht_verify_checksum(
void)
225 return ((
dht.data[0] +
dht.data[1] +
dht.data[2] +
dht.data[3]) & 0xFF) ==
dht.data[4];
242 gpio_hal_arch_pin_set_output(
dht.port,
dht.pin);
243 gpio_hal_arch_clear_pin(
dht.port,
dht.pin);
245 gpio_hal_arch_set_pin(
dht.port,
dht.pin);
246 gpio_hal_arch_pin_set_input(
dht.port,
dht.pin);
283 if(data_signal_duration[i] == -1) {
296 dht.data[j] = (
dht.data[j] << 1) | 1;
298 dht.data[j] =
dht.data[j] << 1;
308 if(!dht_verify_checksum()) {
320 return dht11_humidity_integer();
322 return dht11_humidity_decimal();
324 return dht11_temperature_integer();
326 return dht11_temperature_decimal();
341 configure(
int type,
int c)
350 case SENSORS_HW_INIT:
372 SENSORS_SENSOR(dht11_sensor,
"dht11", value, configure, status);
#define DHT11_STATUS_OKAY
DHT11 status okay.
#define DHT11_SIGNAL_RESPONSE_PHASE1_DURATION
Duration of signal response phase 1 according to data sheet.
#define DHT11_STATUS_TIMEOUT
DHT11 status timeout.
#define DHT11_SIGNAL_RESPONSE_BIT_1_DURATION
Duration of signal response if bit is set to 1, according to data sheet.
#define DHT11_VALUE_TEMPERATURE_INTEGER
DHT11 value type for temperature integer part.
#define DHT11_DATA_SIZE
Number of bytes in data.
#define RTIMER_BUSYWAIT_UNTIL(cond, max_time)
Busy-wait until a condition for at most max_time.
DHT 11 sensor header file.
#define DHT11_SIGNAL_START_PHASE2_DURATION
Duration of signal start phase 2 according to data sheet.
#define DHT11_SIGNAL_RESPONSE_BIT_0_DURATION
Duration of signal response if bit is set to 0, according to data sheet.
uint8_t gpio_hal_port_t
A data structure that represents ports.
#define DHT11_CONFIGURE_GPIO_PORT
DHT11 Configuration type for GPIO Port.
unsigned long clock_seconds(void)
Get the current value of the platform seconds.
#define DHT11_CONFIGURE_GPIO_PIN
DHT11 Configuration type for GPIO Pin.
#define DHT11_US_GUARD
Sensor timer drift in us from rtimer.
#define DHT11_SIGNAL_START_PHASE1_DURATION
Duration of signal start phase 1 according to data sheet.
#define RTIMER_NOW()
Get the current clock time.
#define DHT11_TICKS_GUARD
Sensor timer drift in ticks.
#define DHT11_STATUS_CHECKSUM_FAILED
DHT11 status checksum failed.
#define DHT11_VALUE_TEMPERATURE_DECIMAL
DHT11 value type for temperature decimal part.
static dht_t dht
DHT struct.
#define DHT11_SIGNAL_HIGH
GPIO High.
#define DHT11_VALUE_HUMIDITY_DECIMAL
DHT11 value type for humidity decimal part.
uint8_t gpio_hal_pin_t
GPIO pin number representation.
#define DHT11_SIGNAL_LOW
GPIO Low.
#define DHT11_VALUE_HUMIDITY_INTEGER
DHT11 value type for humidity integer part.
#define DHT11_SIGNAL_START_PHASE3_DURATION
Duration of signal start phase 3 according to data sheet.
#define DHT11_DATA_SAMPLES
Number of data requests.
#define DHT11_SAMPLING_RATE_SECONDS
DHT11 maximum sample rate is 1 Hz (1 second)
Header file for the GPIO HAL.
#define RTIMER_BUSYWAIT(duration)
Busy-wait for a fixed duration.
static uint8_t dht_read(void)