Hallo,
ich schmeiss hier gleich alles vom Tisch xD
ich habe ein Board was mir Sensordaten in einem array an den Pc schickt.
und um diese Daten lesen zu können, muss ich am pc jeweils 2
Arraystellen zusammen shiften.
So auf der Board seite Shift ich das aber erst mal auf die richtige
Größe
1 | out[0] = (unsigned char) ((uint16_t)(accel[0] >> 12) % 256);
|
2 | out[1] = (unsigned char) ((uint16_t)(accel[0] >> 4) % 256);
|
(isgesamt übertrage ich ein 16-Bit Array.)
das sieht dann so aus. Und das will ich auch eigendlich nicht verändern,
warum, dazu komm ich noch.
Ich habe ein Python-test-Programm, mit dem ich die Werte nämlich richtig
auslesen (Ohne etwas an der Software auf dem Board zu ändern).
Das sieht (meiner Meinung nach die wichtigstens Ausschnitte) so aus:
1 | self.data = [0,0,0,0]
|
2 |
|
3 | div = 1.0 / (1 << 12)
|
4 | self.num_elements = 3
|
5 |
|
6 | for ii in range(0,self.num_elements):
|
7 | self.data[ii] = twoBytes(l[2*ii+2],l[2*ii+3]) * div
|
(Die Daten liegen in meinem Array ab der stelle 2 bis 7)
1 | def twoBytes(d1,d2):
|
2 | """ unmarshal two bytes into int16 """
|
3 | d = ord(d1)*256 + ord(d2)
|
4 | if d > 32767:
|
5 | d -= 65536
|
6 | return d
|
###########################################################
So meine erste Idee war, einfach stumpf nach programmieren (c# auf pc
seite). Das hat leider nicht zu den richtigen Werten geführt.
Jetzt ist meine Frag, wie muss ich das alles wieder shiften und zusammen
führen das ich endlich mal ein richtigies Ergebnis bekomme?
Oder zumindest kann mir den python Teil jemand erklären, damit ich es
vielleicht richtig in c# umsetzten kann.
Was ich ebenfalls versuch habe, ist es einfach zusammen in einen 16 bit
werte zu shiften da kommt aber ebenfalls ein falscher wert raus
bsp.:
1 | value[0] = (long)((((UInt16)b[2]) << 8) + ((UInt16)b[3]));
|
2 |
|
3 | for (int i = 0; i < FLOATARRAY_SIZE; i++)
|
4 | {
|
5 | if (value[i] > 32767)
|
6 | {
|
7 | value[i] -= 65536;
|
8 | }
|
9 | val[i] = ((float)value[i]) / 16384.0f;
|
10 | }
|
Ich hab einfach überhaupt keine Idee mehr glaube aber, eigendlich dürfte
das garnicht so schwer sein ...
viele Grüße