Skip to content

Commit

Permalink
LEDs: add Rainbow Fade and Rainbow Cycle effects
Browse files Browse the repository at this point in the history
Using "Solid" on the headlights and "Rainbow Cycle" on the taillights
can replicate the "Mullet" setting on the Float package.

Using "Rainbow Cycle" on both replicates the "Rave" effect from the
Float package.

Feature: add Rainbow Fade and Rainbow Cycle effects
  • Loading branch information
acheronfail committed Aug 16, 2024
1 parent fae127c commit fae191d
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_RAINBOW_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>Rainbow 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>Rainbow 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>Rainbow 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>Rainbow 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>Rainbow 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 @@ -312,6 +312,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 @@ -334,6 +360,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_RAINBOW_FADE:
anim_rgb_fade(leds, strip, time);
break;
}
}

Expand Down

0 comments on commit fae191d

Please sign in to comment.