#include #include // WiFi credentials const char* ssid = "BLANCO_ESP"; const char* password = "kh09731a"; // Pines de dirección const int IN1 = 14; const int IN2 = 27; const int IN3 = 25; const int IN4 = 33; // Pines de velocidad digital const int ENA = 26; const int ENB = 32; // Web server WebServer server(80); // Variables de control int freq1 = 0, freq2 = 0; unsigned long lastToggle1 = 0, lastToggle2 = 0; bool state1 = false, state2 = false; // Dirección String dir1 = "STOP", dir2 = "STOP"; void setMotorDir(int motor, String dir) { if (motor == 1) { dir1 = dir; if (dir == "FWD") { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else if (dir == "BWD") { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); } else { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } } else if (motor == 2) { dir2 = dir; if (dir == "FWD") { digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else if (dir == "BWD") { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } else { digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } } } void handleRoot() { String html = R"rawliteral( Control de Motores

Motor 1

Frecuencia: 0 Hz


Motor 2

Frecuencia: 0 Hz


)rawliteral"; server.send(200, "text/html", html); } void handleSetFreq() { int m = server.arg("motor").toInt(); int v = server.arg("value").toInt(); if (m == 1) freq1 = v; if (m == 2) freq2 = v; server.send(200, "text/plain", "OK"); } void handleSetDir() { int m = server.arg("motor").toInt(); String d = server.arg("dir"); setMotorDir(m, d); server.send(200, "text/plain", "Dir OK"); } void setup() { Serial.begin(115200); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); WiFi.begin(ssid, password); Serial.print("Conectando"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi conectado. IP:"); Serial.println(WiFi.localIP()); server.on("/", handleRoot); server.on("/setFreq", handleSetFreq); server.on("/setDir", handleSetDir); server.begin(); } void loop() { server.handleClient(); // Motor 1 if (freq1 > 0 && dir1 != "STOP") { unsigned long interval = 1000000UL / (freq1 * 2); if (micros() - lastToggle1 >= interval) { lastToggle1 = micros(); state1 = !state1; digitalWrite(ENA, state1); } } else { digitalWrite(ENA, LOW); } // Motor 2 if (freq2 > 0 && dir2 != "STOP") { unsigned long interval = 1000000UL / (freq2 * 2); if (micros() - lastToggle2 >= interval) { lastToggle2 = micros(); state2 = !state2; digitalWrite(ENB, state2); } } else { digitalWrite(ENB, LOW); } }