sc7-testo-firmware/src/rgbprog.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()
{
}