blob: 5bb94f9631ea53f17286767d87261e96fd78930b [file] [log] [blame]
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <device.h>
#include <drivers/gpio.h>
#include <drivers/gpio/gpio_sx1509b.h>
#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_delayed_work 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_delayed_work_submit(&rgb_work, K_MSEC(10));
}
void main(void)
{
int err;
printk("SX1509B intensity sample\n");
sx1509b_dev = device_get_binding(DT_PROP(DT_NODELABEL(sx1509b), label));
if (sx1509b_dev == NULL) {
printk("Error binding SX1509B device\n");
return;
}
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_delayed_work_init(&rgb_work, rgb_work_handler);
k_delayed_work_submit(&rgb_work, K_NO_WAIT);
}