From 41146d118e28cd57cfb2e42dde102560354b1169 Mon Sep 17 00:00:00 2001 From: Jason Coon Date: Wed, 10 May 2017 17:13:52 -0500 Subject: [PATCH] Added mapping for half-cube --- Map.h | 193 +++++++++++++++++++++++++++++++ Noise.h | 131 +++++++++++++++++++++ esp8266-fastled-webserver.ino | 208 +++++++++++++++++++++------------- 3 files changed, 451 insertions(+), 81 deletions(-) create mode 100644 Map.h diff --git a/Map.h b/Map.h new file mode 100644 index 0000000..b288b85 --- /dev/null +++ b/Map.h @@ -0,0 +1,193 @@ +uint8_t cubeWidth = 8; +uint8_t cubeDepth = 8; +uint8_t cubeHeight = 8; + +uint8_t coordsX[NUM_LEDS] = { 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7 }; +uint8_t coordsY[NUM_LEDS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; +uint8_t coordsZ[NUM_LEDS] = { 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +void cubeTest() { + static uint8_t x = 0; + static uint8_t y = 0; + static uint8_t z = 0; + + EVERY_N_MILLIS(255 - speed) { + x++; + if(x >= cubeWidth) { + x = 0; + y++; + if(y >= cubeDepth) { + y = 0; + z++; + if(z >= cubeHeight) { + z = 0; + } + } + } + + FastLED.clear(); + + CHSV color = CHSV(gHue, 255, 255); + + for(uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t cx = coordsX[i]; + uint8_t cy = coordsY[i]; + uint8_t cz = coordsZ[i]; + + if((cx == x && cy == y) || (cx == x && cz == z) || (cy == y && cz == z)) { + leds[i] = color; + } + } + } +} + +void cubeXPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - (x * hues)); + } +} + +void cubeYPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t y = coordsY[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - (y * hues)); + } +} + +void cubeZPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - (z * hues)); + } +} + +void cubeXYPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t y = coordsY[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - ((x + y) * hues)); + } +} + +void cubeXZPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - ((x + z) * hues)); + } +} + +void cubeYZPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t y = coordsY[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - ((y + z) * hues)); + } +} + +void cubeXYZPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t y = coordsY[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - ((x + y + z) * hues)); + } +} + +void cubeXGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - (x * hues)); + } +} + +void cubeYGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t y = coordsY[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - (y * hues)); + } +} + +void cubeZGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - (z * hues)); + } +} + +void cubeXYGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t y = coordsY[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - ((x + y) * hues)); + } +} + +void cubeXZGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - ((x + z) * hues)); + } +} + +void cubeYZGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t y = coordsY[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - ((y + z) * hues)); + } +} + +void cubeXYZGradientPalette() { + uint8_t hues = 8; + + for (uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t y = coordsY[i]; + uint8_t z = coordsZ[i]; + + leds[i] = ColorFromPalette(gCurrentPalette, beat8(speed) - ((x + y + z) * hues)); + } +} + diff --git a/Noise.h b/Noise.h index 17bb720..274b7c5 100644 --- a/Noise.h +++ b/Noise.h @@ -113,6 +113,36 @@ void drawNoise(CRGBPalette16 palette, uint8_t hueReduce = 0) noisez += noisespeedz; } +void drawNoise3d(CRGBPalette16 palette, uint8_t hueReduce = 0) +{ + for(uint8_t i = 0; i < NUM_LEDS; i++) { + uint8_t x = coordsX[i]; + uint8_t y = coordsY[i]; + uint8_t z = coordsZ[i]; + + int xoffset = noisescale * x; + int yoffset = noisescale * y; + int zoffset = noisescale * z; + + uint8_t data = inoise8(x + xoffset + noisex, y + yoffset + noisey, z + zoffset + noisez); + + // The range of the inoise8 function is roughly 16-238. + // These two operations expand those values out to roughly 0..255 + // You can comment them out if you want the raw noise data. + data = qsub8(data, 16); + data = qadd8(data, scale8(data, 39)); + + if(hueReduce > 0 && data >= hueReduce) + data -= hueReduce; + + leds[i] = ColorFromPalette(palette, data, 255, LINEARBLEND); + } + + noisex += noisespeedx; + noisey += noisespeedy; + noisez += noisespeedz; +} + void rainbowNoise() { noisespeedx = 0; noisespeedy = -1; @@ -122,6 +152,15 @@ void rainbowNoise() { drawNoise(RainbowColors_p); } +void rainbowNoise3d() { + noisespeedx = 0; + noisespeedy = 0; + noisespeedz = -1; + noisescale = 24; + colorLoop = 0; + drawNoise3d(RainbowColors_p); +} + void rainbowStripeNoise() { noisespeedx = 0; noisespeedy = -2; @@ -131,6 +170,15 @@ void rainbowStripeNoise() { drawNoise(RainbowStripeColors_p); } +void rainbowStripeNoise3d() { + noisespeedx = 0; + noisespeedy = 0; + noisespeedz = -2; + noisescale = 24; + colorLoop = 0; + drawNoise3d(RainbowStripeColors_p); +} + void partyNoise() { noisespeedx = -9; noisespeedy = 0; @@ -140,6 +188,15 @@ void partyNoise() { drawNoise(PartyColors_p); } +void partyNoise3d() { + noisespeedx = -9; + noisespeedy = 0; + noisespeedz = 0; + noisescale = 32; + colorLoop = 0; + drawNoise3d(PartyColors_p); +} + void forestNoise() { noisespeedx = -9; noisespeedy = 0; @@ -149,6 +206,15 @@ void forestNoise() { drawNoise(ForestColors_p); } +void forestNoise3d() { + noisespeedx = -9; + noisespeedy = 0; + noisespeedz = 0; + noisescale = 32; + colorLoop = 0; + drawNoise3d(ForestColors_p); +} + void cloudNoise() { noisespeedx = -2; noisespeedy = 0; @@ -158,6 +224,15 @@ void cloudNoise() { drawNoise(CloudColors_p); } +void cloudNoise3d() { + noisespeedx = -2; + noisespeedy = 0; + noisespeedz = 0; + noisescale = 24; + colorLoop = 0; + drawNoise3d(CloudColors_p); +} + void fireNoise() { noisespeedx = 0; // 24; noisespeedy = -32; @@ -167,6 +242,15 @@ void fireNoise() { drawNoise(HeatColors_p, 60); } +void fireNoise3d() { + noisespeedx = 0; + noisespeedy = 0; + noisespeedz = 32; + noisescale = 64; + colorLoop = 0; + drawNoise3d(HeatColors_p, 60); +} + void fireNoise2() { noisespeedx = 0; noisespeedy = -8; @@ -176,6 +260,15 @@ void fireNoise2() { drawNoise(HeatColors_p); } +void fireNoise23d() { + noisespeedx = 1; + noisespeedy = 3; + noisespeedz = 8; + noisescale = 32; + colorLoop = 0; + drawNoise3d(HeatColors_p); +} + void lavaNoise() { noisespeedx = 0; noisespeedy = -1; @@ -185,6 +278,15 @@ void lavaNoise() { drawNoise(LavaColors_p); } +void lavaNoise3d() { + noisespeedx = 1; + noisespeedy = 3; + noisespeedz = -8; + noisescale = 32; + colorLoop = 0; + drawNoise3d(LavaColors_p); +} + void oceanNoise() { noisespeedx = -2; noisespeedy = 0; @@ -194,6 +296,15 @@ void oceanNoise() { drawNoise(OceanColors_p); } +void oceanNoise3d() { + noisespeedx = -2; + noisespeedy = 0; + noisespeedz = 4; + noisescale = 24; + colorLoop = 0; + drawNoise3d(OceanColors_p); +} + void blackAndWhiteNoise() { SetupBlackAndWhiteStripedPalette(); noisespeedx = -12; @@ -204,6 +315,16 @@ void blackAndWhiteNoise() { drawNoise(blackAndWhiteStripedPalette); } +void blackAndWhiteNoise3d() { + SetupBlackAndWhiteStripedPalette(); + noisespeedx = -12; + noisespeedy = 0; + noisespeedz = 0; + noisescale = 24; + colorLoop = 0; + drawNoise3d(blackAndWhiteStripedPalette); +} + void blackAndBlueNoise() { SetupBlackAndBlueStripedPalette(); noisespeedx = 0; @@ -213,3 +334,13 @@ void blackAndBlueNoise() { colorLoop = 0; drawNoise(blackAndBlueStripedPalette); } + +void blackAndBlueNoise3d() { + SetupBlackAndBlueStripedPalette(); + noisespeedx = -4; + noisespeedy = -4; + noisespeedz = -4; + noisescale = 32; + colorLoop = 0; + drawNoise3d(blackAndBlueStripedPalette); +} diff --git a/esp8266-fastled-webserver.ino b/esp8266-fastled-webserver.ino index c6a9b30..9fb83ec 100644 --- a/esp8266-fastled-webserver.ino +++ b/esp8266-fastled-webserver.ino @@ -1,20 +1,20 @@ /* - * ESP8266 + FastLED + IR Remote: https://github.com/jasoncoon/esp8266-fastled-webserver - * Copyright (C) 2015-2016 Jason Coon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ + ESP8266 + FastLED + IR Remote: https://github.com/jasoncoon/esp8266-fastled-webserver + Copyright (C) 2015-2016 Jason Coon + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ #include FASTLED_USING_NAMESPACE @@ -150,6 +150,36 @@ void dimAll(byte value) } } +typedef struct { + CRGBPalette16 palette; + String name; +} PaletteAndName; +typedef PaletteAndName PaletteAndNameList[]; + +const CRGBPalette16 palettes[] = { + RainbowColors_p, + RainbowStripeColors_p, + CloudColors_p, + LavaColors_p, + OceanColors_p, + ForestColors_p, + PartyColors_p, + HeatColors_p +}; + +const uint8_t paletteCount = ARRAY_SIZE(palettes); + +const String paletteNames[paletteCount] = { + "Rainbow", + "Rainbow Stripe", + "Cloud", + "Lava", + "Ocean", + "Forest", + "Party", + "Heat", +}; + typedef void (*Pattern)(); typedef Pattern PatternList[]; typedef struct { @@ -160,6 +190,7 @@ typedef PatternAndName PatternAndNameList[]; #include "Twinkles.h" #include "TwinkleFOX.h" +#include "Map.h" #include "Noise.h" // List of patterns to cycle through. Each is defined as a separate function below. @@ -170,12 +201,45 @@ PatternAndNameList patterns = { { colorWaves, "Color Waves" }, { colorWaves2, "Color Waves 2" }, + { cubeTest, "Cube XYZ Test" }, + + { cubeXPalette, "Cube X Palette" }, + { cubeYPalette, "Cube Y Palette" }, + { cubeZPalette, "Cube Z Palette" }, + + { cubeXYPalette, "Cube XY Palette" }, + { cubeXZPalette, "Cube XZ Palette" }, + { cubeYZPalette, "Cube YZ Palette" }, + { cubeXYZPalette, "Cube XYZ Palette" }, + + { cubeXGradientPalette, "Cube X Gradient Palette" }, + { cubeYGradientPalette, "Cube Y Gradient Palette" }, + { cubeZGradientPalette, "Cube Z Gradient Palette" }, + + { cubeXYGradientPalette, "Cube XY Gradient Palette" }, + { cubeXZGradientPalette, "Cube XZ Gradient Palette" }, + { cubeYZGradientPalette, "Cube YZ Gradient Palette" }, + { cubeXYZGradientPalette, "Cube XYZ Gradient Palette" }, + + // 3d noise patterns + { fireNoise3d, "Fire Noise 3D" }, + { fireNoise23d, "Fire Noise 2 3D" }, + { lavaNoise3d, "Lava Noise 3D" }, + { rainbowNoise3d, "Rainbow Noise 3D" }, + { rainbowStripeNoise3d, "Rainbow Stripe Noise 3D" }, + { partyNoise3d, "Party Noise 3D" }, + { forestNoise3d, "Forest Noise 3D" }, + { cloudNoise3d, "Cloud Noise 3D" }, + { oceanNoise3d, "Ocean Noise 3D" }, + { blackAndWhiteNoise3d, "Black & White Noise 3D" }, + { blackAndBlueNoise3d, "Black & Blue Noise 3D" }, + { xyMatrixTest, "Matrix Test" }, { verticalPalette, "Vertical Palette" }, { diagonalPalette, "Diagonal Palette" }, { horizontalPalette, "Horizontal Palette" }, - + { verticalGradientPalette, "Vertical Gradient Palette" }, { diagonalGradientPalette, "Diagonal Gradient Palette" }, { horizontalGradientPalette, "Horizontal Gradient Palette" }, @@ -230,36 +294,6 @@ PatternAndNameList patterns = { const uint8_t patternCount = ARRAY_SIZE(patterns); -typedef struct { - CRGBPalette16 palette; - String name; - } PaletteAndName; -typedef PaletteAndName PaletteAndNameList[]; - -const CRGBPalette16 palettes[] = { - RainbowColors_p, - RainbowStripeColors_p, - CloudColors_p, - LavaColors_p, - OceanColors_p, - ForestColors_p, - PartyColors_p, - HeatColors_p -}; - -const uint8_t paletteCount = ARRAY_SIZE(palettes); - -const String paletteNames[paletteCount] = { - "Rainbow", - "Rainbow Stripe", - "Cloud", - "Lava", - "Ocean", - "Forest", - "Party", - "Heat", - }; - #include "Fields.h" void setup() { @@ -269,7 +303,7 @@ void setup() { //FastLED.addLeds(leds, NUM_LEDS); // for WS2812 (Neopixel) FastLED.addLeds(leds, NUM_LEDS); // for APA102 (Dotstar) - FastLED.setDither(false); + FastLED.setDither(true); FastLED.setCorrection(TypicalLEDStrip); FastLED.setBrightness(brightness); FastLED.setMaxPowerInVoltsAndMilliamps(5, MILLI_AMPS); @@ -355,7 +389,7 @@ void setup() { if (String(WiFi.SSID()) != String(ssid)) { WiFi.begin(ssid, password); } - } + } httpUpdateServer.setup(&webServer); @@ -399,7 +433,7 @@ void setup() { webServer.on("/speed", HTTP_POST, []() { String value = webServer.arg("value"); - speed = value.toInt(); + setSpeed(value.toInt()); broadcastInt("speed", speed); sendInt(speed); }); @@ -407,7 +441,7 @@ void setup() { webServer.on("/twinkleSpeed", HTTP_POST, []() { String value = webServer.arg("value"); twinkleSpeed = value.toInt(); - if(twinkleSpeed < 0) twinkleSpeed = 0; + if (twinkleSpeed < 0) twinkleSpeed = 0; else if (twinkleSpeed > 8) twinkleSpeed = 8; broadcastInt("twinkleSpeed", twinkleSpeed); sendInt(twinkleSpeed); @@ -416,7 +450,7 @@ void setup() { webServer.on("/twinkleDensity", HTTP_POST, []() { String value = webServer.arg("value"); twinkleDensity = value.toInt(); - if(twinkleDensity < 0) twinkleDensity = 0; + if (twinkleDensity < 0) twinkleDensity = 0; else if (twinkleDensity > 8) twinkleDensity = 8; broadcastInt("twinkleDensity", twinkleDensity); sendInt(twinkleDensity); @@ -565,7 +599,7 @@ void loop() { FastLED.show(); // insert a delay to keep the framerate modest - // FastLED.delay(1000 / FRAMES_PER_SECOND); + FastLED.delay(1000 / FRAMES_PER_SECOND); } void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { @@ -844,6 +878,8 @@ void loadSettings() currentPaletteIndex = 0; else if (currentPaletteIndex >= paletteCount) currentPaletteIndex = paletteCount - 1; + + speed = EEPROM.read(9); } void setPower(uint8_t value) @@ -857,7 +893,7 @@ void setPower(uint8_t value) } void setAutoplay(uint8_t value) - { +{ autoplay = value == 0 ? 0 : 1; EEPROM.write(6, autoplay); @@ -936,8 +972,8 @@ void setPattern(uint8_t value) void setPatternName(String name) { - for(uint8_t i = 0; i < patternCount; i++) { - if(patterns[i].name == name) { + for (uint8_t i = 0; i < patternCount; i++) { + if (patterns[i].name == name) { setPattern(i); break; } @@ -959,14 +995,24 @@ void setPalette(uint8_t value) void setPaletteName(String name) { - for(uint8_t i = 0; i < paletteCount; i++) { - if(paletteNames[i] == name) { + for (uint8_t i = 0; i < paletteCount; i++) { + if (paletteNames[i] == name) { setPalette(i); break; } } } +void setSpeed(uint8_t value) +{ + speed = value; + + EEPROM.write(9, value); + EEPROM.commit(); + + broadcastInt("speed", speed); +} + void adjustBrightness(bool up) { if (up && brightnessIndex < brightnessCount - 1) @@ -1040,10 +1086,10 @@ void xyMatrixTest() EVERY_N_MILLIS(30) { x++; - if(x >= MatrixWidth) { + if (x >= MatrixWidth) { x = 0; y++; - if(y >= MatrixHeight) { + if (y >= MatrixHeight) { y = 0; } } @@ -1053,10 +1099,10 @@ void xyMatrixTest() void verticalPalette() { uint8_t verticalHues = 256 / MatrixHeight; - for(uint8_t y = 0; y < MatrixHeight; y++) { + for (uint8_t y = 0; y < MatrixHeight; y++) { CRGB color = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) + (y * verticalHues)); - - for(uint8_t x = 0; x < MatrixWidth; x++) { + + for (uint8_t x = 0; x < MatrixWidth; x++) { leds[XY(x, y)] = color; } } @@ -1065,8 +1111,8 @@ void verticalPalette() { void diagonalPalette() { uint8_t verticalHues = 256 / MatrixHeight; - for(uint8_t y = 0; y < MatrixHeight; y++) { - for(uint8_t x = 0; x < MatrixWidth; x++) { + for (uint8_t y = 0; y < MatrixHeight; y++) { + for (uint8_t x = 0; x < MatrixWidth; x++) { CRGB color = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - ((x - y) * verticalHues)); leds[XY(x, y)] = color; } @@ -1075,11 +1121,11 @@ void diagonalPalette() { void horizontalPalette() { uint8_t horizontalHues = 256 / MatrixWidth; - - for(uint8_t x = 0; x < MatrixWidth; x++) { + + for (uint8_t x = 0; x < MatrixWidth; x++) { CRGB color = ColorFromPalette(palettes[currentPaletteIndex], beat8(speed) - (x * horizontalHues)); - - for(uint8_t y = 0; y < MatrixHeight; y++) { + + for (uint8_t y = 0; y < MatrixHeight; y++) { leds[XY(x, y)] = color; } } @@ -1088,10 +1134,10 @@ void horizontalPalette() { void verticalGradientPalette() { uint8_t verticalHues = 256 / MatrixHeight; - for(uint8_t y = 0; y < MatrixHeight; y++) { + for (uint8_t y = 0; y < MatrixHeight; y++) { CRGB color = ColorFromPalette(gCurrentPalette, beat8(speed) + (y * verticalHues)); - - for(uint8_t x = 0; x < MatrixWidth; x++) { + + for (uint8_t x = 0; x < MatrixWidth; x++) { leds[XY(x, y)] = color; } } @@ -1100,8 +1146,8 @@ void verticalGradientPalette() { void diagonalGradientPalette() { uint8_t verticalHues = 256 / MatrixHeight; - for(uint8_t y = 0; y < MatrixHeight; y++) { - for(uint8_t x = 0; x < MatrixWidth; x++) { + for (uint8_t y = 0; y < MatrixHeight; y++) { + for (uint8_t x = 0; x < MatrixWidth; x++) { CRGB color = ColorFromPalette(gCurrentPalette, beat8(speed) - ((x - y) * verticalHues)); leds[XY(x, y)] = color; } @@ -1110,11 +1156,11 @@ void diagonalGradientPalette() { void horizontalGradientPalette() { uint8_t horizontalHues = 256 / MatrixWidth; - - for(uint8_t x = 0; x < MatrixWidth; x++) { + + for (uint8_t x = 0; x < MatrixWidth; x++) { CRGB color = ColorFromPalette(gCurrentPalette, beat8(speed) - (x * horizontalHues)); - - for(uint8_t y = 0; y < MatrixHeight; y++) { + + for (uint8_t y = 0; y < MatrixHeight; y++) { leds[XY(x, y)] = color; } } @@ -1148,10 +1194,10 @@ void sinelon() int pos = beatsin16(speed, 0, NUM_LEDS); static int prevpos = 0; CRGB color = ColorFromPalette(palettes[currentPaletteIndex], gHue, 255); - if( pos < prevpos ) { - fill_solid( leds+pos, (prevpos-pos)+1, color); + if ( pos < prevpos ) { + fill_solid( leds + pos, (prevpos - pos) + 1, color); } else { - fill_solid( leds+prevpos, (pos-prevpos)+1, color); + fill_solid( leds + prevpos, (pos - prevpos) + 1, color); } prevpos = pos; }