/* * Copyright (c) 2023 Jamie McCrae * Copyright (c) 2024-2025 Chen Xingyu * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include LOG_MODULE_REGISTER(auxdisplay_sample, LOG_LEVEL_DBG); #define AUXDISPLAY_NODE DT_NODELABEL(auxdisplay_0) #define AUXDISPLAY_DIGIT_COUNT DT_PROP_LEN(AUXDISPLAY_NODE, digit_gpios) static const struct device *const dev = DEVICE_DT_GET(AUXDISPLAY_NODE); static uint8_t data[AUXDISPLAY_DIGIT_COUNT * 2]; int main(void) { int rc; int i, len; if (!device_is_ready(dev)) { LOG_ERR("Auxdisplay device is not ready."); return -ENODEV; } /* Light up all segments */ for (i = 0; i < AUXDISPLAY_DIGIT_COUNT; i++) { data[i * 2] = '8'; data[i * 2 + 1] = '.'; } rc = auxdisplay_write(dev, data, strlen(data)); if (rc != 0) { LOG_ERR("Failed to write data: %d", rc); return rc; } k_msleep(500); /* Blinks it once */ rc = auxdisplay_display_off(dev); if (rc != 0) { LOG_ERR("Failed to turn display off: %d", rc); return rc; } k_msleep(500); rc = auxdisplay_display_on(dev); if (rc != 0) { LOG_ERR("Failed to turn display on: %d", rc); return rc; } k_msleep(500); /* Clear the display */ rc = auxdisplay_clear(dev); if (rc != 0) { LOG_ERR("Failed to clear display: %d", rc); return rc; } k_msleep(500); /* Test cursor movement by filling each digit with a number */ for (i = 0; i < AUXDISPLAY_DIGIT_COUNT; i++) { snprintf(data, sizeof(data), "%d", i); rc = auxdisplay_write(dev, data, strlen(data)); if (rc != 0) { LOG_ERR("Failed to write data: %d", rc); return rc; } k_msleep(500); } k_msleep(500); /* Count from 0 up to fill all digits */ for (i = 0;; i = (i + 1) % (int)pow(10, AUXDISPLAY_DIGIT_COUNT)) { snprintk(data, sizeof(data), "%d", i); len = strlen(data); rc = auxdisplay_clear(dev); if (rc != 0) { LOG_ERR("Failed to clear display: %d", rc); return rc; } /* Right-align the number */ rc = auxdisplay_cursor_position_set(dev, AUXDISPLAY_POSITION_ABSOLUTE, AUXDISPLAY_DIGIT_COUNT - len, 0); if (rc != 0) { LOG_ERR("Failed to set cursor position: %d", rc); return rc; } rc = auxdisplay_write(dev, data, len); if (rc != 0) { LOG_ERR("Failed to write data: %d", rc); return rc; } k_msleep(100); } return 0; }