roger schrieb:
> So erhalte ich als Ausgabe +65425 bei -9.8 Grad
>
> sprintf(buffer, "%+d.%d ", temp /10, temp %10));
Das kann ja nicht sein. Da fehlt ja dann mindestens der "." bei der
Ausgabe.
Prüfe mal, was in sensor_data[2] und sensor_data[3] steht, bzw. gibt
diese Werte auch mal mit aus.
1 | int16_t temp;
|
2 | uint8_t sensor_data[4];
|
3 |
|
4 | sensor_data[2] = 0x80; // negativ
|
5 | sensor_data[3] = 98; // 9.8°
|
6 |
|
7 | temp = ((sensor_data[2] & 0x7F) << 8) | sensor_data[3];
|
8 | if (sensor_data[2] & 0x80) { // highest bit indicating negative temperature
|
9 | temp = -temp;
|
10 | }
|
11 |
|
12 | printf("%+d.%d ", temp/10, abs(temp)%10);
|
gibt bei mir "-9.8 " aus.
Kleiner Schönheitsfehler noch:
1 | sprintf(buffer, "%+d.%d ", temp /10, temp %10));
|
sollte besser
1 | sprintf(buffer, "%+d.%d ", temp/10, abs(temp)%10));
|
lauten, sonst hast du negative Vorzeichen auch vor den Nachkommastellen.