/* * Copyright (c) 2020 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #define NUMBER_OF_LEDS 3 #define GREEN_LED DT_GPIO_PIN(DT_NODELABEL(led0), gpios) #define BLUE_LED DT_GPIO_PIN(DT_NODELABEL(led1), gpios) #define RED_LED DT_GPIO_PIN(DT_NODELABEL(led2), gpios) enum sx1509b_color { sx1509b_red = 0, sx1509b_green, sx1509b_blue }; const struct device *sx1509b_dev; static struct k_work_delayable rgb_work; static uint8_t which_color = sx1509b_red; static uint8_t iterator; static const gpio_pin_t rgb_pins[] = { RED_LED, GREEN_LED, BLUE_LED, }; static void rgb_work_handler(struct k_work *work) { if (which_color == sx1509b_red) { sx1509b_led_intensity_pin_set(sx1509b_dev, RED_LED, iterator); iterator++; if (iterator >= 255) { sx1509b_led_intensity_pin_set(sx1509b_dev, RED_LED, 0); which_color = sx1509b_green; iterator = 0; } } else if (which_color == sx1509b_green) { sx1509b_led_intensity_pin_set(sx1509b_dev, GREEN_LED, iterator); iterator++; if (iterator >= 255) { sx1509b_led_intensity_pin_set(sx1509b_dev, GREEN_LED, 0); which_color = sx1509b_blue; iterator = 0; } } else if (which_color == sx1509b_blue) { sx1509b_led_intensity_pin_set(sx1509b_dev, BLUE_LED, iterator); iterator++; if (iterator >= 255) { sx1509b_led_intensity_pin_set(sx1509b_dev, BLUE_LED, 0); which_color = sx1509b_red; iterator = 0; } } k_work_schedule(k_work_delayable_from_work(work), K_MSEC(10)); } int main(void) { int err; printk("SX1509B intensity sample\n"); sx1509b_dev = DEVICE_DT_GET(DT_NODELABEL(sx1509b)); if (!device_is_ready(sx1509b_dev)) { printk("sx1509b: device not ready.\n"); return 0; } for (int i = 0; i < NUMBER_OF_LEDS; i++) { err = sx1509b_led_intensity_pin_configure(sx1509b_dev, rgb_pins[i]); if (err) { printk("Error configuring pin for LED intensity\n"); } } k_work_init_delayable(&rgb_work, rgb_work_handler); k_work_schedule(&rgb_work, K_NO_WAIT); return 0; }