int main(void) { hdc1000_t dev; int16_t temp, hum; size_t len; char tstr[8]; char hstr[8]; puts("HDC1000 Temperature and Humidity Sensor driver test application\n"); printf("Initializing HDC1000 sensor at I2C_DEV(%i)... ", (int)hdc1000_params[0].i2c); if (hdc1000_init(&dev, &hdc1000_params[0]) == HDC1000_OK) { puts("[OK]\n"); } else { puts("[Failed]"); return 1; } while (1) { hdc1000_read(&dev, &temp, &hum); len = fmt_s16_dfp(tstr, temp, 2); tstr[len] = '\0'; len = fmt_s16_dfp(hstr, hum, 2); hstr[len] = '\0'; printf("Reading: T: %s °C RH: %s %%\n", tstr, hstr); xtimer_usleep(SLEEP); } return 0; }
void phydat_dump(phydat_t *data, uint8_t dim) { if (data == NULL || dim > PHYDAT_DIM) { puts("Unable to display data object"); return; } printf("Data:"); for (uint8_t i = 0; i < dim; i++) { char scale_str = phydat_scale_to_str(data->scale); printf("\t[%i] ", (int)i); if (scale_str) { printf("%i%c", (int)data->val[i], scale_str); } else if (data->scale == 0) { printf("%i", (int)data->val[i]); } else if ((data->scale > -5) && (data->scale < 0)) { char num[8]; size_t len = fmt_s16_dfp(num, data->val[i], data->scale * -1); num[len] = '\0'; printf("%s", num); } else { printf("%iE%i", (int)data->val[i], (int)data->scale); } printf("%s\n", phydat_unit_to_str(data->unit)); } }
void phydat_dump(phydat_t *data, uint8_t dim) { if (data == NULL || dim > PHYDAT_DIM) { puts("Unable to display data object"); return; } printf("Data:"); for (uint8_t i = 0; i < dim; i++) { char scale_prefix; switch (data->unit) { case UNIT_UNDEF: case UNIT_NONE: case UNIT_M2: case UNIT_M3: case UNIT_PERCENT: case UNIT_TEMP_C: case UNIT_TEMP_F: /* no string conversion */ scale_prefix = '\0'; break; default: scale_prefix = phydat_prefix_from_scale(data->scale); } printf("\t"); if (dim > 1) { printf("[%u] ", (unsigned int)i); } else { printf(" "); } if (scale_prefix) { printf("%6d %c", (int)data->val[i], scale_prefix); } else if (data->scale == 0) { printf("%6d", (int)data->val[i]); } else if ((data->scale > -5) && (data->scale < 0)) { char num[8]; size_t len = fmt_s16_dfp(num, data->val[i], data->scale); num[len] = '\0'; printf("%s", num); } else { printf("%iE%i", (int)data->val[i], (int)data->scale); } printf("%s\n", phydat_unit_to_str(data->unit)); } }
static void test_rmt_s16_dfp(void) { char out[8] = "--------"; int16_t val; unsigned fpp; size_t len; val = 0; fpp = 3; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(5, len); TEST_ASSERT_EQUAL_STRING("0.000", (char *)out); val = 12345; fpp = 4; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(6, len); TEST_ASSERT_EQUAL_STRING("1.2345", (char *)out); val = 12030; fpp = 3; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(6, len); TEST_ASSERT_EQUAL_STRING("12.030", (char *)out); val = -3548; fpp = 2; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(6, len); TEST_ASSERT_EQUAL_STRING("-35.48", (char *)out); val = -23; fpp = 4; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(7, len); TEST_ASSERT_EQUAL_STRING("-0.0023", (char *)out); val = 50; fpp = 3; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(5, len); TEST_ASSERT_EQUAL_STRING("0.050", (char *)out); val = -12345; fpp = 0; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(6, len); TEST_ASSERT_EQUAL_STRING("-12345", (char *)out); val = 31987; fpp = 5; len = fmt_s16_dfp(out, val, fpp); out[len] = '\0'; TEST_ASSERT_EQUAL_INT(0, len); TEST_ASSERT_EQUAL_STRING("", (char *)out); }