這主要是一個紅寶石問題。解析從i2c與紅寶石覆盆子pi浮法float
我被困在試圖從一個i2c設備解析一些字節到一個浮點值的紅寶石。
長的故事:
我試圖讀取與樹莓派和AtTiny85(設備)的I2C設備的浮點值。我能夠通過i2ctools
實例來讀取控制檯它的值:
i2cset -y 0 0x25 0x00; sleep 1; i2cget -y 0 0x25 0x00; i2cget -y 0 0x25 0x00; i2cget -y 0 0x25 0x00; i2cget -y 0 0x25 0x00
給我:
0x3e
0x00
0x80
0x92
這意味着0.12549046,這是伏的值,我能夠檢查我的萬用表,並確定。 (字節的順序是0x3e008092)
現在我需要從一個紅寶石腳本得到這個浮點值,我使用i2c gem。
上this site註釋建議以下轉換方法:
hex_string = '42880000'
float = [hex_string.to_i(16)].pack('L').unpack('F')[0]
# => 68.0
float = 66.2
hex_string = [float].pack('F').unpack('L')[0].to_s(16)
# => 42846666
但我一直沒能得到十六進制值這個字符串。該代碼部分:
require "i2c/i2c"
require "i2c/backends/i2c-dev"
@i2c = ::I2C.create("/dev/i2c-0")
sharp = 0x25
@i2c.write(sharp, 0)
sleep 1
puts @i2c.read(sharp, 4).inspect
穿屏幕
">\x00\x00P"
當字符「>」和「P」是在該位置的字節的ASCII值,但然後我不能知道在哪裏/如何分割字符串並清理它,至少可以嘗試上面顯示的方法。
我可以編寫一個C程序來讀取值並將其printf到控制檯或其他東西,並從ruby運行它,但我認爲這將是一個可怕的解決方案。
有關如何做到這一點的一些想法會非常有幫助!
問候。