2017-05-20 53 views
5

Obecnie pracuję nad projektem, w którym muszę odczytać numer DHT11 humidity and temperature sensor. Komunikacja między MCU a urządzeniem szeregowym jest dość niska, ale udało mi się otrzymać zmierzone wartości (wilgotność + temperatura) jako tablicę bajtów o długości 4 (piątym bajtem jest suma kontrolna):Jak utworzyć float z dwóch bajtów?

Wartości, które otrzymuję z czujnika DHT11:

- byte[0] = humidity integer part 
- byte[1] = humidity decimal part 
- byte[2] = temperature integer part 
- byte[3] = temperature decimal part 
- byte[4] = checksum of the first four bytes 

teraz chciałby konwersji byte[0] i byte[1] z pływakiem a sama dla temperatury (bajt [2], a bajt [3]). Jaki jest skuteczny sposób osiągnięcia tego na Arduino Mega 2560 w C/C++?

przykład:

byte[0] = 20 and byte[1] = 12 => 20.12 [float] 

Odpowiedz

5

Niestety, oba przykłady przedstawione w połączonym arkuszu przesyłu danych zera dla dziesiętnej. Jednak, jak wynika z opisu, że dane z górnego bajtu może być dodawany do danych z dolnego bajtu podzieloną przez 256 (liczba stanów w części dziesiętnych danych):

const float scale = 256.0; 
float humidity = byte[0] + (byte[1]/scale); 
float temperature = byte[2] + (byte[3]/scale); 
+0

istnieje duża szansa "dziesiętna" część zawsze wynosi 0 w przypadku DHT11. Niektóre biblioteki w ogóle nie zadają sobie trudu czytania; niektórzy nawet używają wartości 0 (w wilgotności i temperaturze), aby rozróżnić między DHT11 i DHT22. –

+0

Dzięki za szybką odpowiedź. Działa dobrze, chociaż jak wspomniano przez Andreya, część dziesiętna jest rzeczywiście zawsze zerowa. Ale na pewno wykorzystam to na innej części mojego projektu. Dzięki! – salocinx