|
|
|
@ -132,9 +132,9 @@ void NeoPatterns::RainbowCycle(uint8_t interval, direction dir) {
|
|
|
|
|
|
|
|
|
|
void NeoPatterns::RainbowCycleUpdate()
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < numPixels(); i++)
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++)
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(i, Wheel(((i * 256 / numPixels()) + Index) & 255));
|
|
|
|
|
setPixelColorMapped(i, Wheel(((i * 256 / NUMDOTS) + Index) & 255));
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
|
Increment();
|
|
|
|
@ -143,22 +143,22 @@ void NeoPatterns::RainbowCycleUpdate()
|
|
|
|
|
void NeoPatterns::TheaterChase(uint32_t color1, uint32_t color2, uint8_t interval, direction dir) {
|
|
|
|
|
ActivePattern = THEATER_CHASE;
|
|
|
|
|
Interval = interval;
|
|
|
|
|
TotalSteps = numPixels();
|
|
|
|
|
TotalSteps = NUMDOTS;
|
|
|
|
|
Color1 = color1;
|
|
|
|
|
Color2 = color2;
|
|
|
|
|
Index = 0;
|
|
|
|
|
Direction = dir;
|
|
|
|
|
}
|
|
|
|
|
void NeoPatterns::TheaterChaseUpdate() {
|
|
|
|
|
for (int i = 0; i < numPixels(); i++)
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++)
|
|
|
|
|
{
|
|
|
|
|
if ((i + Index) % 3 == 0)
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(i, Color1);
|
|
|
|
|
setPixelColorMapped(i, Color1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(i, Color2);
|
|
|
|
|
setPixelColorMapped(i, Color2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
@ -169,7 +169,7 @@ void NeoPatterns::ColorWipe(uint32_t color, uint8_t interval, direction dir)
|
|
|
|
|
{
|
|
|
|
|
ActivePattern = COLOR_WIPE;
|
|
|
|
|
Interval = interval;
|
|
|
|
|
TotalSteps = numPixels();
|
|
|
|
|
TotalSteps = NUMDOTS;
|
|
|
|
|
Color1 = color;
|
|
|
|
|
Index = 0;
|
|
|
|
|
Direction = dir;
|
|
|
|
@ -178,7 +178,7 @@ void NeoPatterns::ColorWipe(uint32_t color, uint8_t interval, direction dir)
|
|
|
|
|
// Update the Color Wipe Pattern
|
|
|
|
|
void NeoPatterns::ColorWipeUpdate()
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(Index, Color1);
|
|
|
|
|
setPixelColorMapped(Index, Color1);
|
|
|
|
|
show();
|
|
|
|
|
Increment();
|
|
|
|
|
}
|
|
|
|
@ -188,7 +188,7 @@ void NeoPatterns::Scanner(uint32_t color1, uint8_t interval, bool colorful, bool
|
|
|
|
|
{
|
|
|
|
|
ActivePattern = SCANNER;
|
|
|
|
|
Interval = interval;
|
|
|
|
|
TotalSteps = (numPixels() - 1) * 2;
|
|
|
|
|
TotalSteps = (NUMDOTS - 1) * 2;
|
|
|
|
|
Color1 = color1;
|
|
|
|
|
Index = 0;
|
|
|
|
|
wPos = 0;
|
|
|
|
@ -208,7 +208,7 @@ void NeoPatterns::ScannerUpdate()
|
|
|
|
|
wPos++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < numPixels(); i++)
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++)
|
|
|
|
|
{
|
|
|
|
|
int finalpos;
|
|
|
|
|
if (spiral) {
|
|
|
|
@ -220,15 +220,15 @@ void NeoPatterns::ScannerUpdate()
|
|
|
|
|
}
|
|
|
|
|
if (i == Index) // Scan Pixel to the right
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(finalpos, Color1);
|
|
|
|
|
setPixelColorMapped(finalpos, Color1);
|
|
|
|
|
}
|
|
|
|
|
else if (i == TotalSteps - Index) // Scan Pixel to the left
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(finalpos, Color1);
|
|
|
|
|
setPixelColorMapped(finalpos, Color1);
|
|
|
|
|
}
|
|
|
|
|
else // Fading tail
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(finalpos, DimColor(getPixelColor(finalpos)));
|
|
|
|
|
setPixelColorMapped(finalpos, DimColor(getPixelColorMapped(finalpos)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
@ -283,9 +283,9 @@ void NeoPatterns::RandomFadeSingle(uint8_t interval, uint8_t speed) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NeoPatterns::RandomFadeSingleUpdate() {
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
pixelR_buffer[i] += random(0, random(0, WheelSpeed + 1) + 1); //use buffer red channel for color wheel
|
|
|
|
|
setPixelColor(i, Wheel(pixelR_buffer[i]));
|
|
|
|
|
setPixelColorMapped(i, Wheel(pixelR_buffer[i]));
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
|
Increment();
|
|
|
|
@ -293,7 +293,7 @@ void NeoPatterns::RandomFadeSingleUpdate() {
|
|
|
|
|
|
|
|
|
|
void NeoPatterns::RandomBuffer()
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
uint32_t c = Wheel(random(0, 256));
|
|
|
|
|
pixelR_buffer[i] = (uint8_t)(c >> 16);
|
|
|
|
|
pixelG_buffer[i] = (uint8_t)(c >> 8);
|
|
|
|
@ -305,8 +305,8 @@ void NeoPatterns::Random()
|
|
|
|
|
{
|
|
|
|
|
None(); // Stop all other effects
|
|
|
|
|
ActivePattern = RANDOM;
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
setPixelColor(i, Wheel(random(0, 256)));
|
|
|
|
|
for (uint8_t i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
setPixelColorMapped(i, Wheel(random(0, 256)));
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
|
}
|
|
|
|
@ -321,7 +321,7 @@ void NeoPatterns::Smooth(uint8_t wheelSpeed, uint8_t smoothing, uint8_t strength
|
|
|
|
|
movingPoint_x = 3;
|
|
|
|
|
movingPoint_y = 3;
|
|
|
|
|
// Clear buffer (from previous or different effects)
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
pixelR_buffer[i] = 0;
|
|
|
|
|
pixelG_buffer[i] = 0;
|
|
|
|
|
pixelB_buffer[i] = 0;
|
|
|
|
@ -401,18 +401,18 @@ void NeoPatterns::SmoothUpdate() {
|
|
|
|
|
movingPoint_x = startx;
|
|
|
|
|
movingPoint_y = starty;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
pixelR_buffer[i] = (Smoothing / 100.0) * pixelR[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelR, i, 0, 0);
|
|
|
|
|
pixelG_buffer[i] = (Smoothing / 100.0) * pixelG[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelG, i, 0, 0);
|
|
|
|
|
pixelB_buffer[i] = (Smoothing / 100.0) * pixelB[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelB, i, 0, 0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
pixelR[i] = pixelR_buffer[i];
|
|
|
|
|
pixelG[i] = pixelG_buffer[i];
|
|
|
|
|
pixelB[i] = pixelB_buffer[i];
|
|
|
|
|
setPixelColor(i, pixelR[i], pixelG[i], pixelB[i]);
|
|
|
|
|
setPixelColorMapped(i, Color(pixelR[i], pixelG[i], pixelB[i]));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
show();
|
|
|
|
@ -444,17 +444,17 @@ void NeoPatterns::Icon(uint8_t fontchar, String iconcolor, uint8_t interval)
|
|
|
|
|
|
|
|
|
|
void NeoPatterns::IconUpdate()
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < numPixels(); i++) {
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++) {
|
|
|
|
|
uint64_t mask = 1LL << (uint64_t)i;
|
|
|
|
|
|
|
|
|
|
if ( (font[FontChar]&mask) == 0) {
|
|
|
|
|
setPixelColor(numToPos(i), Color(0, 0, 0)); //bit is 0 at pos i
|
|
|
|
|
setPixelColorMapped(numToPos(i), Color(0, 0, 0)); //bit is 0 at pos i
|
|
|
|
|
} else {
|
|
|
|
|
float _brightness = 1.0 - ( (TotalSteps - Index) * 1.0 / TotalSteps );
|
|
|
|
|
uint8_t _r = (uint8_t)(Color1 >> 16);
|
|
|
|
|
uint8_t _g = (uint8_t)(Color1 >> 8);
|
|
|
|
|
uint8_t _b = (uint8_t)Color1;
|
|
|
|
|
setPixelColor(numToPos(i), Color(_r * _brightness, _g * _brightness, _b * _brightness)); //bit is 1 at pos i
|
|
|
|
|
setPixelColorMapped(numToPos(i), Color(_r * _brightness, _g * _brightness, _b * _brightness)); //bit is 1 at pos i
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
@ -532,9 +532,9 @@ void NeoPatterns::PlasmaUpdate()
|
|
|
|
|
color_4 *= color_4;
|
|
|
|
|
|
|
|
|
|
// Scale the color up to 0..7 . Max brightness is 7.
|
|
|
|
|
//strip.setPixelColor(col + (edge * row), strip.Color(color_4, 0, 0) );
|
|
|
|
|
//strip.setPixelColorMapped(col + (edge * row), strip.Color(color_4, 0, 0) );
|
|
|
|
|
|
|
|
|
|
setPixelColor(xyToPos(row, col), Color(color_1, color_2, color_3));
|
|
|
|
|
setPixelColorMapped(xyToPos(row, col), Color(color_1, color_2, color_3));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
@ -561,9 +561,9 @@ uint32_t NeoPatterns::DimColor(uint32_t color)
|
|
|
|
|
// Set all pixels to a color (synchronously)
|
|
|
|
|
void NeoPatterns::ColorSet(uint32_t color)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < numPixels(); i++)
|
|
|
|
|
for (int i = 0; i < NUMDOTS; i++)
|
|
|
|
|
{
|
|
|
|
|
setPixelColor(i, color);
|
|
|
|
|
setPixelColorMapped(i, color);
|
|
|
|
|
}
|
|
|
|
|
show();
|
|
|
|
|
}
|
|
|
|
@ -615,18 +615,32 @@ uint32_t NeoPatterns::Wheel(byte WheelPos)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Convert x y pixel position to matrix position
|
|
|
|
|
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
|
|
|
|
if (y % 2 == 0) {
|
|
|
|
|
return (y * WIDTH + x);
|
|
|
|
|
} else {
|
|
|
|
|
return (y * WIDTH + (WIDTH-1 - x));
|
|
|
|
|
#ifdef LEDBOX3X6
|
|
|
|
|
uint8_t ledbox3x6_mapping[6][3] = {
|
|
|
|
|
{0,1,2},
|
|
|
|
|
{5,4,3},
|
|
|
|
|
{6,7,8},
|
|
|
|
|
{15,14,9},
|
|
|
|
|
{16,13,10},
|
|
|
|
|
{17,12,11}
|
|
|
|
|
};
|
|
|
|
|
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
|
|
|
|
return ledbox3x6_mapping[x][y];
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
|
|
|
|
if (y % 2 == 0) {
|
|
|
|
|
return (y * WIDTH + x);
|
|
|
|
|
} else {
|
|
|
|
|
return (y * WIDTH + (WIDTH-1 - x));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//convert pixel number to actual 8x8 matrix position
|
|
|
|
|
uint8_t NeoPatterns::numToPos(int num) {
|
|
|
|
|
int x = num % 8;
|
|
|
|
|
int y = num / 8;
|
|
|
|
|
int x = num % WIDTH;
|
|
|
|
|
int y = num / HEIGHT;
|
|
|
|
|
return xyToPos(x, y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -714,5 +728,21 @@ uint32_t NeoPatterns::parseColor(String value) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void NeoPatterns::setPixelColorMapped(uint8_t i, uint32_t c){
|
|
|
|
|
#ifdef LEDBOX3X6
|
|
|
|
|
setPixelColor(i*2,c);
|
|
|
|
|
setPixelColor(i*2+1,c);
|
|
|
|
|
#else
|
|
|
|
|
setPixelColor(i,c);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
uint32_t NeoPatterns::getPixelColorMapped(uint8_t i){
|
|
|
|
|
|
|
|
|
|
#ifdef LEDBOX3X6
|
|
|
|
|
return getPixelColor(i*2);
|
|
|
|
|
#else
|
|
|
|
|
return getPixelColor(i);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|