Problem with the example: Enabling DHT11 Humidity Sensor.
estebaan Jan 16, 2017 5:46 AMHi
I want to make the example from the following page Intel® Quark™ MCU D2000 — Enable DHT11 Humidity Sensor: Application... ,but when I set the code, it does not compile and it shows errors.
The code is:
#include "qm_gpio.h" /*Calling QMSI GPIO API. See section 3.1 for more details. */
#include "qm_scss.h" /*Calling QMSI SCSS API*/
#define PIN_DHT11 0
int main(void) {
qm_gpio_port_config_t cfg;
uint32_t cycles[80], i;
uint8_t data[5];
typedef struct {
uint32_t direction; /* GPIO direction, 0b: input, 1b: output */
uint32_t int_en; /* Interrupt enable */
uint32_t int_type; /* Interrupt type, 0b: level; 1b: edge */
uint32_t int_polarity; /* Interrupt polarity, 0b: low, 1b: high */
uint32_t int_debounce; /* Debounce on/off */
uint32_t int_bothedge; /* Interrupt on both rising and falling edges */
void (*callback)(uint32_t int_status); /* Callback function */
} qm_gpio_port_config_t;
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
QM_PUTS( "DHT11 example");
cfg.direction = BIT(PIN_DHT11);
qm_gpio_set_config(QM_GPIO_0, &cfg);
qm_gpio_set_pin(QM_GPIO_0, PIN_DHT11); /* set HIGH to DHT11 pin */
clk_sys_udelay(250000); /* 250 ms */
/* The three line above written in QMSI and are similar to Arduino’s
*‘digitalWrite(PIN_DHT11, HIGH);’ which is to let pull-up raise data line level
* And start reading the DHT11. After that proceed with 250 ms delay.
* See section 3.4 for more details.
*/
/* Send DHT11 start signal */
qm_gpio_clear_pin(QM_GPIO_0, PIN_DHT11); /* set DHT11 pin LOW */
clk_sys_udelay(20000); /* 20 ms */
qm_gpio_set_pin(QM_GPIO_0, PIN_DHT11); /* set DHT11 pin HIGH */
clk_sys_udelay(40); /* 40 us */
cfg.direction = 0;
qm_gpio_set_config(QM_GPIO_0, &cfg);
clk_sys_udelay(10); /* 10 us */
uint32_t expectPulse(bool level); /*function to read DHT11 pulse*/
{
uint32_t count = 0;
while (qm_gpio_read_pin(QM_GPIO_0, PIN_DHT11) == level) { /*Error*/
if (count++ >= 100000) { /* 1 millisecond to read DHT11 pulse */
return 0; /* Exceeded timeout, fail. */
}
}
return count;
}
while (1) {
if (!expectPulse(false)) {
QM_PUTS("Timeout waiting for start signal low pulse." );
continue;
}
if (!expectPulse(true)) {
QM_PUTS("Timeout waiting for start signal high pulse.");
continue;
}
for (i = 0; i < 80; i += 2) {
cycles[i] = expectPulse(0); /* LOW */
cycles[i + 1] = expectPulse(1); /* HIGH */
}
/*
// Inspect pulses and determine which ones are 0 (high state cycle count < low
// state cycle count), or 1 (high state cycle count > low state cycle count).
*/
for (i = 0; i < 40; ++i) {
uint32_t lowCycles = cycles[2 * i];
uint32_t highCycles = cycles[2 * i + 1];
if ((lowCycles == 0) || (highCycles == 0)) {
QM_PUTS("Timeout waiting for pulse.");
continue;
}
data[i / 8] <<= 1;
/*Now compare the low and high cycle times to see if the bit is a 0 or 1. */
if (highCycles > lowCycles) {
/* // High cycles are greater than 50us low cycle count, must be a 1. */
data[i / 8] |= 1;
}
/*
// Else high cycles are less than (or equal to, a weird case) the 50us low
// cycle count so this must be a zero. Nothing needs to be changed in the
// stored data.
*/
}QM_PRINTF( "Receive %d %d %d %d %d\n", data[0], data[1],data[2],data[3],
data[4]);
uint8_t TempF = data[2] * 1.8 + 32;
QM_PRINTF ("h : %d, t : %d, f ; %d\r\n", data[0],data[2],TempF);
/* Check we read 40 bits and that the checksum matches. */
if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) {
} else {
QM_PUTS("Checksum failure!");
}
}
return 0;
}
The error is as follows:
Multiple markers at this line
- 'level' undeclared (first use in this function)
- each undeclared identifier is reported only once for each function it appears in
Thanks