Raziel Lopez
/
FRDM-KL46Z_DTH_TEST
Based on another DHT library, this is just a modified one without using the RTC component
Diff: DHT/DHT.cpp
- Revision:
- 2:ce7b80e0bb2e
- Parent:
- 1:6df9454191d4
- Child:
- 3:8c402316ce7e
--- a/DHT/DHT.cpp Fri Dec 21 03:47:05 2018 +0000 +++ b/DHT/DHT.cpp Thu Dec 27 21:38:08 2018 +0000 @@ -94,7 +94,7 @@ wait_us(30); bitTimes[i*8 + j] = DHT_io; int count = 0; - while (DHT_io == 1 && count < 110) { + while (DHT_io == 1 && count < 100) { wait_us(1); count++; } @@ -102,27 +102,35 @@ } DHT_io.output(); DHT_io = 1; - for (i = 0; i < 5; i++) { - b=0; + + BuildRxBytes(bitTimes); + /*for (i = 0; i < 5; i++) { + b = 0; for (j = 0; j< 8; j++) { - if (bitTimes[i*8+j+1] > 0) { + if ( bitTimes[ i*8+j+1 ] > 0) { b |= ( 1 << (7-j)); } } DHT_data[i]=b; - } + }*/ - if (DHT_data[4] == ((DHT_data[0] + DHT_data[1] + DHT_data[2] + DHT_data[3]) & 0xFF)) { + /*if (DHT_data[4] == ((DHT_data[0] + DHT_data[1] + DHT_data[2] + DHT_data[3]) & 0xFF)) { _lastReadTime = currentTime; _lastTemperature = CalcTemperature(); _lastHumidity = CalcHumidity(); } else { err = ERROR_CHECKSUM; + }*/ + + if(ValidCheckSum()){ + _lastReadTime = currentTime; + } + else{ + err = ERROR_CHECKSUM; } return err; - } float DHT::CalcTemperature() { @@ -208,4 +216,27 @@ return 0; } +void DHT::BuildRxBytes(unsigned int * bitTimes ){ + int byteValue = 0; + for (int byteCount = 0; byteCount < 5; byteCount++) { + byteValue = 0; + for (int bit = 0; bit < 8; bit++) { + if ( bitTimes[ (byteCount * 8)+ bit + 1] > 0) { + byteValue |= ( 1 << (7 - bit) ); + } + } + DHT_data[byteCount] = byteValue; + } +} +bool DHT::ValidCheckSum(void){ + bool CorrectCheckSum = false; + + if (DHT_data[4] == ((DHT_data[0] + DHT_data[1] + DHT_data[2] + DHT_data[3]) & 0xFF)) { + _lastTemperature = CalcTemperature(); + _lastHumidity = CalcHumidity(); + CorrectCheckSum = true; + } + + return CorrectCheckSum; +}