/* * Copyright (c) 2016 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include #include struct channel_info { int chan; }; static struct channel_info info[] = { { SENSOR_CHAN_AMBIENT_TEMP, }, { SENSOR_CHAN_HUMIDITY, }, }; int main(void) { const struct device *const glcd = DEVICE_DT_GET(DT_NODELABEL(glcd)); const struct device *const th02 = DEVICE_DT_GET_ONE(hoperf_th02); struct sensor_value val[ARRAY_SIZE(info)]; unsigned int i; int rc; if (!device_is_ready(th02)) { printk("TH02 is not ready\n"); return 0; } if (!device_is_ready(glcd)) { printk("Grove LCD not ready\n"); return 0; } /* configure LCD */ glcd_function_set(glcd, GLCD_FS_ROWS_2 | GLCD_FS_DOT_SIZE_LITTLE | GLCD_FS_8BIT_MODE); glcd_display_state_set(glcd, GLCD_DS_DISPLAY_ON); while (1) { /* fetch sensor samples */ rc = sensor_sample_fetch(th02); if (rc) { printk("Failed to fetch sample for device TH02 (%d)\n", rc); } for (i = 0U; i < ARRAY_SIZE(info); i++) { rc = sensor_channel_get(th02, info[i].chan, &val[i]); if (rc) { printk("Failed to get data for device TH02 (%d)\n", rc); continue; } } char row[16]; /* clear LCD */ (void)memset(row, ' ', sizeof(row)); glcd_cursor_pos_set(glcd, 0, 0); glcd_print(glcd, row, sizeof(row)); glcd_cursor_pos_set(glcd, 0, 1); glcd_print(glcd, row, sizeof(row)); /* display temperature on LCD */ glcd_cursor_pos_set(glcd, 0, 0); sprintf(row, "T:%.1f%cC", sensor_value_to_double(val), 223 /* degree symbol */); glcd_print(glcd, row, strlen(row)); /* display humidity on LCD */ glcd_cursor_pos_set(glcd, 17 - strlen(row), 0); sprintf(row, "RH:%.0f%c", sensor_value_to_double(val + 1), 37 /* percent symbol */); glcd_print(glcd, row, strlen(row)); k_sleep(K_MSEC(2000)); } return 0; }