2017-05-20 20 views
5

Şu anda bir DHT11 humidity and temperature sensor okumam gereken bir proje üzerinde çalışıyorum. MCU ile seri cihaz arasındaki iletişim oldukça düşük seviyededir, ancak ölçülen değerleri (nem + sıcaklık) 4 (bayt dizisi) olarak kabul etmiştim (5 bayt, sağlama toplamıdır):İki bayttan bir float nasıl monte edilir?

Değerler I DHT11 sensöründen alma:

- 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 

Şimdi sıcaklığı için bir şamandıra aynı için byte[0] ve byte[1] dönüştürmek istiyoruz (byte [2] ve bayt [3]). Bunu bir Arduino Mega 2560'da C/C++'da başarmanın etkili bir yolu nedir?

Örnek:

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

cevap

5

Ne yazık ki, bağlantı veri sayfası sağlanan iki örnek ondalık kısmı için sıfır geçecektir. iyi bir şans var

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

: Bununla birlikte, büyük bir bayt veri (ondalık veri kısmında durumlarının sayısı) 256 ile bölünmüş alt bayt veri eklenebilir tariften görünür DHT11 durumunda "ondalık" kısmı her zaman 0'dır. Bazı kütüphaneler hiç okumayı zahmet etmiyor; Bazı DHT11 ve DHT22 arasında ayrım yapmak için bile 0 değeri (hem nem hem de sıcaklık) kullanın. –

+0

Hızlı yanıt için teşekkürler. İyi çalışıyor, Andrey'nin de belirttiği gibi, ondalık kısım aslında her zaman sıfırdır. Ama kesinlikle projemin başka bir bölümünde kullanacağım. Teşekkürler! – salocinx

İlgili konular