first commit
This commit is contained in:
commit
5893b00dd2
1669 changed files with 1982740 additions and 0 deletions
97
libraries/FastLED/examples/Wave/Wave.ino
Normal file
97
libraries/FastLED/examples/Wave/Wave.ino
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
|
||||
/*
|
||||
|
||||
This is a 1D wave simluation!
|
||||
|
||||
This demo is best viewed using the FastLED compiler.
|
||||
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();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue