added fade animations
This commit is contained in:
parent
85eeb2b835
commit
98f7689d8f
|
@ -7,7 +7,8 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <FastLED.h>
|
#include <FastLED.h>
|
||||||
|
|
||||||
void set_all_leds(CRGB leds[], int size, CRGB color);
|
void set_all_leds(CRGB color, int brightness, int fade);
|
||||||
|
void set_strip(CRGB leds[], int size, CRGB color);
|
||||||
|
|
||||||
// Color when interior lights are on (e.g. door is open)
|
// Color when interior lights are on (e.g. door is open)
|
||||||
// Color Temperature RGB values from: https://andi-siess.de/rgb-to-color-temperature/
|
// Color Temperature RGB values from: https://andi-siess.de/rgb-to-color-temperature/
|
||||||
|
@ -22,8 +23,8 @@ CRGB driving_rgb = CRGB(240, 17, 17);
|
||||||
#define RELAY_1 3
|
#define RELAY_1 3
|
||||||
|
|
||||||
// Input config
|
// Input config
|
||||||
#define IGNITION_POWER 7
|
#define IGNITION_POWER A0
|
||||||
#define LIGHTING_POWER 8
|
#define LIGHTING_POWER A1
|
||||||
bool ignition_on = false;
|
bool ignition_on = false;
|
||||||
bool lighting_on = false;
|
bool lighting_on = false;
|
||||||
|
|
||||||
|
@ -41,6 +42,13 @@ CRGB fl_leds[LED_FL_NUM];
|
||||||
#define LED_FR_NUM 20
|
#define LED_FR_NUM 20
|
||||||
CRGB fr_leds[LED_FR_NUM];
|
CRGB fr_leds[LED_FR_NUM];
|
||||||
|
|
||||||
|
// Animation settings
|
||||||
|
#define FADE_ITERATIONS 50
|
||||||
|
#define INTERIOR_FADE 1
|
||||||
|
#define DRIVING_FADE 2
|
||||||
|
|
||||||
|
int current_brightness = 0;
|
||||||
|
CRGB current_color = CRGB(0,0,0);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
// Add front-left LEDs
|
// Add front-left LEDs
|
||||||
|
@ -52,14 +60,16 @@ void setup() {
|
||||||
pinMode(RELAY_1, OUTPUT);
|
pinMode(RELAY_1, OUTPUT);
|
||||||
pinMode(IGNITION_POWER, INPUT_PULLUP);
|
pinMode(IGNITION_POWER, INPUT_PULLUP);
|
||||||
pinMode(LIGHTING_POWER, INPUT_PULLUP);
|
pinMode(LIGHTING_POWER, INPUT_PULLUP);
|
||||||
|
digitalWrite(RELAY_1, LOW);
|
||||||
|
Serial.begin(9600);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
ignition_on = digitalRead(IGNITION_POWER);
|
ignition_on = analogRead(IGNITION_POWER) > 1000;
|
||||||
lighting_on = digitalRead(LIGHTING_POWER);
|
lighting_on = analogRead(LIGHTING_POWER) > 1000;
|
||||||
if (!ignition_on && !lighting_on) {
|
if (!ignition_on && !lighting_on) {
|
||||||
// Turn off LED Strip power
|
// Turn off LED Strip power
|
||||||
|
set_all_leds(CRGB(0,0,0), 0, 0);
|
||||||
digitalWrite(RELAY_1, LOW);
|
digitalWrite(RELAY_1, LOW);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -68,18 +78,54 @@ void loop() {
|
||||||
|
|
||||||
// Interior light has priority
|
// Interior light has priority
|
||||||
if (lighting_on) {
|
if (lighting_on) {
|
||||||
FastLED.setBrightness(INTERIOR_BRIGHTNESS);
|
|
||||||
set_all_leds(fl_leds, LED_FL_NUM, interior_rgb);
|
set_all_leds(interior_rgb, INTERIOR_BRIGHTNESS, INTERIOR_FADE);
|
||||||
set_all_leds(fr_leds, LED_FR_NUM, interior_rgb);
|
|
||||||
}
|
}
|
||||||
else if (ignition_on) {
|
else if (ignition_on) {
|
||||||
FastLED.setBrightness(DRIVING_BRIGHTNESS);
|
set_all_leds(driving_rgb, DRIVING_BRIGHTNESS, DRIVING_FADE);
|
||||||
set_all_leds(fl_leds, LED_FL_NUM, driving_rgb);
|
|
||||||
set_all_leds(fr_leds, LED_FR_NUM, driving_rgb);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_all_leds(CRGB leds[], int size, CRGB color) {
|
void set_all_leds(CRGB color, int brightness, int fade) {
|
||||||
|
// Calculate the difference between the new value and the current value.
|
||||||
|
// The order is important to have the right prefix.
|
||||||
|
// e.g. 200 -> 50 => 50-200 => -150
|
||||||
|
// 50 -> 200 => 200-50 = 150
|
||||||
|
int delta_brightness = brightness - current_brightness;
|
||||||
|
int delta_r = color.red - current_color.red;
|
||||||
|
int delta_g = color.green - current_color.green;
|
||||||
|
int delta_b = color.blue - current_color.blue;
|
||||||
|
|
||||||
|
for(int i = 1; i<=FADE_ITERATIONS;i++) {
|
||||||
|
// Calculate the new rgb and brightness value for each iteration.
|
||||||
|
// The delta is divided by the amount of fade iterations to get the required delta for each iteration
|
||||||
|
// Then we multiply this by the current iteration count, so it goes towards the total delta value from above
|
||||||
|
int brightness_step_value = current_brightness + ((delta_brightness / FADE_ITERATIONS)*i);
|
||||||
|
int red_step_value = current_color.red + ((delta_r / FADE_ITERATIONS)*i);
|
||||||
|
int green_step_value = current_color.green + ((delta_g / FADE_ITERATIONS)*i);
|
||||||
|
int blue_step_value = current_color.blue + ((delta_b / FADE_ITERATIONS)*i);
|
||||||
|
|
||||||
|
// to account for any rounding issues in the step value calculations, the right brightness and color is manually set on the last iteration
|
||||||
|
if (i == FADE_ITERATIONS) {
|
||||||
|
brightness_step_value = brightness;
|
||||||
|
red_step_value = color.red;
|
||||||
|
green_step_value = color.green;
|
||||||
|
blue_step_value = color.blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRGB step_color = CRGB(red_step_value, green_step_value, blue_step_value);
|
||||||
|
FastLED.setBrightness(brightness_step_value);
|
||||||
|
|
||||||
|
set_strip(fl_leds, LED_FL_NUM, step_color);
|
||||||
|
set_strip(fr_leds, LED_FR_NUM, step_color);
|
||||||
|
|
||||||
|
delay(fade/FADE_ITERATIONS);
|
||||||
|
}
|
||||||
|
current_brightness = brightness;
|
||||||
|
current_color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_strip(CRGB leds[], int size, CRGB color) {
|
||||||
for(int i = 0;i<size;i++) {
|
for(int i = 0;i<size;i++) {
|
||||||
leds[i] = color;
|
leds[i] = color;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user