मैं BLE के माध्यम से डेटा हो रही है और मैं उन्हें दशमलव मान में कनवर्ट करना चाहते हैं के लिए डेटा परिवर्तित, फिर भी मैं क्योंकि मूल्य रेंज गलत BLE सेस्विफ्ट - दशमलव मान
मैं characteristic.value
प्राप्त प्रकट होता है मैं कुछ गलत करते हैं संदेह
24ffa400 6d08fcff fffffbff 0d001500 5eff
जो IMU मूल्यों की maily निर्माण किया है।
जब मैं, पहले दो बाइट्स कन्वर्ट करने के लिए इस उदाहरण 24ff
जो है accelerometer एक्स अक्ष मूल्य में की कोशिश, मैं सीमा 1,000-30,000 से एक मूल्य मिलता है (मैं सेंसर करने के लिए कुछ गतिशील आंदोलन की शुरुआत की है देखने के लिए कैसे मूल्य बदल रहा है)।
के बाद से किए गए दस्तावेज़ों का कहना है कि accelerometer पैमाने पर है कि ±16G
दो और महत्वपूर्ण जानकारी कर रहे हैं यह गलत होना चाहिए: इस प्रकार
बाइट्स के अनुक्रम फ्रेम चला जाता है में: [LSB, MSB]
मान हैं 16bit और इस्तेमाल दो के पूरक
यह है कि कैसे मैं दशमलव मान में डेटा परिवर्तित:
class func getAccelerometerData(value: NSData) -> [String] {
let dataFromSensor = dataToSignedBytes8(value)
let bytes:[Int8] = [dataFromSensor[1], dataFromSensor[0]]
let u16 = UnsafePointer<Int16>(bytes).memory
return([twosComplement(u16)])
}
class func twosComplement(num:Int16) -> String {
var numm:UInt16 = 0
if num < 0 {
let a = Int(UInt16.max) + Int(num) + 1
numm = UInt16(a)
}
else { return String(num, radix:10) }
return String(numm, radix:10)
}
मुझे लगता है कि मुझे ऊपर वर्णित विशाल मूल्यों के बजाय < -16: 16> से मूल्य प्राप्त करना चाहिए, मेरे दृष्टिकोण में क्या गलत है?
अग्रिम धन्यवाद
संपादित करें: गुम विधि कार्यान्वयन
class func dataToSignedBytes8(value : NSData) -> [Int8] {
let count = value.length
var array = [Int8](count: count, repeatedValue: 0)
value.getBytes(&array, length:count * sizeof(Int8))
return array
}
तो क्या मैं दो पूरक फ़ंक्शन को छोड़ सकता हूं? मुझे एलएसबी और एमएसबी आदेश पर भी ध्यान देना चाहिए? अब मैं sth getAccelerometerData समारोह इस 'वर्ग की तरह है (मूल्य: NSData) -> डबल { जाने dataFromSensor = dataToSignedBytes8 (मान) बाइट्स करते हैं: [Int8] = [dataFromSensor [0], dataFromSensor [1]] i16 = UnsafePointer (बाइट्स)। मेमरी वापसी (16.0 * डबल (i16)/32768।0) ' और काम कर रहा प्रतीत होता है, क्या आप कोड को सत्यापित कर सकते हैं? –
DCDC
@ डीसीडीसी: मुझे नहीं पता कि आपका डेटा क्या है, हस्ताक्षर किए गएबेट्स 8, जो अनावश्यक लगता है, आप सीधे डेटा तक पहुंच सकते हैं जैसा मैंने प्रदर्शित किया था। अन्यथा यह सही दिखता है। यह मानता है कि 'Int16' एक छोटे-अंत स्मृति स्मृति का उपयोग करता है, जो कि सभी मौजूदा आईओएस उपकरणों के मामले में है। –
@ डीसीडीसी: मैंने इसे बाइट-ऑर्डर सुरक्षित बनाने के लिए कोड अपडेट किया है! –