diff --git a/wled00/wled00.ino b/wled00/wled00.ino index af614044..8ba7701c 100644 --- a/wled00/wled00.ino +++ b/wled00/wled00.ino @@ -42,14 +42,14 @@ uint8_t bri_n = 100; uint8_t nightlightDelayMins = 60; boolean nightlightFade = true; -double transitionResolution = 0.05; +double transitionResolution = 0.01; //Internal vars byte col_old[]{0, 0, 0}; byte col_t[]{0, 0, 0}; long transitionStartTime; long nightlightStartTime; -float tper_last; +float tper_last = 0; byte bri = 127; byte bri_old = 0; byte bri_t = 0; @@ -84,659 +84,12 @@ void reset() ESP.reset(); } -void clearEEPROM() -{ - for (int i = 0; i < 256; i++) - { - EEPROM.write(i, 0); - } - EEPROM.commit(); -} - -void saveSettingsToEEPROM() -{ - if (EEPROM.read(233) != 233) //set no first boot flag - { - clearEEPROM(); - EEPROM.write(233, 233); - } - for (int i = 0; i < 32; ++i) - { - EEPROM.write(i, clientssid.charAt(i)); - } - for (int i = 32; i < 96; ++i) - { - EEPROM.write(i, clientpass.charAt(i-32)); - } - for (int i = 96; i < 128; ++i) - { - EEPROM.write(i, cmdns.charAt(i-96)); - } - for (int i = 128; i < 160; ++i) - { - EEPROM.write(i, apssid.charAt(i-128)); - } - for (int i = 160; i < 224; ++i) - { - EEPROM.write(i, appass.charAt(i-160)); - } - EEPROM.write(228, aphide); - EEPROM.write(227, apchannel); - EEPROM.write(229, led_amount); - EEPROM.write(232, buttonEnabled); - EEPROM.write(234, staticip[0]); - EEPROM.write(235, staticip[1]); - EEPROM.write(236, staticip[2]); - EEPROM.write(237, staticip[3]); - EEPROM.write(238, staticgateway[0]); - EEPROM.write(239, staticgateway[1]); - EEPROM.write(240, staticgateway[2]); - EEPROM.write(241, staticgateway[3]); - EEPROM.write(242, staticsubnet[0]); - EEPROM.write(243, staticsubnet[1]); - EEPROM.write(244, staticsubnet[2]); - EEPROM.write(245, staticsubnet[3]); - EEPROM.write(246, col[0]); - EEPROM.write(247, col[1]); - EEPROM.write(248, col[2]); - EEPROM.write(249, bri); - EEPROM.write(251, fadeTransition); - EEPROM.write(253, (transitionDelay >> 0) & 0xFF); - EEPROM.write(254, (transitionDelay >> 8) & 0xFF); - EEPROM.commit(); -} - -void loadSettingsFromEEPROM() -{ - if (EEPROM.read(233) != 233) //first boot/reset to default - { - saveSettingsToEEPROM(); - return; - } - clientssid = ""; - for (int i = 0; i < 32; ++i) - { - if (EEPROM.read(i) == 0) break; - clientssid += char(EEPROM.read(i)); - } - clientpass = ""; - for (int i = 32; i < 96; ++i) - { - if (EEPROM.read(i) == 0) break; - clientpass += char(EEPROM.read(i)); - } - cmdns = ""; - for (int i = 96; i < 128; ++i) - { - if (EEPROM.read(i) == 0) break; - cmdns += char(EEPROM.read(i)); - } - apssid = ""; - for (int i = 128; i < 160; ++i) - { - if (EEPROM.read(i) == 0) break; - apssid += char(EEPROM.read(i)); - } - appass = ""; - for (int i = 160; i < 224; ++i) - { - if (EEPROM.read(i) == 0) break; - appass += char(EEPROM.read(i)); - } - aphide = EEPROM.read(228); - if (aphide > 1) aphide = 1; - apchannel = EEPROM.read(227); - if (apchannel > 13 || apchannel < 1) apchannel = 1; - led_amount = EEPROM.read(229); - buttonEnabled = EEPROM.read(232); - staticip[0] = EEPROM.read(234); - staticip[1] = EEPROM.read(235); - staticip[2] = EEPROM.read(236); - staticip[3] = EEPROM.read(237); - staticgateway[0] = EEPROM.read(238); - staticgateway[1] = EEPROM.read(239); - staticgateway[2] = EEPROM.read(240); - staticgateway[3] = EEPROM.read(241); - staticsubnet[0] = EEPROM.read(242); - staticsubnet[1] = EEPROM.read(243); - staticsubnet[2] = EEPROM.read(244); - staticsubnet[3] = EEPROM.read(245); - col[0] = EEPROM.read(246); - col[1] = EEPROM.read(247); - col[2] = EEPROM.read(248); - bri = EEPROM.read(249); - fadeTransition = EEPROM.read(251); - transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00); -} - uint8_t bool2int(boolean value) { if (value) return 1; return 0; } -void XML_response() -{ - String resp; - resp = resp + ""; - resp = resp + ""; - resp = resp + ""; - resp = resp + bri; - resp = resp + ""; - - for (int i = 0; i < 3; i++) - { - resp = resp + ""; - resp = resp + col[i]; - resp = resp + ""; - } - //enable toolbar here - resp = resp + ""; - server.send(200, "text/xml", resp); -} - -void XML_response_settings() -{ - Serial.println("XML settings response"); - String resp; - resp = resp + ""; - resp = resp + ""; - resp = resp + ""; - resp = resp + clientssid; - resp = resp + ""; - resp = resp + ""; - for (int i = 0; i < clientpass.length(); i++) - { - resp = resp + "*"; - } - resp = resp + ""; - for (int i = 0; i < 4; i++) - { - resp = resp + ""; - resp = resp + staticip[i]; - resp = resp + ""; - } - for (int i = 0; i < 4; i++) - { - resp = resp + ""; - resp = resp + staticgateway[i]; - resp = resp + ""; - } - for (int i = 0; i < 4; i++) - { - resp = resp + ""; - resp = resp + staticsubnet[i]; - resp = resp + ""; - } - resp = resp + ""; - resp = resp + cmdns; - resp = resp + ""; - resp = resp + ""; - resp = resp + apssid; - resp = resp + ""; - resp = resp + ""; - resp = resp + aphide; - resp = resp + ""; - resp = resp + ""; - for (int i = 0; i < appass.length(); i++) - { - resp = resp + "*"; - } - resp = resp + ""; - resp = resp + ""; - resp = resp + apchannel; - resp = resp + ""; - resp = resp + ""; - resp = resp + led_amount; - resp = resp + ""; - resp = resp + ""; - resp = resp + bool2int(buttonEnabled); - resp = resp + ""; - resp = resp + bool2int(fadeTransition); - resp = resp + ""; - resp = resp + transitionDelay; - resp = resp + ""; - resp = resp + ""; - resp = resp + bool2int(receiveNotifications); - resp = resp + ""; - resp = resp + bri_n; - resp = resp + ""; - resp = resp + bool2int(notifyDirect); - resp = resp + ""; - resp = resp + bool2int(notifyButton); - resp = resp + ""; - resp = resp + bool2int(notifyForward); - resp = resp + ""; - for (int i = 0; i < notifier_ips_count; i++) - { - resp = resp + notifier_ips[i]; - resp = resp + "\n"; - } - resp = resp + ""; - resp = resp + "0"; //NI - resp = resp + "0"; //NI - resp = resp + ""; - if (!WiFi.localIP()[0] == 0) - { - resp = resp + WiFi.localIP()[0]; - resp = resp + "."; - resp = resp + WiFi.localIP()[1]; - resp = resp + "."; - resp = resp + WiFi.localIP()[2]; - resp = resp + "."; - resp = resp + WiFi.localIP()[3]; - } else - { - resp = resp + "Not connected"; - } - resp = resp + ""; - if (!WiFi.softAPIP()[0] == 0) - { - resp = resp + WiFi.softAPIP()[0]; - resp = resp + "."; - resp = resp + WiFi.softAPIP()[1]; - resp = resp + "."; - resp = resp + WiFi.softAPIP()[2]; - resp = resp + "."; - resp = resp + WiFi.softAPIP()[3]; - } else - { - resp = resp + "Not active"; - } - resp = resp + "Not implemented"; - resp = resp + "WLED 0.3pd OK"; - resp = resp + ""; - Serial.println(resp); - server.send(200, "text/xml", resp); -} - -void handleSettingsSet() -{ - if (server.hasArg("CSSID")) clientssid = server.arg("CSSID"); - if (server.hasArg("CPASS")) - { - if (!server.arg("CPASS").indexOf('*') == 0) - { - Serial.println("Setting pass"); - clientpass = server.arg("CPASS"); - } - } - if (server.hasArg("CMDNS")) cmdns = server.arg("CMDNS"); - if (server.hasArg("APSSID")) apssid = server.arg("APSSID"); - if (server.hasArg("APHSSID")) - { - aphide = 1; - } else - { - aphide = 0; - } - if (server.hasArg("APPASS")) - { - if (!server.arg("APPASS").indexOf('*') == 0) appass = server.arg("APPASS"); - } - if (server.hasArg("APCHAN")) - { - int chan = server.arg("APCHAN").toInt(); - if (chan > 0 && chan < 14) apchannel = chan; - } - if (server.hasArg("RESET")) //might be dangerous in case arg is always sent - { - clearEEPROM(); - server.send(200, "text/plain", "Settings erased. Please wait for light to turn back on, then go to main page..."); - reset(); - } - if (server.hasArg("CSIP0")) - { - int i = server.arg("CSIP0").toInt(); - if (i >= 0 && i <= 255) staticip[0] = i; - } - if (server.hasArg("CSIP1")) - { - int i = server.arg("CSIP1").toInt(); - if (i >= 0 && i <= 255) staticip[1] = i; - } - if (server.hasArg("CSIP2")) - { - int i = server.arg("CSIP2").toInt(); - if (i >= 0 && i <= 255) staticip[2] = i; - } - if (server.hasArg("CSIP3")) - { - int i = server.arg("CSIP3").toInt(); - if (i >= 0 && i <= 255) staticip[3] = i; - } - if (server.hasArg("CSGW0")) - { - int i = server.arg("CSGW0").toInt(); - if (i >= 0 && i <= 255) staticgateway[0] = i; - } - if (server.hasArg("CSGW1")) - { - int i = server.arg("CSGW1").toInt(); - if (i >= 0 && i <= 255) staticgateway[1] = i; - } - if (server.hasArg("CSGW2")) - { - int i = server.arg("CSGW2").toInt(); - if (i >= 0 && i <= 255) staticgateway[2] = i; - } - if (server.hasArg("CSGW3")) - { - int i = server.arg("CSGW3").toInt(); - if (i >= 0 && i <= 255) staticgateway[3] = i; - } - if (server.hasArg("CSSN0")) - { - int i = server.arg("CSSN0").toInt(); - if (i >= 0 && i <= 255) staticsubnet[0] = i; - } - if (server.hasArg("CSSN1")) - { - int i = server.arg("CSSN1").toInt(); - if (i >= 0 && i <= 255) staticsubnet[1] = i; - } - if (server.hasArg("CSSN2")) - { - int i = server.arg("CSSN2").toInt(); - if (i >= 0 && i <= 255) staticsubnet[2] = i; - } - if (server.hasArg("CSSN3")) - { - int i = server.arg("CSSN3").toInt(); - if (i >= 0 && i <= 255) staticsubnet[3] = i; - } - if (server.hasArg("LEDS")) - { - int i = server.arg("LEDS").toInt(); - if (i > 0) led_amount = i; - } - buttonEnabled = server.hasArg("BTNON"); - fadeTransition = server.hasArg("TFADE"); - if (server.hasArg("TDLAY")) - { - int i = server.arg("TDLAY").toInt(); - if (i > 0) transitionDelay = i; - } - receiveNotifications = server.hasArg("NRCVE"); - if (server.hasArg("NRBRI")) - { - int i = server.arg("NRBRI").toInt(); - if (i > 0) bri_n = i; - } - notifyDirect = server.hasArg("NSDIR"); - notifyButton = server.hasArg("NSBTN"); - notifyForward = server.hasArg("NSFWD"); - if (server.hasArg("NSIPS")) - { - notifier_ips_raw = server.arg("NSIPS"); - } - saveSettingsToEEPROM(); -} - -boolean handleSet(String req) -{ - if (!(req.indexOf("ajax_in") >= 0)) { - if (req.indexOf("get-settings") >= 0) - { - XML_response_settings(); - return true; - } - return false; - } - int pos = 0; - boolean isNotification = false; - if (req.indexOf("N=") > 0) isNotification = true; - pos = req.indexOf("A="); - if (pos > 0) { - bri = req.substring(pos + 2).toInt(); - } - pos = req.indexOf("R="); - if (pos > 0) { - col[0] = req.substring(pos + 2).toInt(); - } - pos = req.indexOf("G="); - if (pos > 0) { - col[1] = req.substring(pos + 2).toInt(); - } - pos = req.indexOf("B="); - if (pos > 0) { - col[2] = req.substring(pos + 2).toInt(); - } - if (req.indexOf("NL=") > 0) - { - if (req.indexOf("NL=0") > 0) - { - nightlightActive = false; - } else { - nightlightActive = true; - nightlightStartTime = millis(); - } - } - if (isNotification) - { - if (receiveNotifications) - { - colorUpdated(3); - server.send(200, "text/plain", ""); - return true; - } - server.send(202, "text/plain", ""); - return true; - } - XML_response(); - colorUpdated(1); - return true; -} - -String formatBytes(size_t bytes){ - if (bytes < 1024){ - return String(bytes)+"B"; - } else if(bytes < (1024 * 1024)){ - return String(bytes/1024.0)+"KB"; - } else if(bytes < (1024 * 1024 * 1024)){ - return String(bytes/1024.0/1024.0)+"MB"; - } else { - return String(bytes/1024.0/1024.0/1024.0)+"GB"; - } -} - -String getContentType(String filename){ - if(server.hasArg("download")) return "application/octet-stream"; - else if(filename.endsWith(".htm")) return "text/html"; - else if(filename.endsWith(".html")) return "text/html"; - else if(filename.endsWith(".css")) return "text/css"; - else if(filename.endsWith(".js")) return "application/javascript"; - else if(filename.endsWith(".png")) return "image/png"; - else if(filename.endsWith(".gif")) return "image/gif"; - else if(filename.endsWith(".jpg")) return "image/jpeg"; - else if(filename.endsWith(".ico")) return "image/x-icon"; - else if(filename.endsWith(".xml")) return "text/xml"; - else if(filename.endsWith(".pdf")) return "application/x-pdf"; - else if(filename.endsWith(".zip")) return "application/x-zip"; - else if(filename.endsWith(".gz")) return "application/x-gzip"; - return "text/plain"; -} - -bool handleFileRead(String path){ - Serial.println("handleFileRead: " + path); - if(path.endsWith("/")) path += "index.htm"; - String contentType = getContentType(path); - String pathWithGz = path + ".gz"; - if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){ - if(SPIFFS.exists(pathWithGz)) - path += ".gz"; - File file = SPIFFS.open(path, "r"); - size_t sent = server.streamFile(file, contentType); - file.close(); - return true; - } - return false; -} - -void handleFileUpload(){ - if(server.uri() != "/edit") return; - HTTPUpload& upload = server.upload(); - if(upload.status == UPLOAD_FILE_START){ - String filename = upload.filename; - if(!filename.startsWith("/")) filename = "/"+filename; - Serial.print("handleFileUpload Name: "); Serial.println(filename); - fsUploadFile = SPIFFS.open(filename, "w"); - filename = String(); - } else if(upload.status == UPLOAD_FILE_WRITE){ - //Serial.print("handleFileUpload Data: "); Serial.println(upload.currentSize); - if(fsUploadFile) - fsUploadFile.write(upload.buf, upload.currentSize); - } else if(upload.status == UPLOAD_FILE_END){ - if(fsUploadFile) - fsUploadFile.close(); - Serial.print("handleFileUpload Size: "); Serial.println(upload.totalSize); - } -} - -void handleFileDelete(){ - if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS"); - String path = server.arg(0); - Serial.println("handleFileDelete: " + path); - if(path == "/") - return server.send(500, "text/plain", "BAD PATH"); - if(!SPIFFS.exists(path)) - return server.send(404, "text/plain", "FileNotFound"); - SPIFFS.remove(path); - server.send(200, "text/plain", ""); - path = String(); -} - -void handleFileCreate(){ - if(server.args() == 0) - return server.send(500, "text/plain", "BAD ARGS"); - String path = server.arg(0); - Serial.println("handleFileCreate: " + path); - if(path == "/") - return server.send(500, "text/plain", "BAD PATH"); - if(SPIFFS.exists(path)) - return server.send(500, "text/plain", "FILE EXISTS"); - File file = SPIFFS.open(path, "w"); - if(file) - file.close(); - else - return server.send(500, "text/plain", "CREATE FAILED"); - server.send(200, "text/plain", ""); - path = String(); -} - -void notify(int callMode) -{ - switch (callMode) - { - case 1: if (!notifyDirect) return; break; - case 2: if (!notifyButton) return; break; - case 3: if (!notifyForward) return; break; - default: return; - } - String snd = "/ajax_in&N=1&A="; - snd = snd + bri; - snd = snd + "&R="; - snd = snd + col[0]; - snd = snd + "&G="; - snd = snd + col[1]; - snd = snd + "&B="; - snd = snd + col[2]; - - HTTPClient hclient; - - for (int i = 0; i < notifier_ips_count; i++) - { - String url = "http://"; - url = url + notifier_ips[i]; - url = url + snd; - - hclient.begin(url); - hclient.GET(); - hclient.end(); - } -} - -void setAllLeds() { - double d = bri_t; - double val = d /256; - int r = col_t[0]*val; - int g = col_t[1]*val; - int b = col_t[2]*val; - for (int i=0; i < led_amount; i++) { - strip.SetPixelColor(i, RgbColor(r, g, b)); - } - strip.Show(); -} - -void setLedsStandard() -{ - col_old[0] = col[0]; - col_old[1] = col[1]; - col_old[2] = col[2]; - bri_old = bri; - col_t[0] = col[0]; - col_t[1] = col[1]; - col_t[2] = col[2]; - bri_t = bri; - setAllLeds(); -} - -void colorUpdated(int callMode) -{ - //call for notifier -> 0: init 1: direct change 2: button 3: notification - if (col[0] == col_old[0] && col[1] == col_old[1] && col[2] == col_old[2] && bri == bri_old) - { - return; //no change - } - if (bri > 0) bri_last = bri; - notify(callMode); - if (fadeTransition || seqTransition) - { - if (transitionActive) - { - col_old[0] = col_t[0]; - col_old[1] = col_t[1]; - col_old[2] = col_t[2]; - bri_old = bri_t; - } - transitionActive = true; - transitionStartTime = millis(); - } else - { - setLedsStandard(); - } -} - -void handleTransitions() -{ - if (transitionActive && transitionDelay > 0) - { - float tper = (millis() - transitionStartTime)/(float)transitionDelay; - if (tper >= 1.0) - { - transitionActive = false; - setLedsStandard(); - return; - } - if (tper - tper_last < transitionResolution) - { - return; - } - tper_last = tper; - if (fadeTransition) - { - col_t[0] = col_old[0]+((col[0] - col_old[0])*tper); - col_t[1] = col_old[1]+((col[1] - col_old[1])*tper); - col_t[2] = col_old[2]+((col[2] - col_old[2])*tper); - bri_t = bri_old+((bri - bri_old)*tper); - } - if (seqTransition) - { - - } else setAllLeds(); - } -} - void handleNightlight() { if (nightlightActive) @@ -749,145 +102,8 @@ void handleNightlight() } } -void handleAnimations(){}; - -void handleButton() -{ - if (buttonEnabled) - { - if (digitalRead(buttonPin) == LOW && !buttonPressedBefore) - { - buttonPressedBefore = true; - if (bri == 0) - { - bri = bri_last; - } else - { - bri_last = bri; - bri = 0; - } - colorUpdated(2); - } - else if (digitalRead(buttonPin) == HIGH && buttonPressedBefore) - { - delay(15); - if (digitalRead(buttonPin) == HIGH) - { - buttonPressedBefore = false; - } - } - } -} - void setup() { - Serial.begin(115200); - Serial.println(); - - for(uint8_t t = 4; t > 0; t--) { - Serial.printf("[SETUP] BOOT WAIT %d...\n", t); - Serial.flush(); - delay(1000); - } - - SPIFFS.begin(); - { - Dir dir = SPIFFS.openDir("/"); - while (dir.next()) { - String fileName = dir.fileName(); - size_t fileSize = dir.fileSize(); - Serial.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str()); - } - Serial.printf("\n"); - } - Serial.println("Init EEPROM"); - EEPROM.begin(256); - loadSettingsFromEEPROM(); - - Serial.print("CC: SSID: "); - Serial.print(clientssid); - - WiFi.disconnect(); //close old connections - - if (staticip[0] != 0) - { - WiFi.config(staticip, staticgateway, staticsubnet); - } else - { - WiFi.config(0U, 0U, 0U); - } - - if (apssid.length()>0) - { - Serial.print("USING AP"); - Serial.println(apssid.length()); - initAP(); - } else - { - Serial.println("NO AP"); - WiFi.softAPdisconnect(true); - } - - initCon(); - - Serial.println(""); - Serial.print("Connected! IP address: "); - Serial.println(WiFi.localIP()); - - // Set up mDNS responder: - if (cmdns != NULL && !only_ap && !MDNS.begin(cmdns.c_str())) { - Serial.println("Error setting up MDNS responder!"); - down(); - } - Serial.println("mDNS responder started"); - - //SERVER INIT - //settings page - server.on("/settings", HTTP_GET, [](){ - if(!handleFileRead("/settings.htm")) server.send(404, "text/plain", "FileNotFound"); - }); - server.on("/button.png", HTTP_GET, [](){ - if(!handleFileRead("/button.png")) server.send(404, "text/plain", "FileNotFound"); - }); - server.on("/favicon.ico", HTTP_GET, [](){ - if(!handleFileRead("/favicon.ico")) server.send(404, "text/plain", "FileNotFound"); - }); - server.on("/", HTTP_GET, [](){ - if(!handleFileRead("/index.htm")) server.send(404, "text/plain", "FileNotFound"); - }); - server.on("/reset", HTTP_GET, reset); - server.on("/set-settings", HTTP_POST, [](){ - handleSettingsSet(); - server.send(200, "text/plain", "Settings saved. Please wait for light to turn back on, then go to main page..."); - reset(); - }); - if (!ota_lock){ - server.on("/edit", HTTP_GET, [](){ - if(!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound"); - }); - server.on("/edit", HTTP_PUT, handleFileCreate); - server.on("/edit", HTTP_DELETE, handleFileDelete); - server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload); - server.on("/down", HTTP_GET, down); - server.on("/cleareeprom", HTTP_GET, clearEEPROM); - //init ota page - httpUpdater.setup(&server); - } - //called when the url is not defined here, ajax-in; get-settings - server.onNotFound([](){ - if(!handleSet(server.uri())){ - server.send(404, "text/plain", "FileNotFound"); - } - }); - - server.begin(); - Serial.println("HTTP server started"); - - // Add service to MDNS - MDNS.addService("http", "tcp", 80); - // Initialize NeoPixel Strip - strip.Begin(); - colorUpdated(0); - pinMode(buttonPin, INPUT_PULLUP); + wledInit(); } void loop() { @@ -898,31 +114,4 @@ void loop() { handleButton(); } -void initAP(){ - WiFi.softAP(apssid.c_str(), appass.c_str(), apchannel, aphide); -} - -void initCon() -{ - int fail_count = 0; - if (clientssid.length() <1) fail_count = 33; - WiFi.begin(clientssid.c_str(), clientpass.c_str()); - while(WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.println("C_NC"); - fail_count++; - if (fail_count > 32) - { - WiFi.disconnect(); - Serial.println("Can't connect to network. Opening AP..."); - String save = apssid; - only_ap = true; - if (apssid.length() <1) apssid = "WLED-AP"; - initAP(); - apssid = save; - return; - } - } -} - diff --git a/wled00/wled01_eeprom.ino b/wled00/wled01_eeprom.ino new file mode 100644 index 00000000..ff40e5ca --- /dev/null +++ b/wled00/wled01_eeprom.ino @@ -0,0 +1,124 @@ +void clearEEPROM() +{ + for (int i = 0; i < 256; i++) + { + EEPROM.write(i, 0); + } + EEPROM.commit(); +} + +void saveSettingsToEEPROM() +{ + if (EEPROM.read(233) != 233) //set no first boot flag + { + clearEEPROM(); + EEPROM.write(233, 233); + } + for (int i = 0; i < 32; ++i) + { + EEPROM.write(i, clientssid.charAt(i)); + } + for (int i = 32; i < 96; ++i) + { + EEPROM.write(i, clientpass.charAt(i-32)); + } + for (int i = 96; i < 128; ++i) + { + EEPROM.write(i, cmdns.charAt(i-96)); + } + for (int i = 128; i < 160; ++i) + { + EEPROM.write(i, apssid.charAt(i-128)); + } + for (int i = 160; i < 224; ++i) + { + EEPROM.write(i, appass.charAt(i-160)); + } + EEPROM.write(228, aphide); + EEPROM.write(227, apchannel); + EEPROM.write(229, led_amount); + EEPROM.write(232, buttonEnabled); + EEPROM.write(234, staticip[0]); + EEPROM.write(235, staticip[1]); + EEPROM.write(236, staticip[2]); + EEPROM.write(237, staticip[3]); + EEPROM.write(238, staticgateway[0]); + EEPROM.write(239, staticgateway[1]); + EEPROM.write(240, staticgateway[2]); + EEPROM.write(241, staticgateway[3]); + EEPROM.write(242, staticsubnet[0]); + EEPROM.write(243, staticsubnet[1]); + EEPROM.write(244, staticsubnet[2]); + EEPROM.write(245, staticsubnet[3]); + EEPROM.write(246, col[0]); + EEPROM.write(247, col[1]); + EEPROM.write(248, col[2]); + EEPROM.write(249, bri); + EEPROM.write(251, fadeTransition); + EEPROM.write(253, (transitionDelay >> 0) & 0xFF); + EEPROM.write(254, (transitionDelay >> 8) & 0xFF); + EEPROM.commit(); +} + +void loadSettingsFromEEPROM() +{ + if (EEPROM.read(233) != 233) //first boot/reset to default + { + saveSettingsToEEPROM(); + return; + } + clientssid = ""; + for (int i = 0; i < 32; ++i) + { + if (EEPROM.read(i) == 0) break; + clientssid += char(EEPROM.read(i)); + } + clientpass = ""; + for (int i = 32; i < 96; ++i) + { + if (EEPROM.read(i) == 0) break; + clientpass += char(EEPROM.read(i)); + } + cmdns = ""; + for (int i = 96; i < 128; ++i) + { + if (EEPROM.read(i) == 0) break; + cmdns += char(EEPROM.read(i)); + } + apssid = ""; + for (int i = 128; i < 160; ++i) + { + if (EEPROM.read(i) == 0) break; + apssid += char(EEPROM.read(i)); + } + appass = ""; + for (int i = 160; i < 224; ++i) + { + if (EEPROM.read(i) == 0) break; + appass += char(EEPROM.read(i)); + } + aphide = EEPROM.read(228); + if (aphide > 1) aphide = 1; + apchannel = EEPROM.read(227); + if (apchannel > 13 || apchannel < 1) apchannel = 1; + led_amount = EEPROM.read(229); + buttonEnabled = EEPROM.read(232); + staticip[0] = EEPROM.read(234); + staticip[1] = EEPROM.read(235); + staticip[2] = EEPROM.read(236); + staticip[3] = EEPROM.read(237); + staticgateway[0] = EEPROM.read(238); + staticgateway[1] = EEPROM.read(239); + staticgateway[2] = EEPROM.read(240); + staticgateway[3] = EEPROM.read(241); + staticsubnet[0] = EEPROM.read(242); + staticsubnet[1] = EEPROM.read(243); + staticsubnet[2] = EEPROM.read(244); + staticsubnet[3] = EEPROM.read(245); + col[0] = EEPROM.read(246); + col[1] = EEPROM.read(247); + col[2] = EEPROM.read(248); + bri = EEPROM.read(249); + fadeTransition = EEPROM.read(251); + transitionDelay = ((EEPROM.read(253) << 0) & 0xFF) + ((EEPROM.read(254) << 8) & 0xFF00); +} diff --git a/wled00/wled02_xml.ino b/wled00/wled02_xml.ino new file mode 100644 index 00000000..086a6c21 --- /dev/null +++ b/wled00/wled02_xml.ino @@ -0,0 +1,134 @@ +void XML_response() +{ + String resp; + resp = resp + ""; + resp = resp + ""; + resp = resp + ""; + resp = resp + bri; + resp = resp + ""; + + for (int i = 0; i < 3; i++) + { + resp = resp + ""; + resp = resp + col[i]; + resp = resp + ""; + } + //enable toolbar here + resp = resp + ""; + server.send(200, "text/xml", resp); +} + +void XML_response_settings() +{ + Serial.println("XML settings response"); + String resp; + resp = resp + ""; + resp = resp + ""; + resp = resp + ""; + resp = resp + clientssid; + resp = resp + ""; + resp = resp + ""; + for (int i = 0; i < clientpass.length(); i++) + { + resp = resp + "*"; + } + resp = resp + ""; + for (int i = 0; i < 4; i++) + { + resp = resp + ""; + resp = resp + staticip[i]; + resp = resp + ""; + } + for (int i = 0; i < 4; i++) + { + resp = resp + ""; + resp = resp + staticgateway[i]; + resp = resp + ""; + } + for (int i = 0; i < 4; i++) + { + resp = resp + ""; + resp = resp + staticsubnet[i]; + resp = resp + ""; + } + resp = resp + ""; + resp = resp + cmdns; + resp = resp + ""; + resp = resp + ""; + resp = resp + apssid; + resp = resp + ""; + resp = resp + ""; + resp = resp + aphide; + resp = resp + ""; + resp = resp + ""; + for (int i = 0; i < appass.length(); i++) + { + resp = resp + "*"; + } + resp = resp + ""; + resp = resp + ""; + resp = resp + apchannel; + resp = resp + ""; + resp = resp + ""; + resp = resp + led_amount; + resp = resp + ""; + resp = resp + ""; + resp = resp + bool2int(buttonEnabled); + resp = resp + ""; + resp = resp + bool2int(fadeTransition); + resp = resp + ""; + resp = resp + transitionDelay; + resp = resp + ""; + resp = resp + ""; + resp = resp + bool2int(receiveNotifications); + resp = resp + ""; + resp = resp + bri_n; + resp = resp + ""; + resp = resp + bool2int(notifyDirect); + resp = resp + ""; + resp = resp + bool2int(notifyButton); + resp = resp + ""; + resp = resp + bool2int(notifyForward); + resp = resp + ""; + for (int i = 0; i < notifier_ips_count; i++) + { + resp = resp + notifier_ips[i]; + resp = resp + "\n"; + } + resp = resp + ""; + resp = resp + "0"; //NI + resp = resp + "0"; //NI + resp = resp + ""; + if (!WiFi.localIP()[0] == 0) + { + resp = resp + WiFi.localIP()[0]; + resp = resp + "."; + resp = resp + WiFi.localIP()[1]; + resp = resp + "."; + resp = resp + WiFi.localIP()[2]; + resp = resp + "."; + resp = resp + WiFi.localIP()[3]; + } else + { + resp = resp + "Not connected"; + } + resp = resp + ""; + if (!WiFi.softAPIP()[0] == 0) + { + resp = resp + WiFi.softAPIP()[0]; + resp = resp + "."; + resp = resp + WiFi.softAPIP()[1]; + resp = resp + "."; + resp = resp + WiFi.softAPIP()[2]; + resp = resp + "."; + resp = resp + WiFi.softAPIP()[3]; + } else + { + resp = resp + "Not active"; + } + resp = resp + "Not implemented"; + resp = resp + "WLED 0.3pd OK"; + resp = resp + ""; + Serial.println(resp); + server.send(200, "text/xml", resp); +} diff --git a/wled00/wled03_set.ino b/wled00/wled03_set.ino new file mode 100644 index 00000000..daea976a --- /dev/null +++ b/wled00/wled03_set.ino @@ -0,0 +1,177 @@ +void handleSettingsSet() +{ + if (server.hasArg("CSSID")) clientssid = server.arg("CSSID"); + if (server.hasArg("CPASS")) + { + if (!server.arg("CPASS").indexOf('*') == 0) + { + Serial.println("Setting pass"); + clientpass = server.arg("CPASS"); + } + } + if (server.hasArg("CMDNS")) cmdns = server.arg("CMDNS"); + if (server.hasArg("APSSID")) apssid = server.arg("APSSID"); + if (server.hasArg("APHSSID")) + { + aphide = 1; + } else + { + aphide = 0; + } + if (server.hasArg("APPASS")) + { + if (!server.arg("APPASS").indexOf('*') == 0) appass = server.arg("APPASS"); + } + if (server.hasArg("APCHAN")) + { + int chan = server.arg("APCHAN").toInt(); + if (chan > 0 && chan < 14) apchannel = chan; + } + if (server.hasArg("RESET")) //might be dangerous in case arg is always sent + { + clearEEPROM(); + server.send(200, "text/plain", "Settings erased. Please wait for light to turn back on, then go to main page..."); + reset(); + } + if (server.hasArg("CSIP0")) + { + int i = server.arg("CSIP0").toInt(); + if (i >= 0 && i <= 255) staticip[0] = i; + } + if (server.hasArg("CSIP1")) + { + int i = server.arg("CSIP1").toInt(); + if (i >= 0 && i <= 255) staticip[1] = i; + } + if (server.hasArg("CSIP2")) + { + int i = server.arg("CSIP2").toInt(); + if (i >= 0 && i <= 255) staticip[2] = i; + } + if (server.hasArg("CSIP3")) + { + int i = server.arg("CSIP3").toInt(); + if (i >= 0 && i <= 255) staticip[3] = i; + } + if (server.hasArg("CSGW0")) + { + int i = server.arg("CSGW0").toInt(); + if (i >= 0 && i <= 255) staticgateway[0] = i; + } + if (server.hasArg("CSGW1")) + { + int i = server.arg("CSGW1").toInt(); + if (i >= 0 && i <= 255) staticgateway[1] = i; + } + if (server.hasArg("CSGW2")) + { + int i = server.arg("CSGW2").toInt(); + if (i >= 0 && i <= 255) staticgateway[2] = i; + } + if (server.hasArg("CSGW3")) + { + int i = server.arg("CSGW3").toInt(); + if (i >= 0 && i <= 255) staticgateway[3] = i; + } + if (server.hasArg("CSSN0")) + { + int i = server.arg("CSSN0").toInt(); + if (i >= 0 && i <= 255) staticsubnet[0] = i; + } + if (server.hasArg("CSSN1")) + { + int i = server.arg("CSSN1").toInt(); + if (i >= 0 && i <= 255) staticsubnet[1] = i; + } + if (server.hasArg("CSSN2")) + { + int i = server.arg("CSSN2").toInt(); + if (i >= 0 && i <= 255) staticsubnet[2] = i; + } + if (server.hasArg("CSSN3")) + { + int i = server.arg("CSSN3").toInt(); + if (i >= 0 && i <= 255) staticsubnet[3] = i; + } + if (server.hasArg("LEDS")) + { + int i = server.arg("LEDS").toInt(); + if (i > 0) led_amount = i; + } + buttonEnabled = server.hasArg("BTNON"); + fadeTransition = server.hasArg("TFADE"); + if (server.hasArg("TDLAY")) + { + int i = server.arg("TDLAY").toInt(); + if (i > 0) transitionDelay = i; + } + receiveNotifications = server.hasArg("NRCVE"); + if (server.hasArg("NRBRI")) + { + int i = server.arg("NRBRI").toInt(); + if (i > 0) bri_n = i; + } + notifyDirect = server.hasArg("NSDIR"); + notifyButton = server.hasArg("NSBTN"); + notifyForward = server.hasArg("NSFWD"); + if (server.hasArg("NSIPS")) + { + notifier_ips_raw = server.arg("NSIPS"); + } + saveSettingsToEEPROM(); +} + +boolean handleSet(String req) +{ + if (!(req.indexOf("ajax_in") >= 0)) { + if (req.indexOf("get-settings") >= 0) + { + XML_response_settings(); + return true; + } + return false; + } + int pos = 0; + boolean isNotification = false; + if (req.indexOf("N=") > 0) isNotification = true; + pos = req.indexOf("A="); + if (pos > 0) { + bri = req.substring(pos + 2).toInt(); + } + pos = req.indexOf("R="); + if (pos > 0) { + col[0] = req.substring(pos + 2).toInt(); + } + pos = req.indexOf("G="); + if (pos > 0) { + col[1] = req.substring(pos + 2).toInt(); + } + pos = req.indexOf("B="); + if (pos > 0) { + col[2] = req.substring(pos + 2).toInt(); + } + if (req.indexOf("NL=") > 0) + { + if (req.indexOf("NL=0") > 0) + { + nightlightActive = false; + } else { + nightlightActive = true; + nightlightStartTime = millis(); + } + } + if (isNotification) + { + if (receiveNotifications) + { + colorUpdated(3); + server.send(200, "text/plain", ""); + return true; + } + server.send(202, "text/plain", ""); + return true; + } + XML_response(); + colorUpdated(1); + return true; +} diff --git a/wled00/wled04_file.ino b/wled00/wled04_file.ino new file mode 100644 index 00000000..968912c1 --- /dev/null +++ b/wled00/wled04_file.ino @@ -0,0 +1,95 @@ +String formatBytes(size_t bytes){ + if (bytes < 1024){ + return String(bytes)+"B"; + } else if(bytes < (1024 * 1024)){ + return String(bytes/1024.0)+"KB"; + } else if(bytes < (1024 * 1024 * 1024)){ + return String(bytes/1024.0/1024.0)+"MB"; + } else { + return String(bytes/1024.0/1024.0/1024.0)+"GB"; + } +} + +String getContentType(String filename){ + if(server.hasArg("download")) return "application/octet-stream"; + else if(filename.endsWith(".htm")) return "text/html"; + else if(filename.endsWith(".html")) return "text/html"; + else if(filename.endsWith(".css")) return "text/css"; + else if(filename.endsWith(".js")) return "application/javascript"; + else if(filename.endsWith(".png")) return "image/png"; + else if(filename.endsWith(".gif")) return "image/gif"; + else if(filename.endsWith(".jpg")) return "image/jpeg"; + else if(filename.endsWith(".ico")) return "image/x-icon"; + else if(filename.endsWith(".xml")) return "text/xml"; + else if(filename.endsWith(".pdf")) return "application/x-pdf"; + else if(filename.endsWith(".zip")) return "application/x-zip"; + else if(filename.endsWith(".gz")) return "application/x-gzip"; + return "text/plain"; +} + +bool handleFileRead(String path){ + Serial.println("handleFileRead: " + path); + if(path.endsWith("/")) path += "index.htm"; + String contentType = getContentType(path); + String pathWithGz = path + ".gz"; + if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){ + if(SPIFFS.exists(pathWithGz)) + path += ".gz"; + File file = SPIFFS.open(path, "r"); + size_t sent = server.streamFile(file, contentType); + file.close(); + return true; + } + return false; +} + +void handleFileUpload(){ + if(server.uri() != "/edit") return; + HTTPUpload& upload = server.upload(); + if(upload.status == UPLOAD_FILE_START){ + String filename = upload.filename; + if(!filename.startsWith("/")) filename = "/"+filename; + Serial.print("handleFileUpload Name: "); Serial.println(filename); + fsUploadFile = SPIFFS.open(filename, "w"); + filename = String(); + } else if(upload.status == UPLOAD_FILE_WRITE){ + //Serial.print("handleFileUpload Data: "); Serial.println(upload.currentSize); + if(fsUploadFile) + fsUploadFile.write(upload.buf, upload.currentSize); + } else if(upload.status == UPLOAD_FILE_END){ + if(fsUploadFile) + fsUploadFile.close(); + Serial.print("handleFileUpload Size: "); Serial.println(upload.totalSize); + } +} + +void handleFileDelete(){ + if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS"); + String path = server.arg(0); + Serial.println("handleFileDelete: " + path); + if(path == "/") + return server.send(500, "text/plain", "BAD PATH"); + if(!SPIFFS.exists(path)) + return server.send(404, "text/plain", "FileNotFound"); + SPIFFS.remove(path); + server.send(200, "text/plain", ""); + path = String(); +} + +void handleFileCreate(){ + if(server.args() == 0) + return server.send(500, "text/plain", "BAD ARGS"); + String path = server.arg(0); + Serial.println("handleFileCreate: " + path); + if(path == "/") + return server.send(500, "text/plain", "BAD PATH"); + if(SPIFFS.exists(path)) + return server.send(500, "text/plain", "FILE EXISTS"); + File file = SPIFFS.open(path, "w"); + if(file) + file.close(); + else + return server.send(500, "text/plain", "CREATE FAILED"); + server.send(200, "text/plain", ""); + path = String(); +} diff --git a/wled00/wled05_init.ino b/wled00/wled05_init.ino new file mode 100644 index 00000000..86f22bac --- /dev/null +++ b/wled00/wled05_init.ino @@ -0,0 +1,139 @@ +void wledInit() +{ + Serial.begin(115200); + Serial.println(); + + for(uint8_t t = 4; t > 0; t--) { + Serial.printf("[SETUP] BOOT WAIT %d...\n", t); + Serial.flush(); + delay(1000); + } + + SPIFFS.begin(); + { + Dir dir = SPIFFS.openDir("/"); + while (dir.next()) { + String fileName = dir.fileName(); + size_t fileSize = dir.fileSize(); + Serial.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str()); + } + Serial.printf("\n"); + } + Serial.println("Init EEPROM"); + EEPROM.begin(256); + loadSettingsFromEEPROM(); + + Serial.print("CC: SSID: "); + Serial.print(clientssid); + + WiFi.disconnect(); //close old connections + + if (staticip[0] != 0) + { + WiFi.config(staticip, staticgateway, staticsubnet); + } else + { + WiFi.config(0U, 0U, 0U); + } + + if (apssid.length()>0) + { + Serial.print("USING AP"); + Serial.println(apssid.length()); + initAP(); + } else + { + Serial.println("NO AP"); + WiFi.softAPdisconnect(true); + } + + initCon(); + + Serial.println(""); + Serial.print("Connected! IP address: "); + Serial.println(WiFi.localIP()); + + // Set up mDNS responder: + if (cmdns != NULL && !only_ap && !MDNS.begin(cmdns.c_str())) { + Serial.println("Error setting up MDNS responder!"); + down(); + } + Serial.println("mDNS responder started"); + + //SERVER INIT + //settings page + server.on("/settings", HTTP_GET, [](){ + if(!handleFileRead("/settings.htm")) server.send(404, "text/plain", "FileNotFound"); + }); + server.on("/button.png", HTTP_GET, [](){ + if(!handleFileRead("/button.png")) server.send(404, "text/plain", "FileNotFound"); + }); + server.on("/favicon.ico", HTTP_GET, [](){ + if(!handleFileRead("/favicon.ico")) server.send(404, "text/plain", "FileNotFound"); + }); + server.on("/", HTTP_GET, [](){ + if(!handleFileRead("/index.htm")) server.send(404, "text/plain", "FileNotFound"); + }); + server.on("/reset", HTTP_GET, reset); + server.on("/set-settings", HTTP_POST, [](){ + handleSettingsSet(); + server.send(200, "text/plain", "Settings saved. Please wait for light to turn back on, then go to main page..."); + reset(); + }); + if (!ota_lock){ + server.on("/edit", HTTP_GET, [](){ + if(!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound"); + }); + server.on("/edit", HTTP_PUT, handleFileCreate); + server.on("/edit", HTTP_DELETE, handleFileDelete); + server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload); + server.on("/down", HTTP_GET, down); + server.on("/cleareeprom", HTTP_GET, clearEEPROM); + //init ota page + httpUpdater.setup(&server); + } + //called when the url is not defined here, ajax-in; get-settings + server.onNotFound([](){ + if(!handleSet(server.uri())){ + server.send(404, "text/plain", "FileNotFound"); + } + }); + + server.begin(); + Serial.println("HTTP server started"); + + // Add service to MDNS + MDNS.addService("http", "tcp", 80); + // Initialize NeoPixel Strip + strip.Begin(); + colorUpdated(0); + pinMode(buttonPin, INPUT_PULLUP); +} + +void initAP(){ + WiFi.softAP(apssid.c_str(), appass.c_str(), apchannel, aphide); +} + +void initCon() +{ + int fail_count = 0; + if (clientssid.length() <1) fail_count = 33; + WiFi.begin(clientssid.c_str(), clientpass.c_str()); + while(WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.println("C_NC"); + fail_count++; + if (fail_count > 32) + { + WiFi.disconnect(); + Serial.println("Can't connect to network. Opening AP..."); + String save = apssid; + only_ap = true; + if (apssid.length() <1) apssid = "WLED-AP"; + initAP(); + apssid = save; + return; + } + } +} + diff --git a/wled00/wled06_stringfiles.ino b/wled00/wled06_stringfiles.ino new file mode 100644 index 00000000..b08cd237 --- /dev/null +++ b/wled00/wled06_stringfiles.ino @@ -0,0 +1,2 @@ +String readFromFS(String filename){return "NI";}; +void writeToFS(String filename, String file) {}; diff --git a/wled00/wled07_notify.ino b/wled00/wled07_notify.ino new file mode 100644 index 00000000..d6f2ca51 --- /dev/null +++ b/wled00/wled07_notify.ino @@ -0,0 +1,31 @@ +void notify(int callMode) +{ + switch (callMode) + { + case 1: if (!notifyDirect) return; break; + case 2: if (!notifyButton) return; break; + case 3: if (!notifyForward) return; break; + default: return; + } + String snd = "/ajax_in&N=1&A="; + snd = snd + bri; + snd = snd + "&R="; + snd = snd + col[0]; + snd = snd + "&G="; + snd = snd + col[1]; + snd = snd + "&B="; + snd = snd + col[2]; + + HTTPClient hclient; + + for (int i = 0; i < notifier_ips_count; i++) + { + String url = "http://"; + url = url + notifier_ips[i]; + url = url + snd; + + hclient.begin(url); + hclient.GET(); + hclient.end(); + } +} diff --git a/wled00/wled08_led.ino b/wled00/wled08_led.ino new file mode 100644 index 00000000..844b26f6 --- /dev/null +++ b/wled00/wled08_led.ino @@ -0,0 +1,83 @@ +void setAllLeds() { + double d = bri_t; + double val = d /256; + int r = col_t[0]*val; + int g = col_t[1]*val; + int b = col_t[2]*val; + for (int i=0; i < led_amount; i++) { + strip.SetPixelColor(i, RgbColor(r, g, b)); + } + strip.Show(); +} + +void setLedsStandard() +{ + col_old[0] = col[0]; + col_old[1] = col[1]; + col_old[2] = col[2]; + bri_old = bri; + col_t[0] = col[0]; + col_t[1] = col[1]; + col_t[2] = col[2]; + bri_t = bri; + setAllLeds(); +} + +void colorUpdated(int callMode) +{ + //call for notifier -> 0: init 1: direct change 2: button 3: notification + if (col[0] == col_old[0] && col[1] == col_old[1] && col[2] == col_old[2] && bri == bri_old) + { + return; //no change + } + if (bri > 0) bri_last = bri; + notify(callMode); + if (fadeTransition || seqTransition) + { + if (transitionActive) + { + col_old[0] = col_t[0]; + col_old[1] = col_t[1]; + col_old[2] = col_t[2]; + bri_old = bri_t; + } + transitionActive = true; + transitionStartTime = millis(); + } else + { + setLedsStandard(); + } +} + +void handleTransitions() +{ + if (transitionActive && transitionDelay > 0) + { + float tper = (millis() - transitionStartTime)/(float)transitionDelay; + if (tper >= 1.0) + { + transitionActive = false; + tper_last = 0; + setLedsStandard(); + return; + } + if (tper - tper_last < transitionResolution) + { + return; + } + tper_last = tper; + if (fadeTransition) + { + col_t[0] = col_old[0]+((col[0] - col_old[0])*tper); + col_t[1] = col_old[1]+((col[1] - col_old[1])*tper); + col_t[2] = col_old[2]+((col[2] - col_old[2])*tper); + bri_t = bri_old+((bri - bri_old)*tper); + } + if (seqTransition) + { + + } else setAllLeds(); + } +} + +void handleAnimations(){}; diff --git a/wled00/wled09_button.ino b/wled00/wled09_button.ino new file mode 100644 index 00000000..713b022a --- /dev/null +++ b/wled00/wled09_button.ino @@ -0,0 +1,27 @@ +void handleButton() +{ + if (buttonEnabled) + { + if (digitalRead(buttonPin) == LOW && !buttonPressedBefore) + { + buttonPressedBefore = true; + if (bri == 0) + { + bri = bri_last; + } else + { + bri_last = bri; + bri = 0; + } + colorUpdated(2); + } + else if (digitalRead(buttonPin) == HIGH && buttonPressedBefore) + { + delay(15); + if (digitalRead(buttonPin) == HIGH) + { + buttonPressedBefore = false; + } + } + } +}