Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- substitutions:
- num_leds: "300"
- light:
- - platform: neopixelbus
- variant: WS2812X
- pin: GPIO23
- num_leds: ${num_leds}
- type: GRB
- color_correct: [50%, 50%, 50%]
- default_transition_length: 1s
- restore_mode: always_off
- name: "Striplight"
- id: "Striplight"
- effects:
- - addressable_lambda:
- name: "Exit"
- update_interval: 10ms
- lambda: |-
- static Color led[${num_leds}];
- static uint16_t progress = 0;
- const uint8_t speed = 15;
- const uint8_t steps = 290;
- const bool revers = false;
- const bool twoside = false;
- if (initial_run)
- {
- ESP_LOGD("effect", "Rise light x%i / %i", speed, steps);
- for (int i = 0; i < it.size(); i++)
- {
- led[i] = Color::BLACK;
- }
- progress = 0;
- }
- uint8_t r = max(1, current_color.r / steps);
- uint8_t g = max(1, current_color.g / steps);
- uint8_t b = max(1, current_color.b / steps);
- bool complete = true;
- // Increase the brightness of those already burning.
- for (int i = 0; i < it.size(); i++)
- {
- if (led[i].r != 0 && led[i].r != current_color.r && led[i].g != 0 && led[i].g != current_color.g && led[i].b != 0 && led[i].b != current_color.b)
- {
- led[i].r = min(led[i].r + r, (int) current_color.r);
- led[i].g = min(led[i].g + g, (int) current_color.g);
- led[i].b = min(led[i].b + b, (int) current_color.b);
- complete = false;
- }
- }
- // Let's light up the ones who got their turn.
- for (int i = 0; i < speed; i++)
- {
- if (twoside)
- {
- int middle = it.size() / 2;
- if (progress < middle)
- {
- if ((revers && progress == middle - 1) || (progress == 0 && !revers))
- {
- led[middle] = Color(r,g,b);
- }
- led[revers ? max(0, (int) progress) : min((int) (middle + progress + 1), (int) it.size())] = Color(r,g,b);
- led[revers ? max(0, (int) (it.size() - progress - 1)) : max(0, (int) (middle - progress - 1))] = Color(r,g,b);
- complete = false;
- }
- }
- else
- {
- if (progress < it.size())
- {
- led[revers ? max(0, (int) (it.size() - progress - 1)) : min((int) progress, (int) it.size())] = Color(r,g,b);
- complete = false;
- }
- }
- progress++;
- }
- // Everyone's already on burn, mission over
- if (complete)
- {
- it.all() = current_color;
- auto call = id(Striplight).turn_on();
- call.set_effect("None");
- call.perform();
- ESP_LOGD("effect", "Rise light x%i / %i - Complete", speed, steps);
- }
- else // Transfer the current state to the led strip
- {
- for (int i = 0; i < it.size(); i++)
- {
- it[i] = led[i];
- }
- }
- - addressable_lambda:
- name: "Enter"
- update_interval: 10ms
- lambda: |-
- static Color led[${num_leds}];
- static uint16_t progress = 0;
- const uint8_t speed = 2;
- const uint8_t steps = 50;
- const bool revers = true;
- const bool twoside = false;
- if (initial_run)
- {
- ESP_LOGD("effect", "Rise light x%i / %i", speed, steps);
- for (int i = 0; i < it.size(); i++)
- {
- led[i] = Color::BLACK;
- }
- progress = 0;
- }
- uint8_t r = max(1, current_color.r / steps);
- uint8_t g = max(1, current_color.g / steps);
- uint8_t b = max(1, current_color.b / steps);
- bool complete = true;
- // Increase the brightness of those already burning.
- for (int i = 0; i < it.size(); i++)
- {
- if (led[i].r != 0 && led[i].r != current_color.r && led[i].g != 0 && led[i].g != current_color.g && led[i].b != 0 && led[i].b != current_color.b)
- {
- led[i].r = min(led[i].r + r, (int) current_color.r);
- led[i].g = min(led[i].g + g, (int) current_color.g);
- led[i].b = min(led[i].b + b, (int) current_color.b);
- complete = false;
- }
- }
- // Let's light up the ones who got their turn.
- for (int i = 0; i < speed; i++)
- {
- if (twoside)
- {
- int middle = it.size() / 2;
- if (progress < middle)
- {
- if ((revers && progress == middle - 1) || (progress == 0 && !revers))
- {
- led[middle] = Color(r,g,b);
- }
- led[revers ? max(0, (int) progress) : min((int) (middle + progress + 1), (int) it.size())] = Color(r,g,b);
- led[revers ? max(0, (int) (it.size() - progress - 1)) : max(0, (int) (middle - progress - 1))] = Color(r,g,b);
- complete = false;
- }
- }
- else
- {
- if (progress < it.size())
- {
- led[revers ? max(0, (int) (it.size() - progress - 1)) : min((int) progress, (int) it.size())] = Color(r,g,b);
- complete = false;
- }
- }
- progress++;
- }
- // Everyone's already on burn, mission over
- if (complete)
- {
- it.all() = current_color;
- auto call = id(Striplight).turn_on();
- call.set_effect("None");
- call.perform();
- ESP_LOGD("effect", "Rise light x%i / %i - Complete", speed, steps);
- }
- else // Transfer the current state to the led strip
- {
- for (int i = 0; i < it.size(); i++)
- {
- it[i] = led[i];
- }
- }
- - addressable_lambda:
- name: "Side"
- update_interval: 10ms
- lambda: |-
- static Color led[${num_leds}];
- static uint16_t progress = 0;
- const uint8_t speed = 20;
- const uint8_t steps = 140;
- const bool revers = false;
- const bool twoside = true;
- if (initial_run)
- {
- ESP_LOGD("effect", "Rise light x%i / %i", speed, steps);
- for (int i = 0; i < it.size(); i++)
- {
- led[i] = Color::BLACK;
- }
- progress = 0;
- }
- uint8_t r = max(1, current_color.r / steps);
- uint8_t g = max(1, current_color.g / steps);
- uint8_t b = max(1, current_color.b / steps);
- bool complete = true;
- // Increase the brightness of those already burning.
- for (int i = 0; i < it.size(); i++)
- {
- if (led[i].r != 0 && led[i].r != current_color.r && led[i].g != 0 && led[i].g != current_color.g && led[i].b != 0 && led[i].b != current_color.b)
- {
- led[i].r = min(led[i].r + r, (int) current_color.r);
- led[i].g = min(led[i].g + g, (int) current_color.g);
- led[i].b = min(led[i].b + b, (int) current_color.b);
- complete = false;
- }
- }
- // Let's light up the ones who got their turn.
- for (int i = 0; i < speed; i++)
- {
- if (twoside)
- {
- int middle = it.size() / 2;
- if (progress < middle)
- {
- if ((revers && progress == middle - 1) || (progress == 0 && !revers))
- {
- led[middle] = Color(r,g,b);
- }
- led[revers ? max(0, (int) progress) : min((int) (middle + progress + 1), (int) it.size())] = Color(r,g,b);
- led[revers ? max(0, (int) (it.size() - progress - 1)) : max(0, (int) (middle - progress - 1))] = Color(r,g,b);
- complete = false;
- }
- }
- else
- {
- if (progress < it.size())
- {
- led[revers ? max(0, (int) (it.size() - progress - 1)) : min((int) progress, (int) it.size())] = Color(r,g,b);
- complete = false;
- }
- }
- progress++;
- }
- // Everyone's already on burn, mission over
- if (complete)
- {
- it.all() = current_color;
- auto call = id(Striplight).turn_on();
- call.set_effect("None");
- call.perform();
- ESP_LOGD("effect", "Rise light x%i / %i - Complete", speed, steps);
- }
- else // Transfer the current state to the led strip
- {
- for (int i = 0; i < it.size(); i++)
- {
- it[i] = led[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement