diff --git a/README.md b/README.md index 8c68c78..49e9e5f 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,24 @@ Wifi Host for the Arduino-Laser-Spirograph * laser=1-128 (1:permanent, 2-127 pulse, 128 off) * motor1=1-128 * motor2=1-128 - * motor3=1-128 + * motor3=1-128 +* /preset + * **POST** sets new value(s) to Preset + * nr=presetNr (1-128) + * laser=1-128 (1:permanent, 2-127 pulse, 128 off) + * motor1=1-128 + * motor2=1-128 + * motor3=1-128 + * apply=true -> run preset + +* /presetMode + * **GET** returns current mode + * **POST** sets mode 0: presetsOff 1: cycle (not completed feature) + +* /presets + * **GET** returns /presets.json + * /wificonfig * **GET** returns wifi settings * **POST** sets new wifi setting{s} @@ -22,11 +38,6 @@ Wifi Host for the Arduino-Laser-Spirograph * **GET** returns free heap of the ESP8266 * /files * **GET** returns list of files -* /presetMode - * **GET** returns current mode - * **POST** sets mode 0: presetsOff 1: cycle (not completed feature) -* /presets - * **GET** returns /presets.json ## Install diff --git a/config/presets.json b/config/presets.json index 1f3b83e..0466e8e 100644 --- a/config/presets.json +++ b/config/presets.json @@ -1,11 +1,5 @@ { "presets": { - "0": [ - 106, - 107, - 108, - 109 - ], "1": [ 62, 63, @@ -767,6 +761,12 @@ 114, 115, 116 + ], + "128": [ + 106, + 107, + 108, + 109 ] } } \ No newline at end of file diff --git a/data/presets.json b/data/presets.json index 1f3b83e..0466e8e 100644 --- a/data/presets.json +++ b/data/presets.json @@ -1,11 +1,5 @@ { "presets": { - "0": [ - 106, - 107, - 108, - 109 - ], "1": [ 62, 63, @@ -767,6 +761,12 @@ 114, 115, 116 + ], + "128": [ + 106, + 107, + 108, + 109 ] } } \ No newline at end of file diff --git a/src/esp8266-laser.ino b/src/esp8266-laser.ino index 4deea2e..442f658 100644 --- a/src/esp8266-laser.ino +++ b/src/esp8266-laser.ino @@ -115,6 +115,77 @@ void hFileList() { responseBuffer = String(); } +bool hReadPresets() +{ + // streamFile instead of rebuild json string + String path = "/presets.json"; + String contentType = getContentType(path); + if (SPIFFS.exists(path)) { + File file = SPIFFS.open(path, "r"); + size_t sent = server.streamFile(file, contentType); + file.close(); + return true; + } + return false; +} + +void hWritePreset() +{ + presetMode = 0; + int error = 0; + int presetNr = 0; + bool apply = false; + + StaticJsonBuffer<200> jsonBuffer; + JsonObject& root = jsonBuffer.createObject(); + JsonObject& data = root.createNestedObject("preset"); + if (server.hasArg("nr") ) { + presetNr = server.arg("nr").toInt(); + data["nr"] = (String)presetNr; + } + else + { + error = 1; + } + if (server.hasArg("laser") && error == 0) { + presets[presetNr-1][0] = server.arg("laser").toInt(); + data["laser"] = (String)presets[presetNr-1][0]; + } + if (server.hasArg("motor1") && error == 0) { + presets[presetNr-1][1] = server.arg("motor1").toInt(); + data["motor1"] = (String)presets[presetNr-1][1]; + } + if (server.hasArg("motor2") && error == 0) { + presets[presetNr-1][2] = server.arg("motor2").toInt(); + data["motor2"] = (String) presets[presetNr-1][2]; + } + if (server.hasArg("motor3") && error == 0) { + presets[presetNr-1][3] = server.arg("motor3").toInt(); + data["motor3"] = (String) presets[presetNr-1][3]; + } + if (server.arg("apply") == "true" && error == 0) + { + apply = true; + data["apply"] = "true"; + presetToLaser(presetNr-1); + } + + error = savePresetFile() ? 0 : 1; + if(error != 0) + { + String responseBuffer = String(); + root.prettyPrintTo(responseBuffer); + server.send(200, "text/json", responseBuffer); + responseBuffer = String(); + } + else + { + server.send(400, "text/plain", "400 Bad Request"); + } + jsonBuffer.clear(); + +} + void hReadSpiro() { String responseBuffer = String(); @@ -131,20 +202,6 @@ void hReadSpiro() responseBuffer = String(); } -bool hReadPresets() -{ - // streamFile instead of rebuild json string - String path = "/presets.json"; - String contentType = getContentType(path); - if (SPIFFS.exists(path)) { - File file = SPIFFS.open(path, "r"); - size_t sent = server.streamFile(file, contentType); - file.close(); - return true; - } - return false; -} - void hWriteSpiro() { presetMode = 0; @@ -287,7 +344,7 @@ boolean readPresetsFile() { JsonArray& values = sets[keyStr]; for (int x = 0; x < 4; x++) { - presets[key][x] = values[x]; + presets[key-1][x] = values[x]; } } @@ -307,7 +364,7 @@ bool savePresetFile() { JsonArray& set = sets.createNestedArray((String)i); for (int x = 0; x < 4; x++) { - set.add(presets[i][x]); + set.add(presets[i+1][x]); } } //json.prettyPrintTo(Serial); @@ -504,7 +561,12 @@ void setup(void) { server.on("/presets", HTTP_GET, hReadPresets); server.on("/presets", HTTP_POST, []() { server.send(400, "text/plain", "400 Bad Request"); + }); + + server.on("/preset", HTTP_GET, []() { + server.send(400, "text/plain", "400 Bad Request"); }); + server.on("/preset", HTTP_POST, hWritePreset); server.on("/presetMode", HTTP_GET, []() { @@ -539,8 +601,6 @@ void setup(void) { server.begin(); Serial.println("HTTP server started"); - - } void handleNotFound() { @@ -566,7 +626,7 @@ void loop(void) { { if (millis() - previousMillis >= cycleTime) { - presetToLaser(activePreset + 1); + presetToLaser(activePreset); if (activePreset < 128) { activePreset++;