This is an example program to fetch data of DHT11 Sensors

Dependencies:   mbed

Fork of DHT11_with_Nucleo by Adatgy2014

Committer:
kaliczp
Date:
Wed Jan 14 13:11:36 2015 +0000
Revision:
10:774c12ebf0f2
Parent:
9:a2918c6c37ee
Child:
11:1379308ecace
Print usable output! Separate hex number for humidity, temperature and checksum.

Who changed what in which revision?

UserRevisionLine numberNew 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 9:a2918c6c37ee 9 uint64_t adat; // 64 bit variable for temporary 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 9:a2918c6c37ee 27 adat = adat << 1; // Shift for new number
kaliczp 5:76a9332af64c 28 tmr.stop(); // Stop timer if runs
kaliczp 5:76a9332af64c 29 tmr.reset(); // Reset timer
kaliczp 5:76a9332af64c 30 // Wait until pin
kaliczp 5:76a9332af64c 31 while(!data_pin.read()) {}
kaliczp 5:76a9332af64c 32 tmr.start();
kaliczp 5:76a9332af64c 33 while(data_pin.read()) {}
kaliczp 5:76a9332af64c 34 // If DHT11 HIGH longer than 40 micro seconds (hopefully 70 us)
kaliczp 5:76a9332af64c 35 if(tmr.read_us() > 40) {
kaliczp 5:76a9332af64c 36 // bit is 1
kaliczp 9:a2918c6c37ee 37 adat++;
kaliczp 5:76a9332af64c 38 }
kaliczp 5:76a9332af64c 39 }
kaliczp 3:6228ab73d420 40 }
kaliczp 3:6228ab73d420 41
kaliczp 0:e8a1a503d390 42 int main() {
kaliczp 4:62b680fac6ed 43 pc.printf("Read the DHT11 temperature and humidity sensor!\n"); //Welcome message
kaliczp 0:e8a1a503d390 44 while(1) {
kaliczp 1:c0c5b5860aa8 45 if (mybutton == 0) { // Button is pressed
kaliczp 9:a2918c6c37ee 46 // Reset adat variable
kaliczp 9:a2918c6c37ee 47 adat = 0;
kaliczp 1:c0c5b5860aa8 48 myled = 1; // LED is ON
kaliczp 3:6228ab73d420 49 dht_read(); // Call the function
kaliczp 5:76a9332af64c 50 // Send result through UART result
kaliczp 10:774c12ebf0f2 51 pc.printf("%X", (adat & 0x000000ffff000000) >> 24); // Humidity
kaliczp 7:5b0793a2b391 52 pc.printf("\n\r"); // Send a new line and carriage return.
kaliczp 10:774c12ebf0f2 53 pc.printf("%X", (adat & 0x0000000000ffff00) >> 8 ); // Temperature
kaliczp 10:774c12ebf0f2 54 pc.printf("\n\r");
kaliczp 10:774c12ebf0f2 55 pc.printf("%X", adat & 0x00000000000000ff); // Checksum.
kaliczp 10:774c12ebf0f2 56 pc.printf("\n\r");
kaliczp 2:4469aa7f4995 57 wait_ms(200); // Wait 0.2 sec till continue.
kaliczp 1:c0c5b5860aa8 58 } else {
kaliczp 1:c0c5b5860aa8 59 myled = 0; // LED is OFF
kaliczp 1:c0c5b5860aa8 60 }
kaliczp 0:e8a1a503d390 61 }
kaliczp 0:e8a1a503d390 62 }