This sketch is fully compatible with the FastLED web compiler.
This sketch is fully compatible with the FastLED web compiler. To use it do the following:
#include "FastLED.h"
#include <FastLED.h>
enum {
};
154,
168,
84,
154
};
#define numberOfRipples 30
};
unsigned long
#define heartbeatLockout \
500
#define heartbeatDelta 300
#define lowTemperature 33.0
#define highTemperature 37.0
2.0;
#define gyroAlpha 0.9
#define gyroThreshold \
300
#define randomPulsesEnabled true
#define cubePulsesEnabled true
#define autoPulseTimeout \
5000
#define randomPulseTime 2000
#define autoPulseChangeTime 30000
#define simulatedHeartbeatBaseTime \
600
#define simulatedHeartbeatVariance \
200
#define simulatedEdaBaseTime 1000
#define simulatedEdaVariance 10000
return true;
}
}
return false;
}
fl::UIDescription description(
"Take 6 seconds to boot up. Chromancer is a wall-mounted hexagonal LED display that originally reacted to biometric data from an EmotiBit sensor. It visualizes your heartbeat, skin temperature, and movement in real-time. Chromancer also has a few built-in effects that can be triggered with the push of a button. Enjoy!");
Serial.println(
"*** LET'S GOOOOO ***");
Serial.println(
"JSON SCREENMAP");
for (auto kv : segmentMaps) {
Serial.print(kv.first.c_str());
Serial.println(kv.second.getLength());
}
bool ok = true;
auto red_it = segmentMaps.find("red_segment");
ok = (red_it != segmentMaps.end()) && ok;
if (red_it != segmentMaps.end()) red = red_it->second;
auto black_it = segmentMaps.find("back_segment");
ok = (black_it != segmentMaps.end()) && ok;
if (black_it != segmentMaps.end()) black = black_it->second;
auto green_it = segmentMaps.find("green_segment");
ok = (green_it != segmentMaps.end()) && ok;
if (green_it != segmentMaps.end()) green = green_it->second;
auto blue_it = segmentMaps.find("blue_segment");
ok = (blue_it != segmentMaps.end()) && ok;
if (blue_it != segmentMaps.end()) blue = blue_it->second;
if (!ok) {
Serial.println(
"Failed to get all segment maps");
return;
}
}
unsigned long benchmark =
millis();
for (int strip = 0; strip < 40; strip++) {
for (int led = 0; led < 14; led++) {
for (int i = 0; i < 3; i++) {
}
}
}
}
for (int segment = 0; segment < 40; segment++) {
for (int fromBottom = 0; fromBottom < 14; fromBottom++) {
}
}
for (int i = 0; i < 4; i++) {
for (
int j = 0; j <
lengths[i]; j++) {
}
}
}
unsigned int baseColor = random(0xFFFF);
byte centerNode = 15;
for (int i = 0; i < 6; i++) {
centerNode, i,
baseColor + (0xFFFF / 6) * i, 255, 255),
0.3 + (i * 0.1),
2000,
break;
}
}
}
}
}
unsigned int baseColor = random(0xFFFF);
for (int dir = 0; dir < 6; dir++) {
node, dir,
255, 255),
.4, 2000, 0);
break;
}
}
break;
}
}
}
}
unsigned int baseColor = random(0xFFFF);
for (int i = 0; i < 6; i++) {
node, i,
baseColor + (0xFFFF / 6) * i, 255, 255),
.5, 2000, behavior);
break;
}
}
}
}
}
unsigned int baseColor = random(0xFFFF);
for (int i = 0; i < 6; i++) {
baseColor + (0xFFFF / 6) * i, 255, 255),
.65, 1500, behavior);
break;
}
}
}
}
for (int i = 0; i < 6; i++) {
float(random(100)) / 100.0 * .1 + .4, 1000, 0);
break;
}
}
}
}
unsigned int baseColor = random(0xFFFF);
byte possiblePulse = 255;
while (true) {
possiblePulse = random(3);
continue;
switch (possiblePulse) {
case 0:
continue;
break;
case 1:
continue;
break;
case 2:
continue;
break;
default:
continue;
}
break;
}
}
case 0: {
int node = 0;
bool foundStartingNode = false;
while (!foundStartingNode) {
node = random(25);
foundStartingNode = true;
foundStartingNode = false;
}
foundStartingNode = false;
}
for (int i = 0; i < 6; i++) {
node, i,
255),
float(random(100)) / 100.0 * .2 + .5, 3000,
1);
break;
}
}
}
}
break;
}
case 1: {
for (int i = 0; i < 6; i++) {
node, i,
255),
.5, 2000, behavior);
break;
}
}
}
}
break;
}
case 2: {
for (int i = 0; i < 6; i++) {
baseColor + (0xFFFF / 6) * i, 255, 255),
.65, 1500, behavior);
break;
}
}
}
break;
}
default:
break;
}
}
for (int i = 0; i < 6; i++) {
15, i, 0xEE1111,
float(random(100)) / 100.0 * .1 + .4, 1000, 0);
break;
}
}
}
}
for (int i = 0; i < 10; i++) {
byte targetNode =
byte direction = 255;
while (direction == 255) {
direction = random(6);
direction = 255;
}
targetNode, direction, 0x1111EE,
float(random(100)) / 100.0 * .5 + 2, 300, 2);
break;
}
}
}
}
}
}
}
fl::UIDescription description("Demo of the Animatrix effects. @author of fx is StefanPetrick")
fl::UITitle title("Animartrix")
byte currentAutoPulseType
#define simulatedHeartbeatBaseTime
fl::UIGroup automationControls("Automation", starburstPulsesEnabled, simulatedBiometricsEnabled)
CRGB leds2[lengths[RedStrip]]
bool isNodeOnBorder(byte node)
bool wasRainbowCubeClicked
unsigned long nextSimulatedHeartbeat
fl::UIButton simulatedHeartbeat("Simulated Heartbeat")
byte ledColors[40][14][3]
fl::UIGroup displayControls("Display", sliderDecay, allWhite)
CRGB leds3[lengths[BlueStrip]]
unsigned long lastAutoPulseChange
unsigned long lastRandomPulse
#define simulatedEdaBaseTime
fl::UIGroup effectTriggers("Effect Triggers", simulatedHeartbeat, triggerStarburst, triggerRainbowCube, triggerBorderWave, triggerSpiral)
float lastKnownTemperature
fl::UIButton triggerBorderWave("Border Wave")
fl::UICheckbox starburstPulsesEnabled("Starburst Pulses", true)
#define simulatedEdaVariance
fl::UICheckbox allWhite("All White", false)
#define randomPulsesEnabled
CRGB leds1[lengths[GreenStrip]]
unsigned long lastHeartbeat
fl::UIButton triggerSpiral("Spiral Wave")
fl::UICheckbox simulatedBiometricsEnabled("Simulated Biometrics", true)
#define simulatedHeartbeatVariance
bool wasBorderWaveClicked
fl::UISlider sliderDecay("decay",.97f,.8, 1.0,.01)
#define autoPulseChangeTime
unsigned long nextSimulatedEda
byte numberOfAutoPulseTypes
fl::UIButton triggerStarburst("Trigger Starburst")
Ripple ripples[numberOfRipples]
#define cubePulsesEnabled
fl::UIButton triggerRainbowCube("Rainbow Cube")
CRGB leds0[lengths[BlackStrip]]
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
static bool ParseJson(const char *jsonStrScreenMap, fl::flat_map< string, ScreenMap > *segmentMaps, string *err=nullptr) FL_NOEXCEPT
size_type size() const FL_NOEXCEPT
uint32_t Adafruit_DotStar_ColorHSV(uint16_t hue, uint8_t sat, uint8_t val)
FastLED's Elegant JSON Library: fl::json
Centralized logging categories for FastLED hardware interfaces and subsystems.
int nodeConnections[25][6]
int ledAssignments[40][3]
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
void printf(const char *format, const Args &... args) FL_NOEXCEPT
Printf-like formatting function that prints directly to the platform output.
enable_if<!is_integral< T >::value, T >::type round(T value) FL_NOEXCEPT
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
const char JSON_SCREEN_MAP[]
@ White
<div style='background:#FFFFFF;width:4em;height:4em;'></div>
Aggregator header for the fl/ui/ family of per-element UI types.