pcsensor-temper
pcsensor-temper copied to clipboard
Temperature is signed, especially below zero
Below freezing point I got readings of 255.82, which is obviously incorrect. I tried this, and it seems fine:
diff --git a/src/pcsensor.c b/src/pcsensor.c
index 56fb787..31018a2 100644
--- a/src/pcsensor.c
+++ b/src/pcsensor.c
@@ -258,7 +258,7 @@ void interrupt_read(usb_dev_handle *dev) {
void interrupt_read_temperatura(usb_dev_handle *dev, float *tempC) {
int r,i, temperature;
- unsigned char answer[reqIntLen];
+ char answer[reqIntLen];
bzero(answer, reqIntLen);
r = usb_interrupt_read(dev, 0x82, answer, reqIntLen, timeout);
@@ -274,9 +274,9 @@ void interrupt_read_temperatura(usb_dev_handle *dev, float *tempC) {
printf("\n");
}
- temperature = (answer[3] & 0xFF) + (answer[2] << 8);
+ temperature = (answer[3] & 0xFF) | (answer[2] << 8);
temperature += calibration;
- *tempC = temperature * (125.0 / 32000.0);
+ *tempC = temperature / 256.0;
}