2017-05-20 7 views
5

私は現在、DHT11 humidity and temperature sensorを読む必要があるプロジェクトに取り組んでいます。 MCUとシリアルデバイス間の通信は非常に低レベルですが、測定値(湿度+温度)を長さ4のバイト配列(5番目のバイトはチェックサム)として受け取ります。2バイトから浮動小数点数を組み立てるには?

温度フロートと同じにbyte[0]byte[1]を変換したい

- 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 

(バイト[2]及びバイト[3]):私はDHT11センサから受け取ります。 C/C++でArduino Mega 2560でこれを達成する効率的な方法は何ですか?

例:

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

答えて

5

残念ながら、リンクされたデータシートに設けられた両方の例は、小数部はゼロを送信します。しかし、上位バイトからのデータは、256で割った下位バイト(データの小数部分の状態数)からのデータに追加することができるという記述から表示されます。

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

良いチャンスがありますDHT11の場合、小数部は常に0です。いくつかの図書館はそれを全く読んでいない。 DHT11とDHT22を区別するために0値(湿度と温度の両方)を使用するものもあります。 –

+0

クイック返信ありがとう。うまく動作しますが、Andreyが述べたように、小数部分は実際には常にゼロです。しかし、私は確かに私のプロジェクトの別の部分でそれを使用します。ありがとう! – salocinx

関連する問題