-
-
Notifications
You must be signed in to change notification settings - Fork 264
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #97 from Makuna/RotateAndShift
RotateAndShift
- Loading branch information
Showing
5 changed files
with
288 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// NeoPixelFunLoop | ||
// This example will move a trail of light around a series of pixels. | ||
// A ring formation of pixels looks best. | ||
// The trail will have a slowly fading tail. | ||
// | ||
// This will demonstrate the use of the RotateRight method. | ||
// | ||
|
||
#include <NeoPixelBus.h> | ||
#include <NeoPixelAnimator.h> | ||
|
||
|
||
const uint16_t PixelCount = 16; // make sure to set this to the number of pixels in your strip | ||
const uint16_t PixelPin = 2; // make sure to set this to the correct pin, ignored for Esp8266 | ||
const uint16_t AnimCount = 1; // we only need one | ||
const uint16_t TailLength = 6; // length of the tail, must be shorter than PixelCount | ||
const float MaxLightness = 0.4f; // max lightness at the head of the tail (0.5f is full bright) | ||
|
||
NeoGamma<NeoGammaTableMethod> colorGamma; // for any fade animations, best to correct gamma | ||
|
||
NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin); | ||
//NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin); | ||
|
||
NeoPixelAnimator animations(AnimCount); // NeoPixel animation management object | ||
|
||
void SetRandomSeed() | ||
{ | ||
uint32_t seed; | ||
|
||
// random works best with a seed that can use 31 bits | ||
// analogRead on a unconnected pin tends toward less than four bits | ||
seed = analogRead(0); | ||
delay(1); | ||
|
||
for (int shifts = 3; shifts < 31; shifts += 3) | ||
{ | ||
seed ^= analogRead(0) << shifts; | ||
delay(1); | ||
} | ||
|
||
// Serial.println(seed); | ||
randomSeed(seed); | ||
} | ||
|
||
void LoopAnimUpdate(const AnimationParam& param) | ||
{ | ||
// wait for this animation to complete, | ||
// we are using it as a timer of sorts | ||
if (param.state == AnimationState_Completed) | ||
{ | ||
// done, time to restart this position tracking animation/timer | ||
animations.RestartAnimation(param.index); | ||
|
||
// rotate the complete strip one pixel to the right on every update | ||
strip.RotateRight(1); | ||
} | ||
} | ||
|
||
void DrawTailPixels() | ||
{ | ||
// using Hsl as it makes it easy to pick from similiar saturated colors | ||
float hue = random(360) / 360.0f; | ||
for (uint16_t index = 0; index < strip.PixelCount() && index <= TailLength; index++) | ||
{ | ||
float lightness = index * MaxLightness / TailLength; | ||
RgbColor color = HslColor(hue, 1.0f, lightness); | ||
|
||
strip.SetPixelColor(index, colorGamma.Correct(color)); | ||
} | ||
} | ||
|
||
void setup() | ||
{ | ||
strip.Begin(); | ||
strip.Show(); | ||
|
||
SetRandomSeed(); | ||
|
||
// Draw the tail that will be rotated through all the rest of the pixels | ||
DrawTailPixels(); | ||
|
||
// we use the index 0 animation to time how often we rotate all the pixels | ||
animations.StartAnimation(0, 66, LoopAnimUpdate); | ||
} | ||
|
||
|
||
void loop() | ||
{ | ||
// this is all that is needed to keep it running | ||
// and avoiding using delay() is always a good thing for | ||
// any timing related routines | ||
animations.UpdateAnimations(); | ||
strip.Show(); | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters