/* * 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() { }