SPI konwersja 4 int na float struct

0

Cześć!
Mam następujący problem, korzystam z karty LabJACK (https://github.com/labjack/LabJackPython), przy pomocy której odczytuje dane poprzez SPI z czujnika.

Dane w czujniku zapisne są jako float.

Mój kod w języku python wygląda w następujący sposób

results=d.spi([0x00,0x67,0x0,0x0,0x0,0x0], AutoCS=True, DisableDirConfig = False, SPIMode = 'A', SPIClockFactor = 0, CSPINNum = 1,CLKPinNum = 0, MISOPinNum = 3, MOSIPinNum = 2)
print(results)
data0=results['SPIBytes'][2]
data1=results['SPIBytes'][3]
data2=results['SPIBytes'][4]
data3=results['SPIBytes'][5]

I teraz moje dane są typu int, w jaki najprostszy sposób mogę zmienić ja na float ?

Tutaj https://stackoverflow.com/questions/26179564/python-convert-a-float-to-4-uint8 znalazłem odwrtony przykłąd tzn float dzielony na 4 uint8 /nawet nie int.
Rozumiem, że najprościej byłoby wykorzystać moduł struct?
Czy ktoś mógłby podpowiedzić, w jaki sposób to zrobić? Podesłać podobny przykład?
Generalnie dziwie się, że tak ciężko jest coś znaleźć wydawałoby mi się że w przypadku popularności raspberry powinno być z tym łatwiej.

0

Dokładnie, tak jest. Z tym, że ogólnie fajna byłaby metoda która umożliwiłaby rónież konwersje:
int8 na uint8
*

2 int8 na int16
*
2 int8 na uint16*
to w całości by wyczerpało temat

0
import ctypes
data = sum(b * 2**(8*i) for i, b in enumerate(results['SPIBytes'][5:1:-1]))
ctypes.c_float.from_buffer(ctypes.c_uint32(data)).value
0

Dziękuję za odpowiedzi.
Generalnie skorzystałem z następującej metody

data=results['SPIBytes'][2:6]
b=struct.pack('4B',*data)
dat=struct.unpack('>f',b)
dat=dat[0]

https://stackoverflow.com/questions/25558975/combine-four-bytes-and-convert-to-float

Wykonuje się ona również dwa razy szybciej w porównaniu do metody użytkonika @enedil

1 użytkowników online, w tym zalogowanych: 0, gości: 1