This is an example program to fetch data of DHT11 Sensors
Fork of DHT11_with_Nucleo by
main.cpp@5:76a9332af64c, 2015-01-06 (annotated)
- Committer:
- kaliczp
- Date:
- Tue Jan 06 00:54:41 2015 +0000
- Revision:
- 5:76a9332af64c
- Parent:
- 4:62b680fac6ed
- Child:
- 6:8027edc2b69f
- Child:
- 7:5b0793a2b391
Send the measured data bits of DHT11 through UART!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaliczp | 0:e8a1a503d390 | 1 | #include "mbed.h" |
kaliczp | 0:e8a1a503d390 | 2 | |
kaliczp | 2:4469aa7f4995 | 3 | DigitalOut myled(LED1); // Activate LED |
kaliczp | 2:4469aa7f4995 | 4 | DigitalIn mybutton(USER_BUTTON); // Activate button |
kaliczp | 2:4469aa7f4995 | 5 | DigitalInOut data_pin(A0); // Activate digital in |
kaliczp | 4:62b680fac6ed | 6 | Serial pc(SERIAL_TX, SERIAL_RX); // Initialize UART connection |
kaliczp | 4:62b680fac6ed | 7 | // Use a terminal program (eg. TeraTerm). |
kaliczp | 5:76a9332af64c | 8 | Timer tmr; //initialize timer |
kaliczp | 5:76a9332af64c | 9 | char adat[40]; // Array for data |
kaliczp | 5:76a9332af64c | 10 | int i; |
kaliczp | 0:e8a1a503d390 | 11 | |
kaliczp | 3:6228ab73d420 | 12 | // Function to initialize DHT11 |
kaliczp | 3:6228ab73d420 | 13 | void dht_read(void) { |
kaliczp | 3:6228ab73d420 | 14 | data_pin.output(); // Set A0 as output |
kaliczp | 3:6228ab73d420 | 15 | // Initialize measurement > 18 ms low |
kaliczp | 3:6228ab73d420 | 16 | data_pin = 0; |
kaliczp | 3:6228ab73d420 | 17 | wait_ms(20); |
kaliczp | 3:6228ab73d420 | 18 | // After high and release the pin switch input mode |
kaliczp | 3:6228ab73d420 | 19 | data_pin = 1; |
kaliczp | 4:62b680fac6ed | 20 | data_pin.input(); |
kaliczp | 5:76a9332af64c | 21 | // Wait until the end of 80 us low |
kaliczp | 5:76a9332af64c | 22 | while(!data_pin.read()) {} |
kaliczp | 5:76a9332af64c | 23 | // Wait until end of 80 us high |
kaliczp | 5:76a9332af64c | 24 | while(data_pin.read()) {} |
kaliczp | 5:76a9332af64c | 25 | // 40 bit, 40 read out cycle |
kaliczp | 5:76a9332af64c | 26 | for(i=0; i<40; i++) { |
kaliczp | 5:76a9332af64c | 27 | tmr.stop(); // Stop timer if runs |
kaliczp | 5:76a9332af64c | 28 | tmr.reset(); // Reset timer |
kaliczp | 5:76a9332af64c | 29 | // Wait until pin |
kaliczp | 5:76a9332af64c | 30 | while(!data_pin.read()) {} |
kaliczp | 5:76a9332af64c | 31 | tmr.start(); |
kaliczp | 5:76a9332af64c | 32 | while(data_pin.read()) {} |
kaliczp | 5:76a9332af64c | 33 | // If DHT11 HIGH longer than 40 micro seconds (hopefully 70 us) |
kaliczp | 5:76a9332af64c | 34 | if(tmr.read_us() > 40) { |
kaliczp | 5:76a9332af64c | 35 | // bit is 1 |
kaliczp | 5:76a9332af64c | 36 | adat[i] = 1; |
kaliczp | 5:76a9332af64c | 37 | } |
kaliczp | 5:76a9332af64c | 38 | } |
kaliczp | 3:6228ab73d420 | 39 | } |
kaliczp | 3:6228ab73d420 | 40 | |
kaliczp | 0:e8a1a503d390 | 41 | int main() { |
kaliczp | 4:62b680fac6ed | 42 | pc.printf("Read the DHT11 temperature and humidity sensor!\n"); //Welcome message |
kaliczp | 0:e8a1a503d390 | 43 | while(1) { |
kaliczp | 1:c0c5b5860aa8 | 44 | if (mybutton == 0) { // Button is pressed |
kaliczp | 5:76a9332af64c | 45 | // Reset character array |
kaliczp | 5:76a9332af64c | 46 | for(i=0; i < 40; i++){ |
kaliczp | 5:76a9332af64c | 47 | adat[i] = 0; |
kaliczp | 5:76a9332af64c | 48 | } |
kaliczp | 1:c0c5b5860aa8 | 49 | myled = 1; // LED is ON |
kaliczp | 3:6228ab73d420 | 50 | dht_read(); // Call the function |
kaliczp | 5:76a9332af64c | 51 | // Send result through UART result |
kaliczp | 5:76a9332af64c | 52 | for(i=0; i < 40; i++){ |
kaliczp | 5:76a9332af64c | 53 | pc.printf("%d",adat[i]); |
kaliczp | 5:76a9332af64c | 54 | } |
kaliczp | 2:4469aa7f4995 | 55 | wait_ms(200); // Wait 0.2 sec till continue. |
kaliczp | 1:c0c5b5860aa8 | 56 | } else { |
kaliczp | 1:c0c5b5860aa8 | 57 | myled = 0; // LED is OFF |
kaliczp | 1:c0c5b5860aa8 | 58 | } |
kaliczp | 0:e8a1a503d390 | 59 | } |
kaliczp | 0:e8a1a503d390 | 60 | } |