trying to get this code to work... everything works exept the servo movement.
if i put start degree 45 target degree 90 in the web ui the servo should move back and forth between those degrees, but it moves in this pattern 90(startup possition) 45-90-0-90 but i want it to move
90(startup possition)45-90-45-90 and so on i would also be able to make servo move 90-45-90-45 what am i missing
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <Servo.h>
#include <EEPROM.h>
const char* ssid = "ssid";
const char* password = "password";
ESP8266WebServer server(80);
Servo servo;
int startDegree = 0;
int targetDegree = 0;
int speed = 100;
bool movingForward = true;
bool moving = false;
int servoMinDegree = 0;
int servoMaxDegree = 180;
bool isCentered = false;
String message = "";
void setup(void) {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
if (MDNS.begin("Warriflow")) {
Serial.println("MDNS responder started");
}
server.on("/", HTTP_GET, handleRoot);
server.on("/moveServo", HTTP_GET, handleMoveServo);
server.on("/centerServo", HTTP_GET, centerServo);
server.begin();
Serial.println("HTTP server started");
servo.attach(D1, 500, 3900);
servo.write(startDegree);
delay(1000);
}
void loop(void) {
if (!isCentered && moving) {
if (movingForward) {
startDegree++;
if (startDegree >= targetDegree) {
if (targetDegree == servoMinDegree) {
targetDegree = servoMaxDegree;
} else {
movingForward = false;
}
}
} else {
startDegree--;
if (startDegree <= 0) {
if (targetDegree == servoMaxDegree) {
targetDegree = servoMinDegree;
} else {
movingForward = true;
}
}
}
servo.write(startDegree);
delay(speed);
}
server.handleClient();
if (!MDNS.update()) {
Serial.println("MDNS update failed");
}
}
void handleRoot() {
String message = "";
message += "<html><head>";
message += "<meta charset='UTF-8'>";
message += "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
message += "<title>Warriflow v1.1</title>";
message += "<style>";
message += "body {";
message += " font-family: Arial, sans-serif;";
message += " background-color: #f2f2f2;";
message += " text-align: center;";
message += "}";
message += ".container {";
message += " max-width: 400px;";
message += " margin: 0 auto;";
message += " padding: 20px;";
message += " background-color: #fff;";
message += " border-radius: 10px;";
message += " box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);";
message += "}";
message += "h1 {";
message += " color: #008CBA;";
message += "}";
message += ".button {";
message += " background-color: #008CBA;";
message += " color: white;";
message += " border: none;";
message += " border-radius: 5px;";
message += " padding: 10px 20px;";
message += " font-size: 16px;";
message += " cursor: pointer;";
message += " margin-top: 10px;";
message += "}";
message += ".input-field {";
message += " display: block;";
message += " width: 100%;";
message += " margin-top: 10px;";
message += " padding: 5px;";
message += " border: 1px solid #ccc;";
message += " border-radius: 5px;";
message += "}";
message += "#message {";
message += " color: #008CBA;";
message += " font-weight: bold;";
message += " margin-top: 10px;";
message += " display: none;"; // Dölj meddelandet som standard
message += "}";
message += "</style>";
message += "</head><body>";
message += "<div class='container'>";
message += "<h1>Warriflow v1.1</h1>";
message += "<p id='message'></p>";
message += "<form id='servoForm'>";
message += "<label for='startDegree'>Start Degree:</label>";
message += "<input type='number' id='startDegree' name='startDegree' value='" + String(startDegree) + "' class='input-field'><br>";
message += "<label for='targetDegree'>Target Degree:</label>";
message += "<input type='number' id='targetDegree' name='targetDegree' value='" + String(targetDegree) + "' class='input-field'><br>";
message += "<label for='speed'>Speed:</label>";
message += "<input type='number' id='speed' name='speed' value='" + String(speed) + "' class='input-field'><br>";
message += "<input type='button' class='button' value='Enter' onclick='moveServo()'>";
message += "</form>";
message += "<button class='button' onclick='centerServo()'>Center Servo</button>";
message += "</div>";
message += "<script>";
message += "function showMessage(messageText) {";
message += " var messageElement = document.getElementById('message');";
message += " messageElement.textContent = messageText;";
message += " messageElement.style.display = 'block';";
message += " setTimeout(function() { clearMessage(); }, 10000);"; // Visa meddelandet i 10 sekunder
message += "}";
message += "function clearMessage() {";
message += " var messageElement = document.getElementById('message');";
message += " messageElement.textContent = '';";
message += " messageElement.style.display = 'none';";
message += "}";
message += "function centerServo() {";
message += " var xhr = new XMLHttpRequest();";
message += " xhr.onreadystatechange = function() {";
message += " if (xhr.readyState === 4 && xhr.status === 200) {";
message += " showMessage(xhr.responseText);";
message += " }";
message += " };";
message += " xhr.open('GET', '/centerServo', true);";
message += " xhr.send();";
message += " return false;";
message += "}";
message += "function moveServo() {";
message += " var xhr = new XMLHttpRequest();";
message += " xhr.onreadystatechange = function() {";
message += " if (xhr.readyState === 4 && xhr.status === 200) {";
message += " showMessage(xhr.responseText);";
message += " }";
message += " };";
message += " var form = document.getElementById('servoForm');";
message += " var formData = new FormData(form);";
message += " xhr.open('GET', '/moveServo?' + new URLSearchParams(formData).toString(), true);";
message += " xhr.send();";
message += " return false;";
message += "}";
message += "</script>";
message += "</body></html>";
server.send(200, "text/html", message);
}
void handleMoveServo() {
String startDegreeStr = server.arg("startDegree");
String targetDegreeStr = server.arg("targetDegree");
String speedStr = server.arg("speed");
startDegree = startDegreeStr.toInt();
targetDegree = targetDegreeStr.toInt();
speed = speedStr.toInt();
movingForward = true;
moving = true;
isCentered = false;
message = "Servo is now moving ...";
server.send(200, "text/html", message);
}
void centerServo() {
startDegree = 90;
servo.write(startDegree);
isCentered = true;
message = "Motor can be removed or mouted to bracket ...";
server.send(200, "text/html", message);
}