Make it less visually busy, for living on our wall

This commit is contained in:
Neale Pickett 2022-01-01 09:35:06 -07:00
parent 3288c10867
commit 0f65cd1f92
3 changed files with 77 additions and 12 deletions

16
picker.cpp Normal file
View File

@ -0,0 +1,16 @@
#include <Arduino.h>
#include <stdint.h>
#include "picker.h"
Picker::Picker() {
val = random(1, 256);
}
bool Picker::Pick(uint8_t likelihood) {
if ((val > 0) && (val <= likelihood)) {
val = 0;
return true;
}
val -= likelihood;
return false;
}

11
picker.h Normal file
View File

@ -0,0 +1,11 @@
#pragma once
#include <stdint.h>
class Picker {
public:
Picker();
bool Pick(uint8_t);
private:
uint8_t val;
};

View File

@ -1,4 +1,5 @@
#include <FastLED.h> #include <FastLED.h>
#include "picker.h"
#define NEOPIXEL_PIN 2 #define NEOPIXEL_PIN 2
#define GRIDLEN 50 #define GRIDLEN 50
@ -8,8 +9,8 @@
CRGB grid[GRIDLEN]; CRGB grid[GRIDLEN];
void fade() { void fade(int cycles = 2) {
int reps = 300 + random(GRIDLEN); int reps = (cycles*GRIDLEN) + random(GRIDLEN);
int hue = random(256); int hue = random(256);
for (int i = 0; i < reps; i++) { for (int i = 0; i < reps; i++) {
for (int pos = 0; pos < 8; pos++) { for (int pos = 0; pos < 8; pos++) {
@ -20,7 +21,7 @@ void fade() {
} }
} }
void singleCursor() { void singleCursor(int count = 80) {
for (int i = 0; i < 80; i++) { for (int i = 0; i < 80; i++) {
grid[20] = CHSV(0, 210, 127 * (i%2)); grid[20] = CHSV(0, 210, 127 * (i%2));
FastLED.show(); FastLED.show();
@ -29,10 +30,10 @@ void singleCursor() {
} }
#define NUM_SPARKS 3 #define NUM_SPARKS 3
void sparkle() { void sparkle(int cycles=50) {
int pos[NUM_SPARKS] = {0}; int pos[NUM_SPARKS] = {0};
for (int i = 0; i < 50; i++) { for (int i = 0; i < cycles; i++) {
for (int j = 0; j < NUM_SPARKS; j++) { for (int j = 0; j < GRIDLEN/16; j++) {
pos[j] = random(GRIDLEN); pos[j] = random(GRIDLEN);
grid[pos[j]] = CRGB::Gray; grid[pos[j]] = CRGB::Gray;
} }
@ -46,7 +47,7 @@ void sparkle() {
#define NUM_GLITCH 4 #define NUM_GLITCH 4
#define GLITCH_FRAMES 64 #define GLITCH_FRAMES 64
void glitchPulse() { void glitchPulse(int cycles=1000) {
int steps[NUM_GLITCH] = {0}; int steps[NUM_GLITCH] = {0};
int pos[NUM_GLITCH] = {0}; int pos[NUM_GLITCH] = {0};
CRGB color[NUM_GLITCH]; CRGB color[NUM_GLITCH];
@ -56,7 +57,7 @@ void glitchPulse() {
color[i] = CRGB::Brown; color[i] = CRGB::Brown;
} }
for (int frame = 0; frame < 1000; frame++) { for (int frame = 0; frame < cycles; frame++) {
for (int i = 0; i < NUM_GLITCH; i++) { for (int i = 0; i < NUM_GLITCH; i++) {
if (steps[i] == 0) { if (steps[i] == 0) {
steps[i] = GLITCH_FRAMES; steps[i] = GLITCH_FRAMES;
@ -77,7 +78,34 @@ void glitchPulse() {
FastLED.show(); FastLED.show();
delay(100); delay(100);
} }
}
void conwayish(int cycles=1000) {
uint8_t total[GRIDLEN];
uint8_t left[GRIDLEN] = {0};
uint8_t hue = random(0, 64);
for (int i = 0; i < GRIDLEN; i++) {
total[i] = random(64, 256);
left[i] = total[i];
}
for (int frame = 0; frame < cycles; frame++) {
for (int i = 0; i < GRIDLEN; i++) {
if (left[i] == 0) {
left[i] = total[i];
if (grid[i].getLuma() == 0) {
grid[i].setHSV(hue, 180, 192);
} else {
grid[i] = CRGB::Black;
}
} else {
left[i]--;
}
}
FastLED.show();
delay(20);
}
} }
void setup() { void setup() {
@ -87,8 +115,18 @@ void setup() {
} }
void loop() { void loop() {
fade(); Picker p;
singleCursor();
sparkle(); if (p.Pick(1)) {
glitchPulse(); fade();
singleCursor(20);
} else if (p.Pick(1)) {
sparkle();
} else if (p.Pick(4)) {
singleCursor();
} else if (p.Pick(8)) {
conwayish();
} else if (p.Pick(8)) {
glitchPulse();
}
} }