imported from "final" folder
This commit is contained in:
102
.pio/libdeps/esp01_1m/FastLED/examples/Wave/Wave.h
Normal file
102
.pio/libdeps/esp01_1m/FastLED/examples/Wave/Wave.h
Normal file
@@ -0,0 +1,102 @@
|
||||
|
||||
/*
|
||||
|
||||
This is a 1D wave simluation!
|
||||
|
||||
This demo is best viewed using the FastLED compiler.
|
||||
|
||||
Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases
|
||||
|
||||
Python
|
||||
|
||||
Install: pip install fastled
|
||||
Run: fastled <this sketch directory>
|
||||
This will compile and preview the sketch in the browser, and enable
|
||||
all the UI elements you see below.
|
||||
*/
|
||||
|
||||
#include "fl/math_macros.h"
|
||||
#include "fl/ui.h"
|
||||
#include "fl/wave_simulation.h"
|
||||
#include <Arduino.h>
|
||||
#include <FastLED.h>
|
||||
|
||||
using namespace fl;
|
||||
|
||||
#define NUM_LEDS 100
|
||||
#define IS_SERPINTINE true // Type of matrix display, you probably have this.
|
||||
|
||||
CRGB leds[NUM_LEDS];
|
||||
|
||||
UITitle title("Wave Demo");
|
||||
UIDescription description("Shows the use of the Wave1D effect.");
|
||||
|
||||
UIButton button("Trigger");
|
||||
WaveSimulation1D waveSim(NUM_LEDS, SuperSample::SUPER_SAMPLE_2X);
|
||||
|
||||
UISlider slider("Speed", 0.18f, 0.0f, 1.0f);
|
||||
UISlider extraFrames("Extra Frames", 1.0f, 0.0f, 8.0f, 1.0f);
|
||||
UISlider dampening("Dampening", 6.0f, 0.0f, 10.0f, 0.1f);
|
||||
UICheckbox halfDuplex("Half Duplex", false);
|
||||
UISlider superSample("SuperSampleExponent", 0.f, 0.f, 3.f, 1.f);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
// No ScreenMap necessary for strips.
|
||||
FastLED.addLeds<NEOPIXEL, 2>(leds, NUM_LEDS);
|
||||
}
|
||||
|
||||
void triggerRipple(WaveSimulation1D &waveSim, int x) {
|
||||
|
||||
for (int i = x - 1; i <= x + 1; i++) {
|
||||
if (i < 0 || i >= NUM_LEDS)
|
||||
continue;
|
||||
waveSim.setf(i, -1.f);
|
||||
}
|
||||
}
|
||||
|
||||
// Wave simulation looks better when you render at a higher resolution then
|
||||
// downscale the result to the display resolution.
|
||||
SuperSample getSuperSample() {
|
||||
switch (int(superSample)) {
|
||||
case 0:
|
||||
return SuperSample::SUPER_SAMPLE_NONE;
|
||||
case 1:
|
||||
return SuperSample::SUPER_SAMPLE_2X;
|
||||
case 2:
|
||||
return SuperSample::SUPER_SAMPLE_4X;
|
||||
case 3:
|
||||
return SuperSample::SUPER_SAMPLE_8X;
|
||||
default:
|
||||
return SuperSample::SUPER_SAMPLE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Allow the waveSimulator to respond to the current slider value each frame.
|
||||
waveSim.setSpeed(slider);
|
||||
waveSim.setDampening(dampening);
|
||||
// Pretty much you always want half duplex to be true, otherwise you get a gray
|
||||
// wave effect that doesn't look good.
|
||||
waveSim.setHalfDuplex(halfDuplex);
|
||||
waveSim.setSuperSample(getSuperSample());
|
||||
static int x = 0;
|
||||
if (button.clicked()) {
|
||||
// If button click then select a random position in the wave.
|
||||
x = random(NUM_LEDS);
|
||||
}
|
||||
if (button.isPressed()) {
|
||||
FASTLED_WARN("Button is pressed at " << x);
|
||||
triggerRipple(waveSim, x);
|
||||
}
|
||||
waveSim.update();
|
||||
for (int i = 0; i < extraFrames.value(); i++) {
|
||||
waveSim.update();
|
||||
}
|
||||
for (int x = 0; x < NUM_LEDS; x++) {
|
||||
// float value = waveSim.get(x);
|
||||
uint8_t value8 = waveSim.getu8(x);
|
||||
leds[x] = CRGB(value8, value8, value8);
|
||||
}
|
||||
FastLED.show();
|
||||
}
|
||||
Reference in New Issue
Block a user