void main(void) { struct nano_timer timer; uint32_t timer_data[2] = {0, 0}; struct device *glcd; char str[20]; int rgb[] = { 0x0, 0x0, 0x0 }; uint8_t rgb_chg[3]; const uint8_t rgb_step = 16; uint8_t set_config; int i, j, m; int cnt; nano_timer_init(&timer, timer_data); glcd = device_get_binding(GROVE_LCD_NAME); if (!glcd) { printk("Grove LCD: Device not found.\n"); } /* Now configure the LCD the way we want it */ set_config = GLCD_FS_ROWS_2 | GLCD_FS_DOT_SIZE_LITTLE | GLCD_FS_8BIT_MODE; glcd_function_set(glcd, set_config); set_config = GLCD_DS_DISPLAY_ON | GLCD_DS_CURSOR_ON | GLCD_DS_BLINK_ON; glcd_display_state_set(glcd, set_config); /* Setup variables /*/ for (i = 0; i < sizeof(str); i++) { str[i] = '\0'; } /* Starting counting */ cnt = 0; while (1) { glcd_cursor_pos_set(glcd, 0, 0); /* RGB values are from 0 - 511. * First half means incrementally brighter. * Second half is opposite (i.e. goes darker). */ /* Update the RGB values for backlight */ m = (rgb[2] > 255) ? (512 - rgb[2]) : (rgb[2]); rgb_chg[2] = clamp_rgb(m); m = (rgb[1] > 255) ? (512 - rgb[1]) : (rgb[1]); rgb_chg[1] = clamp_rgb(m); m = (rgb[0] > 255) ? (512 - rgb[0]) : (rgb[0]); rgb_chg[0] = clamp_rgb(m); glcd_color_set(glcd, rgb_chg[0], rgb_chg[1], rgb_chg[2]); /* Display the counter * * well... sprintf() might be easier, * but this is more fun. */ m = cnt; i = 1000000000; j = 0; while (i > 0) { str[j] = '0' + (m / i); m = m % i; i = i / 10; j++; } cnt++; glcd_print(glcd, str, j); /* Rotate RGB values */ rgb[2] += rgb_step; if (rgb[2] > 511) { rgb[2] = 0; rgb[1] += rgb_step; } if (rgb[1] > 511) { rgb[1] = 0; rgb[0] += rgb_step; } if (rgb[0] > 511) { rgb[0] = 0; } /* wait a while */ nano_task_timer_start(&timer, SLEEPTICKS); nano_task_timer_test(&timer, TICKS_UNLIMITED); } }
void main(void) { struct device *dev[ARRAY_SIZE(info)]; struct sensor_value val[ARRAY_SIZE(info)]; unsigned int i; int rc; for (i = 0; i < ARRAY_SIZE(info); i++) { dev[i] = device_get_binding(info[i].dev_name); if (dev[i] == NULL) { printk("Failed to get \"%s\" device\n", info[i].dev_name); return; } } #ifdef CONFIG_GROVE_LCD_RGB struct device *glcd; glcd = device_get_binding(GROVE_LCD_NAME); if (glcd == NULL) { printk("Failed to get Grove LCD\n"); return; } /* 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); #endif while (1) { /* fetch sensor samples */ for (i = 0; i < ARRAY_SIZE(info); i++) { rc = sensor_sample_fetch(dev[i]); if (rc) { printk("Failed to fetch sample for device %s (%d)\n", info[i].dev_name, rc); } } for (i = 0; i < ARRAY_SIZE(info); i++) { rc = sensor_channel_get(dev[i], info[i].chan, &val[i]); if (rc) { printk("Failed to get data for device %s (%d)\n", info[i].dev_name, rc); continue; } } #ifdef CONFIG_GROVE_LCD_RGB char row[16]; /* clear LCD */ 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 himidity 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)); #endif k_sleep(2000); } }