Program za ispit

Dependencies:   mbed

Committer:
Filip10
Date:
Fri Mar 29 18:02:34 2019 +0000
Revision:
0:ff77d67fd52a
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Filip10 0:ff77d67fd52a 1 #include "Dht11.h"
Filip10 0:ff77d67fd52a 2
Filip10 0:ff77d67fd52a 3 Dht11::Dht11(PinName const &p) : _pin(p) {
Filip10 0:ff77d67fd52a 4 // Set creation time so we can make
Filip10 0:ff77d67fd52a 5 // sure we pause at least 1 second for
Filip10 0:ff77d67fd52a 6 // startup.
Filip10 0:ff77d67fd52a 7 _timer.start();
Filip10 0:ff77d67fd52a 8
Filip10 0:ff77d67fd52a 9 _temperature = 0;
Filip10 0:ff77d67fd52a 10 _humidity = 0;
Filip10 0:ff77d67fd52a 11 }
Filip10 0:ff77d67fd52a 12
Filip10 0:ff77d67fd52a 13 int Dht11::read()
Filip10 0:ff77d67fd52a 14 {
Filip10 0:ff77d67fd52a 15 // BUFFER TO RECEIVE
Filip10 0:ff77d67fd52a 16 uint8_t bits[5];
Filip10 0:ff77d67fd52a 17 uint8_t cnt = 7;
Filip10 0:ff77d67fd52a 18 uint8_t idx = 0;
Filip10 0:ff77d67fd52a 19
Filip10 0:ff77d67fd52a 20 // EMPTY BUFFER
Filip10 0:ff77d67fd52a 21 for (int i=0; i< 5; i++) bits[i] = 0;
Filip10 0:ff77d67fd52a 22
Filip10 0:ff77d67fd52a 23 // Verify sensor settled after boot
Filip10 0:ff77d67fd52a 24 while(_timer.read_ms() < 1500) {}
Filip10 0:ff77d67fd52a 25 _timer.stop();
Filip10 0:ff77d67fd52a 26
Filip10 0:ff77d67fd52a 27 // Notify it we are ready to read
Filip10 0:ff77d67fd52a 28 _pin.output();
Filip10 0:ff77d67fd52a 29 _pin = 0;
Filip10 0:ff77d67fd52a 30 wait_ms(18);
Filip10 0:ff77d67fd52a 31 _pin = 1;
Filip10 0:ff77d67fd52a 32 wait_us(40);
Filip10 0:ff77d67fd52a 33 _pin.input();
Filip10 0:ff77d67fd52a 34
Filip10 0:ff77d67fd52a 35 // ACKNOWLEDGE or TIMEOUT
Filip10 0:ff77d67fd52a 36 unsigned int loopCnt = 10000;
Filip10 0:ff77d67fd52a 37 while(_pin == 0)
Filip10 0:ff77d67fd52a 38 if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
Filip10 0:ff77d67fd52a 39
Filip10 0:ff77d67fd52a 40 loopCnt = 10000;
Filip10 0:ff77d67fd52a 41 while(_pin == 1)
Filip10 0:ff77d67fd52a 42 if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
Filip10 0:ff77d67fd52a 43
Filip10 0:ff77d67fd52a 44 // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
Filip10 0:ff77d67fd52a 45 for (int i=0; i<40; i++)
Filip10 0:ff77d67fd52a 46 {
Filip10 0:ff77d67fd52a 47 loopCnt = 10000;
Filip10 0:ff77d67fd52a 48 while(_pin == 0)
Filip10 0:ff77d67fd52a 49 if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
Filip10 0:ff77d67fd52a 50
Filip10 0:ff77d67fd52a 51 //unsigned long t = micros();
Filip10 0:ff77d67fd52a 52 Timer t;
Filip10 0:ff77d67fd52a 53 t. start();
Filip10 0:ff77d67fd52a 54
Filip10 0:ff77d67fd52a 55 loopCnt = 10000;
Filip10 0:ff77d67fd52a 56 while(_pin == 1)
Filip10 0:ff77d67fd52a 57 if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
Filip10 0:ff77d67fd52a 58
Filip10 0:ff77d67fd52a 59 if (t.read_us() > 40) bits[idx] |= (1 << cnt);
Filip10 0:ff77d67fd52a 60 if (cnt == 0) // next byte?
Filip10 0:ff77d67fd52a 61 {
Filip10 0:ff77d67fd52a 62 cnt = 7; // restart at MSB
Filip10 0:ff77d67fd52a 63 idx++; // next byte!
Filip10 0:ff77d67fd52a 64 }
Filip10 0:ff77d67fd52a 65 else cnt--;
Filip10 0:ff77d67fd52a 66 }
Filip10 0:ff77d67fd52a 67
Filip10 0:ff77d67fd52a 68 // WRITE TO RIGHT VARS
Filip10 0:ff77d67fd52a 69 // as bits[1] and bits[3] are allways zero they are omitted in formulas.
Filip10 0:ff77d67fd52a 70 _humidity = bits[0];
Filip10 0:ff77d67fd52a 71 _temperature = bits[2];
Filip10 0:ff77d67fd52a 72
Filip10 0:ff77d67fd52a 73 uint8_t sum = bits[0] + bits[2];
Filip10 0:ff77d67fd52a 74
Filip10 0:ff77d67fd52a 75 if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
Filip10 0:ff77d67fd52a 76 return DHTLIB_OK;
Filip10 0:ff77d67fd52a 77 }
Filip10 0:ff77d67fd52a 78
Filip10 0:ff77d67fd52a 79 float Dht11::getFahrenheit() {
Filip10 0:ff77d67fd52a 80 return((_temperature * 1.8) + 32);
Filip10 0:ff77d67fd52a 81 }
Filip10 0:ff77d67fd52a 82
Filip10 0:ff77d67fd52a 83 int Dht11::getCelsius() {
Filip10 0:ff77d67fd52a 84 return(_temperature);
Filip10 0:ff77d67fd52a 85 }
Filip10 0:ff77d67fd52a 86
Filip10 0:ff77d67fd52a 87 int Dht11::getHumidity() {
Filip10 0:ff77d67fd52a 88 return(_humidity);
Filip10 0:ff77d67fd52a 89 }