diff --git a/Field.h b/Field.h index af72b68ec5f7e8f40d37eabdac6c550f0de246a2..47eb0d17f74785a7bc6187400c106437e2807c81 100644 --- a/Field.h +++ b/Field.h @@ -101,28 +101,4 @@ String getFieldsJson(FieldList fields, uint8_t count) { return json; } -/* - String json = "["; - - json += "{\"name\":\"power\",\"label\":\"Power\",\"type\":\"Boolean\",\"value\":" + String(power) + "},"; - json += "{\"name\":\"brightness\",\"label\":\"Brightness\",\"type\":\"Number\",\"value\":" + String(brightness) + "},"; - - json += "{\"name\":\"pattern\",\"label\":\"Pattern\",\"type\":\"Select\",\"value\":" + String(currentPatternIndex) + ",\"options\":["; - for (uint8_t i = 0; i < patternCount; i++) - { - json += "\"" + patterns[i].name + "\""; - if (i < patternCount - 1) - json += ","; - } - json += "]},"; - - json += "{\"name\":\"autoplay\",\"label\":\"Autoplay\",\"type\":\"Boolean\",\"value\":" + String(autoplay) + "},"; - json += "{\"name\":\"autoplayDuration\",\"label\":\"Autoplay Duration\",\"type\":\"Number\",\"value\":" + String(autoplayDuration) + "},"; - - json += "{\"name\":\"solidColor\",\"label\":\"Color\",\"type\":\"Color\",\"value\":\"" + String(solidColor.r) + "," + String(solidColor.g) + "," + String(solidColor.b) +"\"},"; - - json += "{\"name\":\"cooling\",\"label\":\"Cooling\",\"type\":\"Number\",\"value\":" + String(cooling) + "},"; - json += "{\"name\":\"sparking\",\"label\":\"Sparking\",\"type\":\"Number\",\"value\":" + String(sparking) + "}"; - - json += "]"; -*/ +// EOF diff --git a/Fields.h b/Fields.h index c1c868d333258f3aedecb3a3b68627ef59a68a4a..67631aa00d5dc20c1bd3f28349d598b92bfe34ff 100644 --- a/Fields.h +++ b/Fields.h @@ -49,7 +49,13 @@ String getPatterns() { String json = ""; for (uint8_t i = 0; i < patternCount; i++) { - json += "\"" + patterns[i].name + "\""; + json += "{ \"name\": \"" + patterns[i].name + "\","; + json += "\"show_palette\": " + String(patterns[i].show_palette ? "true": "false") + ","; + json += "\"show_speed\": " + String(patterns[i].show_speed ? "true": "false") + ","; + json += "\"show_color_picker\": " + String(patterns[i].show_color_picker ? "true": "false") + ","; + json += "\"show_cooling_sparking\": " + String(patterns[i].show_cooling_sparking ? "true": "false") + ","; + json += "\"show_twinkle\": " + String(patterns[i].show_twinkle ? "true": "false"); + json += "}"; if (i < patternCount - 1) json += ","; } @@ -65,7 +71,7 @@ String getPalettes() { String json = ""; for (uint8_t i = 0; i < paletteCount; i++) { - json += "\"" + paletteNames[i] + "\""; + json += "{ \"name\": \"" + paletteNames[i] + "\"}"; if (i < paletteCount - 1) json += ","; } diff --git a/data/js/app.js b/data/js/app.js index 19cc8a93309544c6ff99a79960c60c499c9ec95e..7e58b87e6ae23c83ca5d14521715d73357cd1736 100644 --- a/data/js/app.js +++ b/data/js/app.js @@ -11,6 +11,8 @@ var postValueTimer = {}; var ignoreColorChange = false; +var patternData = {}; + var ws = new ReconnectingWebSocket('ws://' + address + ':81/', ['arduino']); ws.debug = true; @@ -44,6 +46,9 @@ $(document).ready(function() { } else if (field.type == "Setting") { handleSetting(field); } + if (field.name == "pattern") { + patternData = field; + } }); $(".minicolors").minicolors({ @@ -54,6 +59,8 @@ $(document).ready(function() { inline: true }); + updateDisplayedFields(); + $("#status").html("Ready"); }) .fail(function(errorThrown) { @@ -158,7 +165,7 @@ function addSelectField(field) { select.attr("id", id); for (var i = 0; i < field.options.length; i++) { - var optionText = field.options[i]; + var optionText = field.options[i].name; var option = $("<option></option>"); option.text(optionText); option.attr("value", i); @@ -170,6 +177,9 @@ function addSelectField(field) { select.change(function() { var value = template.find("#" + id + " option:selected").index(); postValue(field.name, value); + if (field.name == "pattern") { + updateDisplayedFields(value); + } }); var previousButton = template.find(".btn-previous"); @@ -183,6 +193,9 @@ function addSelectField(field) { value = count - 1; select.val(value); postValue(field.name, value); + if (field.name == "pattern") { + updateDisplayedFields(value); + } }); nextButton.click(function() { @@ -193,6 +206,9 @@ function addSelectField(field) { value = 0; select.val(value); postValue(field.name, value); + if (field.name == "pattern") { + updateDisplayedFields(value); + } }); $("#form").append(template); @@ -389,6 +405,9 @@ function updateFieldValue(name, value) { } else if (type == "Select") { var select = group.find(".form-control"); select.val(value); + if (name == "pattern") { + updateDisplayedFields(value); + } } else if (type == "Color") { var input = group.find(".form-control"); input.val("rgb(" + value + ")"); @@ -488,3 +507,58 @@ function rgbToComponents(rgb) { return components; } + +function updateDisplayedFields(pattern = null) { + + // default value + var pattern_index = patternData.value; + + if (pattern != null) { + pattern_index = pattern; + } + + this_pattern = patternData.options[pattern_index]; + + if (this_pattern.show_palette == false) { + $("#form-group-palette").addClass("hidden"); + } else { + $("#form-group-palette").removeClass("hidden"); + } + + if (this_pattern.show_speed == false) { + $("#form-group-speed").addClass("hidden"); + } else { + $("#form-group-speed").removeClass("hidden"); + } + + if (this_pattern.show_color_picker == false) { + $("#form-group-section-solidColor").addClass("hidden"); + $("#colorPaletteTemplate").addClass("hidden"); + $("#form-group-solidColor").addClass("hidden"); + } else { + $("#form-group-section-solidColor").removeClass("hidden"); + $("#colorPaletteTemplate").removeClass("hidden"); + $("#form-group-solidColor").removeClass("hidden"); + } + + if (this_pattern.show_cooling_sparking == false) { + $("#form-group-section-fire").addClass("hidden"); + $("#form-group-cooling").addClass("hidden"); + $("#form-group-sparking").addClass("hidden"); + } else { + $("#form-group-section-fire").removeClass("hidden"); + $("#form-group-cooling").removeClass("hidden"); + $("#form-group-sparking").removeClass("hidden"); + } + + if (this_pattern.show_twinkle == false) { + $("#form-group-section-twinkles").addClass("hidden"); + $("#form-group-twinkleSpeed").addClass("hidden"); + $("#form-group-twinkleDensity").addClass("hidden"); + } else { + $("#form-group-section-twinkles").removeClass("hidden"); + $("#form-group-twinkleSpeed").removeClass("hidden"); + $("#form-group-twinkleDensity").removeClass("hidden"); + } + +} \ No newline at end of file diff --git a/esp8266-fastled-iot-webserver.ino b/esp8266-fastled-iot-webserver.ino index 2b400ec4da4b9330c376279c7610bf3bf51fbace..6da584e5471c7404200c662f77765dd3abfcfba8 100644 --- a/esp8266-fastled-iot-webserver.ino +++ b/esp8266-fastled-iot-webserver.ino @@ -460,6 +460,12 @@ typedef Pattern PatternList[]; typedef struct { Pattern pattern; String name; + // these settings decide if certain controls/fields are displayed in the web interface + bool show_palette; + bool show_speed; + bool show_color_picker; + bool show_cooling_sparking; + bool show_twinkle; } PatternAndName; typedef PatternAndName PatternAndNameList[]; @@ -471,123 +477,123 @@ typedef PatternAndName PatternAndNameList[]; PatternAndNameList patterns = { // Time patterns - #if DEVICE_TYPE == 2 - { displayTimeStatic, "Time" }, - { displayTimeColorful, "Time Colorful" }, - { displayTimeGradient, "Time Gradient" }, - { displayTimeGradientLarge, "Time Gradient large" }, - { displayTimeRainbow, "Time Rainbow" }, - #endif +#if DEVICE_TYPE == 2 // palet speed color spark twinkle + { displayTimeStatic, "Time", true, true, true, false, false}, + { displayTimeColorful, "Time Colorful", true, true, true, false, false}, + { displayTimeGradient, "Time Gradient", true, true, true, false, false}, + { displayTimeGradientLarge, "Time Gradient large", true, true, true, false, false}, + { displayTimeRainbow, "Time Rainbow", true, true, true, false, false}, +#endif -#if DEVICE_TYPE == 3 - { pride_Waves, "Pride Waves" }, - { pride_Rings, "Pride Rings" }, - { colorWaves_hori, "Vertical Waves" }, - { colorWaves_vert, "Color Rings" }, - { rainbow_vert, "Vertical Rainbow" }, +#if DEVICE_TYPE == 3 // palet speed color spark twinkle + { pride_Waves, "Pride Waves", true, true, true, false, false}, + { pride_Rings, "Pride Rings", true, true, true, false, false}, + { colorWaves_hori, "Vertical Waves", true, true, true, false, false}, + { colorWaves_vert, "Color Rings", true, true, true, false, false}, + { rainbow_vert, "Vertical Rainbow", true, true, true, false, false}, #endif - // animation patterns - { pride, "Pride" }, - { colorWaves, "Color Waves" }, - { rainbow, "Horizontal Rainbow" }, - { rainbowSolid, "Solid Rainbow" }, - { confetti, "Confetti" }, - { sinelon, "Sinelon" }, - { bpm, "Beat" }, - { juggle, "Juggle" }, - { fire, "Fire" }, - { water, "Water" }, - { strobe, "Strobe"}, - { rainbow_strobe, "Rainbow Strobe"}, - { smooth_rainbow_strobe, "Smooth Rainbow Strobe"}, - - // DigitalJohnson patterns - { rainbowRoll, "Rainbow Roll" }, - { rainbowBeat, "Rainbow Beat" }, - { randomPaletteFades, "Palette Fades" }, - { rainbowChase, "Rainbow Chase" }, - { randomDots, "Rainbow Dots" }, - { randomFades, "Rainbow Fades" }, - { policeLights, "Police Lights" }, - { glitter, "Glitter" }, - { snowFlakes, "Snow Flakes" }, - { lightning, "Lightning"}, - - // twinkle patterns - { rainbowTwinkles, "Rainbow Twinkles" }, - { snowTwinkles, "Snow Twinkles" }, - { cloudTwinkles, "Cloud Twinkles" }, - { incandescentTwinkles, "Incandescent Twinkles" }, - - // TwinkleFOX patterns - { retroC9Twinkles, "Retro C9 Twinkles" }, - { redWhiteTwinkles, "Red & White Twinkles" }, - { blueWhiteTwinkles, "Blue & White Twinkles" }, - { redGreenWhiteTwinkles, "Red, Green & White Twinkles" }, - { fairyLightTwinkles, "Fairy Light Twinkles" }, - { snow2Twinkles, "Snow 2 Twinkles" }, - { hollyTwinkles, "Holly Twinkles" }, - { iceTwinkles, "Ice Twinkles" }, - { partyTwinkles, "Party Twinkles" }, - { forestTwinkles, "Forest Twinkles" }, - { lavaTwinkles, "Lava Twinkles" }, - { fireTwinkles, "Fire Twinkles" }, - { cloud2Twinkles, "Cloud 2 Twinkles" }, - { oceanTwinkles, "Ocean Twinkles" }, + // animation patterns // palet speed color spark twinkle + { pride, "Pride", false, false, false, false, false}, + { colorWaves, "Color Waves", false, false, false, false, false}, + { rainbow, "Horizontal Rainbow", false, false, false, false, false}, + { rainbowSolid, "Solid Rainbow", false, false, false, false, false}, + { confetti, "Confetti", false, false, false, false, false}, + { sinelon, "Sinelon", true, true, false, false, false}, + { bpm, "Beat", true, true, false, false, false}, + { juggle, "Juggle", false, false, false, false, false}, + { fire, "Fire", false, false, false, true, false}, + { water, "Water", false, false, false, true, false}, + { strobe, "Strobe", false, true, true, false, false}, + { rainbow_strobe, "Rainbow Strobe", false, true, false, false, false}, + { smooth_rainbow_strobe, "Smooth Rainbow Strobe", false, true, false, false, false}, + + // DigitalJohnson patterns // palet speed color spark twinkle + { rainbowRoll, "Rainbow Roll", false, false, false, false, false}, + { rainbowBeat, "Rainbow Beat", false, true, false, false, false}, + { randomPaletteFades, "Palette Fades", true, false, false, false, false}, + { rainbowChase, "Rainbow Chase", false, false, false, false, false}, + { randomDots, "Rainbow Dots", false, false, false, false, false}, + { randomFades, "Rainbow Fades", false, false, false, false, false}, + { policeLights, "Police Lights", false, false, false, false, false}, + { glitter, "Glitter", false, true, false, false, false}, + { snowFlakes, "Snow Flakes", false, false, false, false, false}, + { lightning, "Lightning", false, false, false, false, false}, + + // twinkle patterns // palet speed color spark twinkle + { rainbowTwinkles, "Rainbow Twinkles", false, false, false, false, false}, + { snowTwinkles, "Snow Twinkles", false, false, false, false, false}, + { cloudTwinkles, "Cloud Twinkles", false, false, false, false, false}, + { incandescentTwinkles, "Incandescent Twinkles", false, false, false, false, false}, + + // TwinkleFOX patterns // palet speed color spark twinkle + { retroC9Twinkles, "Retro C9 Twinkles", false, false, false, false, true}, + { redWhiteTwinkles, "Red & White Twinkles", false, false, false, false, true}, + { blueWhiteTwinkles, "Blue & White Twinkles", false, false, false, false, true}, + { redGreenWhiteTwinkles, "Red, Green & White Twinkles", false, false, false, false, true}, + { fairyLightTwinkles, "Fairy Light Twinkles", false, false, false, false, true}, + { snow2Twinkles, "Snow 2 Twinkles", false, false, false, false, true}, + { hollyTwinkles, "Holly Twinkles", false, false, false, false, true}, + { iceTwinkles, "Ice Twinkles", false, false, false, false, true}, + { partyTwinkles, "Party Twinkles", false, false, false, false, true}, + { forestTwinkles, "Forest Twinkles", false, false, false, false, true}, + { lavaTwinkles, "Lava Twinkles", false, false, false, false, true}, + { fireTwinkles, "Fire Twinkles", false, false, false, false, true}, + { cloud2Twinkles, "Cloud 2 Twinkles", false, false, false, false, true}, + { oceanTwinkles, "Ocean Twinkles", false, false, false, false, true}, #ifndef REMOVE_VISUALIZATION // Visualization Patterns -#if DEVICE_TYPE == 1 // Matrix - { RainbowVisualizer, "Rainbow Visualization"}, - { SingleColorVisualizer, "Single Color Visualization"}, - { RainbowVisualizerDoubleSided, "Rainbow Visualization Outside"}, - { SingleColorVisualizerDoubleSided, "Single Color Visualization Outside"}, +#if DEVICE_TYPE == 1 // Matrix // palet speed color spark twinkle + { RainbowVisualizer, "Rainbow Visualization", true, true, true, false, false}, + { SingleColorVisualizer, "Single Color Visualization", true, true, true, false, false}, + { RainbowVisualizerDoubleSided, "Rainbow Visualization Outside", true, true, true, false, false}, + { SingleColorVisualizerDoubleSided, "Single Color Visualization Outside" true, true, true, false, false}, #ifdef AddLogoVisualizers - #if LENGTH == 32 && HEIGHT == 8 // Logo Visualizers - { HbzVisualizerRainbow, "Hbz Visualizer Spectrum"}, - { HbzVisualizerWhite, "Hbz Visualizer"}, + #if LENGTH == 32 && HEIGHT == 8 // Logo Visualizers + { HbzVisualizerRainbow, "Hbz Visualizer Spectrum", true, true, true, false, false}, + { HbzVisualizerWhite, "Hbz Visualizer", true, true, true, false, false}, #endif #endif #endif - #ifdef DEVICE_TYPE // Generic Visualization Patterns - { vuMeterSolid, "Solid Volume Visualizer"}, - { vuMeterStaticRainbow, "Static Rainbow Volume Visualizer"}, - { vuMeterRainbow, "Flowing Rainbow Volume Visualizer"}, - { vuMeterTriColor, "Tri-Color Volume Visualizer"}, - { RefreshingVisualizer, "Wave Visualizer"}, - { CentralVisualizer, "Center Visualizer"}, - { SolidColorDualTone, "Solid-Color Pair Bullet Visualizer"}, - { SolidColorComplementary, "Solid-Color Complementary Bullet Visualizer"}, - { BluePurpleBullets, "Blue/Purple Bullet Visualizer"}, - { BulletVisualizer, "Beat-Bullet Visualization"}, - //{ RainbowPeaks, "Rainbow Peak Visualizer"}, // broken - { RainbowBassRings, "Bass Ring Visualizer"}, - { RainbowKickRings, "Kick Ring Visualizer"}, - //{ TrailingBulletsVisualizer, "Trailing Bullet Visualization"}, // obsolete - //{ BrightnessVisualizer, "Brightness Visualizer"}, // broken - { RainbowBandVisualizer, "Rainbow Band Visualizer"}, - { SingleColorBandVisualizer, "Single Color Band Visualizer"}, + #ifdef DEVICE_TYPE // Generic Visualization Patterns // palet speed color spark twinkle + { vuMeterSolid, "Solid Volume Visualizer", true, true, true, false, false}, + { vuMeterStaticRainbow, "Static Rainbow Volume Visualizer", true, true, true, false, false}, + { vuMeterRainbow, "Flowing Rainbow Volume Visualizer", true, true, true, false, false}, + { vuMeterTriColor, "Tri-Color Volume Visualizer", true, true, true, false, false}, + { RefreshingVisualizer, "Wave Visualizer", true, true, true, false, false}, + { CentralVisualizer, "Center Visualizer", true, true, true, false, false}, + { SolidColorDualTone, "Solid-Color Pair Bullet Visualizer", true, true, true, false, false}, + { SolidColorComplementary, "Solid-Color Complementary Bullet Visualizer", true, true, true, false, false}, + { BluePurpleBullets, "Blue/Purple Bullet Visualizer", true, true, true, false, false}, + { BulletVisualizer, "Beat-Bullet Visualization", true, true, true, false, false}, + //{ RainbowPeaks, "Rainbow Peak Visualizer"}, // broken + { RainbowBassRings, "Bass Ring Visualizer", true, true, true, false, false}, + { RainbowKickRings, "Kick Ring Visualizer", true, true, true, false, false}, + //{ TrailingBulletsVisualizer, "Trailing Bullet Visualization"}, // obsolete + //{ BrightnessVisualizer, "Brightness Visualizer"}, // broken + { RainbowBandVisualizer, "Rainbow Band Visualizer", true, true, true, false, false}, + { SingleColorBandVisualizer, "Single Color Band Visualizer", true, true, true, false, false}, #endif #endif -#if DEVICE_TYPE == 4 - { NanoleafWaves, "Nanoleaf Wave Visualizer" }, - { NanoleafBand, "Nanoleaf Rainbow Band Visualizer" }, - { NanoleafSingleBand, "Nanoleaf Solid Color Band Visualizer" }, +#if DEVICE_TYPE == 4 // palet speed color spark twinkle + { NanoleafWaves, "Nanoleaf Wave Visualizer", true, true, true, false, false}, + { NanoleafBand, "Nanoleaf Rainbow Band Visualizer", true, true, true, false, false}, + { NanoleafSingleBand, "Nanoleaf Solid Color Band Visualizer", true, true, true, false, false}, #endif - #ifdef ENABLE_SERIAL_AMBILIGHT - { ambilight, "⋆Serial Ambilight"}, + #ifdef ENABLE_SERIAL_AMBILIGHT // palet speed color spark twinkle + { ambilight, "⋆Serial Ambilight", true, true, true, false, false}, #endif // ENABLE_SERIAL_AMBILIGHT #ifdef SOUND_SENSOR_SUPPORT - { soundReactive, "Sound Reactive" }, + { soundReactive, "Sound Reactive", true, true, true, false, false}, #endif - { showSolidColor, "Solid Color" } + { showSolidColor, "Solid Color", false, false, true, false, false} };