![](images/storminaboxtoo.gif)
![](images/storminaboxtoo_1.jpg)
- // storm in a box too
- // pkvi
- #include <FastLED.h>
- #define NUM_LEDS 30
- #define DATA_PIN 0
- enum Mode {CLOUD, OFF, ON, RED, GREEN, BLUE, FADE};
- Mode mode = CLOUD;
- Mode lastMode = CLOUD;
- int fade_h;
- int fade_direction = 1;
- CRGB leds[NUM_LEDS];
- void setup() {
- FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
- for (int w = 0; w < 255; w++) {
- glow(0, 0, w);
- w = w + 5;
- delay(1);
- }
- for (int w = 255; w > 0; w--) {
- glow(0, 0, w);
- w = w - 5;
- delay(1);
- }
- }
- void loop() {
- int pot = analogRead(1);
- if (pot > 500) {
- constant_lightning();
- } else if (pot < 500 && pot > 100) {
- for (int w = 0; w < 255; w++) {
- glow(0, 0, w);
- w = w + 5;
- delay(1);
- }
- for (int w = 255; w > 0; w--) {
- glow(0, 0, w);
- w = w - 5;
- delay(1);
- }
- } else {
- glow(0, 0, 0);
- // off
- }
- }
- void constant_lightning() {
- switch (random(1, 3)) {
- case 1:
- thunderburst();
- delay(random(10, 500));
- break;
- case 2:
- rolling();
- break;
- case 3:
- crack();
- delay(random(50, 250));
- break;
- }
- }
- void reset() {
- for (int i = 0; i < NUM_LEDS; i++) {
- leds[i] = CHSV( 0, 0, 0);
- }
- FastLED.show();
- }
- void rolling() {
- for (int r = 0; r < random(2, 10); r++) {
- for (int i = 0; i < NUM_LEDS; i++) {
- if (random(0, 100) > 90) {
- leds[i] = CHSV( 0, 0, 255);
- }
- else {
- leds[i] = CHSV(0, 0, 0);
- }
- }
- FastLED.show();
- delay(random(5, 100));
- reset();
- }
- }
- void crack() {
- for (int i = 0; i < NUM_LEDS; i++) {
- leds[i] = CHSV( 0, 0, 255);
- }
- FastLED.show();
- delay(random(10, 100));
- reset();
- }
- void thunderburst() {
- int rs1 = random(0, NUM_LEDS / 2);
- int rl1 = random(10, 20);
- int rs2 = random(rs1 + rl1, NUM_LEDS);
- int rl2 = random(10, 20);
- for (int r = 0; r < random(3, 6); r++) {
- for (int i = 0; i < rl1; i++) {
- leds[i + rs1] = CHSV( 0, 0, 255);
- }
- if (rs2 + rl2 < NUM_LEDS) {
- for (int i = 0; i < rl2; i++) {
- leds[i + rs2] = CHSV( 0, 0, 255);
- }
- }
- FastLED.show();
- delay(random(10, 50));
- reset();
- delay(random(10, 50));
- }
- }