diff --git a/src/ledcontroller.h b/src/ledcontroller.h index 2c9f18d..a62a062 100644 --- a/src/ledcontroller.h +++ b/src/ledcontroller.h @@ -44,7 +44,11 @@ public: void run() { (*iter)->run(); - FastLED.show(); + } + + void poweroff() + { + fill_solid(&leds[0], NUM_LEDS, CRGB::Black); } private: diff --git a/src/main.cpp b/src/main.cpp index 7a46a75..78b60c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,7 @@ LedController ledController; ESP8266WebServer server(80); +bool power = true; bool rotatePattern = true; void setup() @@ -48,8 +49,10 @@ void setup() "
" - "Next pattern" - "Enable automatic pattern rotate" + "Turn LEDs on " + "Turn LEDs off " + "Next pattern " + "Enable automatic pattern rotate " "Disable automatic pattern rotate" "
" @@ -87,14 +90,22 @@ void setup() "xhr.onload = function() {" "var parsed = JSON.parse(xhr.responseText);" - "if (parsed.autoRotate) {" - "$('#enableRotate').addClass('hidden');" - "$('#disableRotate').removeClass('hidden');" - "} else {" - "$('#enableRotate').removeClass('hidden');" - "$('#disableRotate').addClass('hidden');" + "function setHidden(element, hidden) {" + "if (hidden) {" + "element.addClass('hidden');" + "} else {" + "element.removeClass('hidden');" + "}" "}" + "setHidden($('#enablePower'), parsed.power);" + "setHidden($('#disablePower'), !parsed.power);" + "setHidden($('#nextPattern'), !parsed.power);" + "setHidden($('#enableRotate'), !parsed.power || parsed.autoRotate);" + "setHidden($('#disableRotate'), !parsed.power || !parsed.autoRotate);" + "setHidden($('#patternSelect'), !parsed.power);" + "setHidden($('#brightness'), !parsed.power);" + "var select = $('#patternSelect');" "select.empty();" "select.attr('size', parsed.patterns.length);" @@ -145,6 +156,10 @@ void setup() } str += "],"; + str += "\"power\":"; + str += power ? "true" : "false"; + str += ","; + str += "\"autoRotate\":"; str += rotatePattern ? "true" : "false"; str += ","; @@ -189,6 +204,31 @@ void setup() server.send(200, "text/html", "ok"); }); + server.on("/setPower", HTTP_GET, []() + { + const String *val = nullptr; + + for (int i = 0; i < server.args(); i++) + if (server.argName(i) == "val") + val = &server.arg(i); + + if (!val) + { + server.send(400, "text/html", "val missing"); + return; + } + + if (*val != "true" && *val != "false") + { + server.send(400, "text/html", "invalid val"); + return; + } + + power = *val == "true"; + + server.send(200, "text/html", "ok"); + }); + server.on("/setPatternRotate", HTTP_GET, []() { const String *val = nullptr; @@ -247,10 +287,14 @@ void loop() { EVERY_N_MILLISECONDS(20) { - ledController.run(); + if (power) + ledController.run(); + else + ledController.poweroff(); + FastLED.show(); } - if (rotatePattern) + if (power && rotatePattern) { EVERY_N_SECONDS(10) {