Implemented power control

This commit is contained in:
2019-05-04 11:45:24 +02:00
committed by 0xFEEDC0DE64
parent dbfae0cdcc
commit 9e1d88db16
2 changed files with 59 additions and 11 deletions

View File

@@ -44,7 +44,11 @@ public:
void run() void run()
{ {
(*iter)->run(); (*iter)->run();
FastLED.show(); }
void poweroff()
{
fill_solid(&leds[0], NUM_LEDS, CRGB::Black);
} }
private: private:

View File

@@ -15,6 +15,7 @@ LedController ledController;
ESP8266WebServer server(80); ESP8266WebServer server(80);
bool power = true;
bool rotatePattern = true; bool rotatePattern = true;
void setup() void setup()
@@ -48,8 +49,10 @@ void setup()
"<div class=\"container\">" "<div class=\"container\">"
"<h1>Hello, world!</h1>" "<h1>Hello, world!</h1>"
"<p>" "<p>"
"<a href=\"nextPattern\" class=\"softLink\">Next pattern</a>" "<a href=\"setPower?val=true\" id=\"enablePower\" class=\"softLink\">Turn LEDs on</a> "
"<a href=\"setPatternRotate?val=true\" id=\"enableRotate\" class=\"softLink\">Enable automatic pattern rotate</a>" "<a href=\"setPower?val=false\" id=\"disablePower\" class=\"softLink\">Turn LEDs off</a> "
"<a href=\"nextPattern\" id=\"nextPattern\" class=\"softLink\">Next pattern</a> "
"<a href=\"setPatternRotate?val=true\" id=\"enableRotate\" class=\"softLink\">Enable automatic pattern rotate</a> "
"<a href=\"setPatternRotate?val=false\" id=\"disableRotate\" class=\"softLink\">Disable automatic pattern rotate</a>" "<a href=\"setPatternRotate?val=false\" id=\"disableRotate\" class=\"softLink\">Disable automatic pattern rotate</a>"
"</p>" "</p>"
@@ -87,13 +90,21 @@ void setup()
"xhr.onload = function() {" "xhr.onload = function() {"
"var parsed = JSON.parse(xhr.responseText);" "var parsed = JSON.parse(xhr.responseText);"
"if (parsed.autoRotate) {" "function setHidden(element, hidden) {"
"$('#enableRotate').addClass('hidden');" "if (hidden) {"
"$('#disableRotate').removeClass('hidden');" "element.addClass('hidden');"
"} else {" "} else {"
"$('#enableRotate').removeClass('hidden');" "element.removeClass('hidden');"
"$('#disableRotate').addClass('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');" "var select = $('#patternSelect');"
"select.empty();" "select.empty();"
@@ -145,6 +156,10 @@ void setup()
} }
str += "],"; str += "],";
str += "\"power\":";
str += power ? "true" : "false";
str += ",";
str += "\"autoRotate\":"; str += "\"autoRotate\":";
str += rotatePattern ? "true" : "false"; str += rotatePattern ? "true" : "false";
str += ","; str += ",";
@@ -189,6 +204,31 @@ void setup()
server.send(200, "text/html", "ok"); 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, []() server.on("/setPatternRotate", HTTP_GET, []()
{ {
const String *val = nullptr; const String *val = nullptr;
@@ -247,10 +287,14 @@ void loop()
{ {
EVERY_N_MILLISECONDS(20) EVERY_N_MILLISECONDS(20)
{ {
if (power)
ledController.run(); ledController.run();
else
ledController.poweroff();
FastLED.show();
} }
if (rotatePattern) if (power && rotatePattern)
{ {
EVERY_N_SECONDS(10) EVERY_N_SECONDS(10)
{ {