101 lines
1.6 KiB
C
101 lines
1.6 KiB
C
/*
|
|
* rgbprog.c: making your eyes light up
|
|
*
|
|
* file creation: 20231015 0119
|
|
*/
|
|
|
|
|
|
#include "led.h"
|
|
#include "hsv2rgb.h"
|
|
#include "userio.h"
|
|
|
|
|
|
|
|
void rgbprog_rainbow();
|
|
void rgbprog_rainbow_offset();
|
|
|
|
static void (*proglist[8])(void) = {
|
|
rgbprog_rainbow,
|
|
rgbprog_rainbow_offset,
|
|
};
|
|
|
|
|
|
|
|
static uint8_t prog_active;
|
|
static uint8_t prog_next;
|
|
static uint8_t prog_cntr;
|
|
|
|
static uint16_t brightness = 0;
|
|
|
|
static color_hsv hsv[2];
|
|
static color_rgb rgb[2];
|
|
|
|
|
|
|
|
void rgbprog_run()
|
|
{
|
|
uint32_t i;
|
|
uint8_t j;
|
|
|
|
// if the button has been pushed, change the brightness
|
|
if (userio_get_btn() > 0) {
|
|
brightness++;
|
|
if (brightness > 2) brightness = 0;
|
|
}
|
|
|
|
// which program to run?
|
|
j = 0;
|
|
for (i = 32; i <= 256; i += 32) {
|
|
if (knob[0] < i) {
|
|
if (proglist[j]) {
|
|
proglist[j]();
|
|
}
|
|
break;
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
|
|
void rgbprog_rainbow()
|
|
{
|
|
int16_t w;
|
|
|
|
w = knob[1];
|
|
w *= 2;
|
|
w = 256 - w;
|
|
|
|
hsv[0].h += w;
|
|
if (hsv[0].h < 0) hsv[0].h += 0x3000;
|
|
hsv[0].h %= 0x3000;
|
|
|
|
hsv2rgb_8b(hsv[0].h >> 3, 255, 255, &rgb[0].r, &rgb[0].g, &rgb[0].b);
|
|
led_setrgb(0, rgb[0].r << brightness, rgb[0].g << brightness, rgb[0].b << brightness);
|
|
led_setrgb(1, rgb[0].r << brightness, rgb[0].g << brightness, rgb[0].b << brightness);
|
|
}
|
|
|
|
void rgbprog_rainbow_offset()
|
|
{
|
|
rgbprog_rainbow();
|
|
|
|
hsv[1].h = hsv[0].h;
|
|
hsv[1].h += (knob[0] - 32) << 6;
|
|
hsv[1].h %= 0x3000;
|
|
|
|
hsv2rgb_8b(hsv[1].h >> 3, 255, 255, &rgb[0].r, &rgb[0].g, &rgb[0].b);
|
|
led_setrgb(1, rgb[0].r << brightness, rgb[0].g << brightness, rgb[0].b << brightness);
|
|
}
|
|
|
|
void rgbprog_randcolorfade()
|
|
{
|
|
|
|
}
|
|
|
|
void rgbprog_randcolorfade_single()
|
|
{
|
|
|
|
}
|
|
|
|
void rgbprog_randcolorfade_dual()
|
|
{
|
|
|
|
} |