Skip to content

Commit

Permalink
LEDs: add rainbow effects
Browse files Browse the repository at this point in the history
Setting the headlights to Solid with white, and then setting the
taillights to Rainbow Cycle allows users to replicate the "Mullet"
effect from the Float package.

Using Rainbow Cycle on the front and the back replicates the "Rave"
effect from the Float package.

Also added an RGB Fade effect which smoothly transitions between colors.

Feature: Add the Rainbow Cycle and RGB Fade LED effects.
  • Loading branch information
acheronfail committed Aug 15, 2024
1 parent 5e73abf commit fae1b87
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/conf/datatypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ typedef enum {
LED_MODE_STROBE,
LED_MODE_KNIGHT_RIDER,
LED_MODE_FELONY,
LED_MODE_RAINBOW_CYCLE,
LED_MODE_RGB_FADE,
} LedMode;

typedef enum {
Expand Down
10 changes: 10 additions & 0 deletions src/conf/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2255,6 +2255,8 @@ p, li { white-space: pre-wrap; }
<enumNames>Strobe</enumNames>
<enumNames>Knight Rider</enumNames>
<enumNames>Felony</enumNames>
<enumNames>Rainbow Cycle</enumNames>
<enumNames>RGB Fade</enumNames>
</leds.front.mode>
<leds.front.brightness>
<longName>Front Brightness</longName>
Expand Down Expand Up @@ -2417,6 +2419,8 @@ p, li { white-space: pre-wrap; }
<enumNames>Strobe</enumNames>
<enumNames>Knight Rider</enumNames>
<enumNames>Felony</enumNames>
<enumNames>Rainbow Cycle</enumNames>
<enumNames>RGB Fade</enumNames>
</leds.rear.mode>
<leds.rear.brightness>
<longName>Rear Brightness</longName>
Expand Down Expand Up @@ -2579,6 +2583,8 @@ p, li { white-space: pre-wrap; }
<enumNames>Strobe</enumNames>
<enumNames>Knight Rider</enumNames>
<enumNames>Felony</enumNames>
<enumNames>Rainbow Cycle</enumNames>
<enumNames>RGB Fade</enumNames>
</leds.headlights.mode>
<leds.headlights.brightness>
<longName>Headlights Brightness</longName>
Expand Down Expand Up @@ -2743,6 +2749,8 @@ p, li { white-space: pre-wrap; }
<enumNames>Strobe</enumNames>
<enumNames>Knight Rider</enumNames>
<enumNames>Felony</enumNames>
<enumNames>Rainbow Cycle</enumNames>
<enumNames>RGB Fade</enumNames>
</leds.taillights.mode>
<leds.taillights.brightness>
<longName>Taillights Brightness</longName>
Expand Down Expand Up @@ -3035,6 +3043,8 @@ p, li { white-space: pre-wrap; }
<enumNames>Strobe</enumNames>
<enumNames>Knight Rider</enumNames>
<enumNames>Felony</enumNames>
<enumNames>Rainbow Cycle</enumNames>
<enumNames>RGB Fade</enumNames>
</leds.status_idle.mode>
<leds.status_idle.brightness>
<longName>Status Idle Brightness</longName>
Expand Down
32 changes: 32 additions & 0 deletions src/leds.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,32 @@ static void anim_felony(Leds *leds, const LedStrip *strip, const LedBar *bar, fl
}
}

static const uint32_t rainbow_cycle_colors[] = {
0x00FFFF00,
0x0000FF00,
0x0000FFFF,
0x000000FF,
0x00FF00FF,
0x00FF0000,
};
static const uint8_t rainbow_cycle_colors_len =
sizeof(rainbow_cycle_colors) / sizeof(rainbow_cycle_colors[0]);

static void anim_rainbow_cycle(Leds *leds, const LedStrip *strip, float time) {
uint8_t color_idx = (uint8_t) (time / 0.1f) % rainbow_cycle_colors_len;
strip_set_color(leds, strip, rainbow_cycle_colors[color_idx], strip->brightness, 1.0f);
}

static void anim_rgb_fade(Leds *leds, const LedStrip *strip, float time) {
strip_set_color(
leds,
strip,
color_wheel((uint8_t) floorf(fmodf(time, 4.0f) * 255.0f)),
strip->brightness,
1.0f
);
}

static void led_strip_animate(Leds *leds, const LedStrip *strip, const LedBar *bar, float time) {
time *= bar->speed;

Expand All @@ -330,6 +356,12 @@ static void led_strip_animate(Leds *leds, const LedStrip *strip, const LedBar *b
case LED_MODE_FELONY:
anim_felony(leds, strip, bar, time);
break;
case LED_MODE_RAINBOW_CYCLE:
anim_rainbow_cycle(leds, strip, time);
break;
case LED_MODE_RGB_FADE:
anim_rgb_fade(leds, strip, time);
break;
}
}

Expand Down

0 comments on commit fae1b87

Please sign in to comment.