2017-05-20 11 views
5

मैं वर्तमान में एक परियोजना पर काम कर रहा हूं जहां मुझे DHT11 humidity and temperature sensor पढ़ने की आवश्यकता है। एमसीयू और सीरियल डिवाइस के बीच संचार काफी कम स्तर पर है, लेकिन मैं लंबाई 4 (बाइट बाइट चेकसम) के बाइट सरणी के रूप में मापा मान (आर्द्रता + तापमान) प्राप्त करने में कामयाब रहा:दो बाइट्स से एक फ्लोट कैसे इकट्ठा करें?

मानदंड मैं 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 

मैं अब एक नाव और एक ही तापमान के लिए करने के लिए byte[0] और byte[1] रूपांतरित होते हैं (बाइट [2] और बाइट [3])। C/C++ में Arduino मेगा 2560 पर इसे पूरा करने का एक प्रभावी तरीका क्या है?

उदाहरण:

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

उत्तर

5

दुर्भाग्य से, जुड़ा हुआ डाटा शीट में प्रदान की दोनों उदाहरण दशमलव भाग के लिए शून्य भेजें।

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

वहाँ एक अच्छा मौका है: हालांकि, यह वर्णन है कि ऊपरी बाइट से डेटा कम बाइट (डेटा का दशमलव भाग में राज्यों की संख्या) 256 से विभाजित से डेटा में जोड़ा जा सकता से प्रकट होता है DHT11 के मामले में "दशमलव" भाग हमेशा 0 होता है। कुछ पुस्तकालय इसे पढ़ने को परेशान नहीं करते हैं; कुछ डीएचटी 11 और डीएचटी 22 के बीच अंतर करने के लिए 0 मान (आर्द्रता और तापमान दोनों में) का भी उपयोग करते हैं। –

+0

त्वरित उत्तर के लिए धन्यवाद। ठीक काम करता है, हालांकि एंड्री द्वारा वर्णित अनुसार, दशमलव भाग वास्तव में हमेशा शून्य होता है। लेकिन मैं निश्चित रूप से इसका उपयोग अपने प्रोजेक्ट के दूसरे हिस्से पर करूँगा। धन्यवाद! – salocinx

संबंधित मुद्दे