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;
174dht11_humidity_integer(
void)
180dht11_humidity_decimal(
void)
186dht11_temperature_integer(
void)
192dht11_temperature_decimal(
void)
198dht_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);
217dht_signal_transition(uint8_t active, uint32_t max_duration)
219 return dht_signal_duration(active, max_duration);
223dht_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();
341configure(
int type,
int c)
350 case SENSORS_HW_INIT:
372SENSORS_SENSOR(dht11_sensor,
"dht11", value, configure, status);
DHT 11 sensor header file.
Header file for the GPIO HAL.
unsigned long clock_seconds(void)
Get the current value of the platform seconds.
#define DHT11_DATA_SIZE
Number of bytes in data.
#define DHT11_SIGNAL_START_PHASE1_DURATION
Duration of signal start phase 1 according to data sheet.
#define DHT11_SIGNAL_RESPONSE_BIT_1_DURATION
Duration of signal response if bit is set to 1, according to data sheet.
static uint8_t dht_read(void)
#define DHT11_SIGNAL_LOW
GPIO Low.
#define DHT11_STATUS_CHECKSUM_FAILED
DHT11 status checksum failed.
#define DHT11_CONFIGURE_GPIO_PIN
DHT11 Configuration type for GPIO Pin.
#define DHT11_SIGNAL_HIGH
GPIO High.
#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_TICKS_GUARD
Sensor timer drift in ticks.
#define DHT11_US_GUARD
Sensor timer drift in us from rtimer.
#define DHT11_VALUE_TEMPERATURE_INTEGER
DHT11 value type for temperature integer part.
#define DHT11_SIGNAL_RESPONSE_BIT_0_DURATION
Duration of signal response if bit is set to 0, according to data sheet.
#define DHT11_DATA_SAMPLES
Number of data requests.
#define DHT11_VALUE_TEMPERATURE_DECIMAL
DHT11 value type for temperature decimal part.
#define DHT11_SIGNAL_START_PHASE2_DURATION
Duration of signal start phase 2 according to data sheet.
#define DHT11_CONFIGURE_GPIO_PORT
DHT11 Configuration type for GPIO Port.
#define DHT11_SAMPLING_RATE_SECONDS
DHT11 maximum sample rate is 1 Hz (1 second)
static dht_t dht
DHT struct.
#define DHT11_STATUS_TIMEOUT
DHT11 status timeout.
#define DHT11_STATUS_OKAY
DHT11 status okay.
#define DHT11_VALUE_HUMIDITY_DECIMAL
DHT11 value type for humidity decimal part.
#define DHT11_SIGNAL_RESPONSE_PHASE1_DURATION
Duration of signal response phase 1 according to data sheet.
uint8_t gpio_hal_port_t
A data structure that represents ports.
uint8_t gpio_hal_pin_t
GPIO pin number representation.
#define RTIMER_BUSYWAIT_UNTIL(cond, max_time)
Busy-wait until a condition for at most max_time.
#define RTIMER_BUSYWAIT(duration)
Busy-wait for a fixed duration.
#define RTIMER_NOW()
Get the current clock time.