diff --git a/drivers/sensor/bme280/bme280.c b/drivers/sensor/bme280/bme280.c index 72ac74635a5..e8ee9f7d8eb 100644 --- a/drivers/sensor/bme280/bme280.c +++ b/drivers/sensor/bme280/bme280.c @@ -212,8 +212,6 @@ static int bme280_channel_get(struct device *dev, */ val->val1 = (data->comp_humidity >> 10); val->val2 = (((data->comp_humidity & 0x3ff) * 1000 * 1000) >> 10); - val->val1 = val->val1 * 1000 + (val->val2 * 1000) / 1000000; - val->val2 = (val->val2 * 1000) % 1000000; break; default: return -EINVAL; diff --git a/drivers/sensor/dht/dht.c b/drivers/sensor/dht/dht.c index 54e4c20be44..8c50ad76eaf 100644 --- a/drivers/sensor/dht/dht.c +++ b/drivers/sensor/dht/dht.c @@ -168,7 +168,7 @@ static int dht_channel_get(struct device *dev, #if defined(CONFIG_DHT_CHIP_DHT11) /* use only integral data byte */ if (chan == SENSOR_CHAN_HUMIDITY) { - val->val1 = drv_data->sample[0] * 1000; + val->val1 = drv_data->sample[0]; val->val2 = 0; } else { /* chan == SENSOR_CHAN_TEMP */ val->val1 = drv_data->sample[2]; @@ -183,8 +183,8 @@ static int dht_channel_get(struct device *dev, if (chan == SENSOR_CHAN_HUMIDITY) { raw_val = (drv_data->sample[0] << 8) | drv_data->sample[1]; - val->val1 = raw_val * 100; - val->val2 = 0; + val->val1 = raw_val / 10; + val->val2 = (raw_val % 10) * 100000; } else { /* chan == SENSOR_CHAN_TEMP */ raw_val = (drv_data->sample[2] << 8) | drv_data->sample[3]; diff --git a/drivers/sensor/hdc1008/hdc1008.c b/drivers/sensor/hdc1008/hdc1008.c index dd5f69f554e..68ff1d2b678 100644 --- a/drivers/sensor/hdc1008/hdc1008.c +++ b/drivers/sensor/hdc1008/hdc1008.c @@ -73,10 +73,12 @@ static int hdc1008_channel_get(struct device *dev, val->val1 = (s32_t)(tmp >> 16) - 40; val->val2 = (1000000 * (tmp & 0xFFFF)) >> 16; } else if (chan == SENSOR_CHAN_HUMIDITY) { - /* val = 100000 * sample / 2^16 */ - tmp = 100000 * (u64_t)drv_data->rh_sample; - val->val1 = tmp >> 16; - val->val2 = (1000000 * (tmp & 0xFFFF)) >> 16; + /* val = 100 * sample / 2^16 */ + u32_t tmp2; + tmp2 = 100 * (u32_t)drv_data->rh_sample; + val->val1 = tmp2 >> 16; + /* x * 1000000 / 65536 == x * 15625 / 1024 */ + val->val2 = (15625 * (tmp2 & 0xFFFF)) >> 10; } else { return -ENOTSUP; } diff --git a/drivers/sensor/hts221/hts221.c b/drivers/sensor/hts221/hts221.c index 31a4e03a720..2fd20415bcb 100644 --- a/drivers/sensor/hts221/hts221.c +++ b/drivers/sensor/hts221/hts221.c @@ -43,9 +43,9 @@ static int hts221_channel_get(struct device *dev, (drv_data->h1_t0_out - drv_data->h0_t0_out) + drv_data->h0_rh_x2; - /* convert humidity x2 to mili-percent */ - val->val1 = conv_val * 500; - val->val2 = 0; + /* convert humidity x2 to percent */ + val->val1 = conv_val / 2; + val->val2 = (conv_val % 2) * 500000; } return 0; diff --git a/drivers/sensor/sht3xd/sht3xd.c b/drivers/sensor/sht3xd/sht3xd.c index 63b72f52807..4569c4add27 100644 --- a/drivers/sensor/sht3xd/sht3xd.c +++ b/drivers/sensor/sht3xd/sht3xd.c @@ -126,10 +126,11 @@ static int sht3xd_channel_get(struct device *dev, val->val1 = (s32_t)(tmp / 0xFFFF) - 45; val->val2 = (1000000 * (tmp % 0xFFFF)) / 0xFFFF; } else if (chan == SENSOR_CHAN_HUMIDITY) { - /* val = 100000 * sample / (2^16 -1) */ - tmp = 100000 * (u64_t)drv_data->rh_sample; - val->val1 = tmp / 0xFFFF; - val->val2 = (1000000 * (tmp % 0xFFFF)) / 0xFFFF; + /* val = 100 * sample / (2^16 -1) */ + u32_t tmp2 = 100 * (u32_t)drv_data->rh_sample; + val->val1 = tmp2 / 0xFFFF; + /* x * 100000 / 65536 == x * 15625 / 1024 */ + val->val2 = (tmp2 % 0xFFFF) * 15625 / 1024; } else { return -ENOTSUP; } diff --git a/include/sensor.h b/include/sensor.h index a7cc7ea60ee..2c2c858393e 100644 --- a/include/sensor.h +++ b/include/sensor.h @@ -98,7 +98,7 @@ enum sensor_channel { * object is close. */ SENSOR_CHAN_PROX, - /** Humidity, in milli percent. */ + /** Humidity, in percent. */ SENSOR_CHAN_HUMIDITY, /** Illuminance in visible spectrum, in lux. */ SENSOR_CHAN_LIGHT, diff --git a/samples/boards/arduino_101/environmental_sensing/ap/src/main.c b/samples/boards/arduino_101/environmental_sensing/ap/src/main.c index 0ab9365bc0e..5db7fc711b8 100644 --- a/samples/boards/arduino_101/environmental_sensing/ap/src/main.c +++ b/samples/boards/arduino_101/environmental_sensing/ap/src/main.c @@ -105,7 +105,7 @@ static void sensor_ipm_callback(void *context, u32_t id, volatile void *data) break; case SENSOR_CHAN_HUMIDITY: /* resolution of 0.01 percent */ - humidity_value = val->val1 / 10; + humidity_value = val->val1 * 100 + val->val2 / 10000; break; case SENSOR_CHAN_PRESS: /* resolution of 0.1 Pa */ diff --git a/samples/boards/arduino_101/environmental_sensing/sensor/src/main.c b/samples/boards/arduino_101/environmental_sensing/sensor/src/main.c index 7a38b41550c..f72736a31a1 100644 --- a/samples/boards/arduino_101/environmental_sensing/sensor/src/main.c +++ b/samples/boards/arduino_101/environmental_sensing/sensor/src/main.c @@ -113,8 +113,7 @@ void main(void) /* display himidity on LCD */ glcd_cursor_pos_set(glcd, 17 - strlen(row), 0); - sprintf(row, "RH:%d%c", val[1].val1/1000, - 37 /* percent symbol */); + sprintf(row, "RH:%d%%", val[1].val1); glcd_print(glcd, row, strlen(row)); /* display pressure on LCD */ diff --git a/samples/sensor/hts221/src/main.c b/samples/sensor/hts221/src/main.c index 2a5f856ad9d..0b7eaf04dc5 100644 --- a/samples/sensor/hts221/src/main.c +++ b/samples/sensor/hts221/src/main.c @@ -39,9 +39,9 @@ void main(void) /* display temperature */ printf("Temperature:%.1f C\n", sensor_value_to_double(&temp)); - /* display humidity (converted from millipercent) */ - printf("Relative Humidity:%.0f%%\n", - sensor_value_to_double(&hum) / 1000); + /* display humidity */ + printf("Relative Humidity:%.1f%%\n", + sensor_value_to_double(&hum)); k_sleep(2000); }