This is an example program to fetch data of DHT11 Sensors
Fork of DHT11_with_Nucleo by
main.cpp@11:1379308ecace, 2015-01-20 (annotated)
- Committer:
- kaliczp
- Date:
- Tue Jan 20 02:21:22 2015 +0000
- Revision:
- 11:1379308ecace
- Parent:
- 10:774c12ebf0f2
- Child:
- 12:31645d013d6c
Use decimal numbers to communicate data!
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 | 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 | 11:1379308ecace | 51 | pc.printf("%d", (adat & 0x000000ff00000000) >> 32); // Humidity |
kaliczp | 7:5b0793a2b391 | 52 | pc.printf("\n\r"); // Send a new line and carriage return. |
kaliczp | 11:1379308ecace | 53 | pc.printf("%d", (adat & 0x0000000000ff0000) >> 16 ); // Temperature |
kaliczp | 10:774c12ebf0f2 | 54 | pc.printf("\n\r"); |
kaliczp | 11:1379308ecace | 55 | pc.printf("%d", 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 | } |