Buenas tardes, estoy intentando depurar el código para controlar una persiana por android (web) a través de dos relés, con órdenes de subir, bajar mientras se pulsa el botón de la aplicación del móvil, y subir y bajar toda de una, que tarda 40seg en subir o bajar completamente. En éstas últimas tuve problemas, puesto que con un delay de tanto tiempo se reiniciaba la placa, con lo cual tuve que estudiar como funcionaba el tema de los millis, hice varias pruebas hasta que lo conseguí, pero al controlar por web, si no deshabilito la función siguiente función, lo para de bajar o subir.
WiFiClient client = server.available();
// if (!client) {
// return;
// }
// Serial.print("IP:");
// Serial.println(ip);
// Serial.println("new client");
// while(!client.available()){
// delay(1);
// }
El problema ahora es que tarda mucho desde que pulso el botón en la aplicación hasta que reacciona, varios segundos...
A ver si tenéis alguna idea de como modificarlo para que funcione al 100%?
Os dejo el código:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "***";
const char* password = "*********";
IPAddress ip(192,168,1,227);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int rele1 = 13;
const int rele2 = 12;
int val1 = 0;
int val2 = 0;
int periodo = 40000;
byte temp = 0;
unsigned long tiempoAnterior = 0;
int periodo2 = 40000;
byte temp2 = 0;
unsigned long tiempoAnterior2 = 0;
WiFiServer server(1088);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
pinMode(4,INPUT);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
ArduinoOTA.setPassword((const char *)"****");
Serial.println();
Serial.println();
Serial.print("Conectado a ");
Serial.println(ssid);
Serial.print("IP:");
Serial.println(ip);
Serial.printf("MAC Address = %s\n", WiFi.softAPmacAddress().c_str());
Serial.print("Puerto: 1088");
Serial.println();
Serial.print("Ordenes: arriba/abajo");
Serial.println();
Serial.print("Ordenes: arribatodo/abajotodo");
Serial.println();
ArduinoOTA.begin();
server.begin();
}
void loop() {
ArduinoOTA.handle();
ESP.wdtDisable();
WiFiClient client = server.available();
// if (!client) {
// return;
// }
// Serial.print("IP:");
// Serial.println(ip);
// Serial.println("new client");
// while(!client.available()){
// delay(1);
// }
String request = client.readStringUntil('\r');
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
int val1 = digitalRead(rele1);
if (request.indexOf("/arribaon") != -1) {
digitalWrite(rele1, LOW);
digitalWrite(rele2,HIGH);
Serial.println("Subiendo");
temp = 0;
temp2 = 0;
}
if (request.indexOf("/arribaoff") != -1) {
digitalWrite(rele1, HIGH);
Serial.println(".");
}
int val2 = digitalRead(rele2);
if (request.indexOf("/abajoon") != -1) {
digitalWrite(rele2, LOW);
digitalWrite(rele1,HIGH);
Serial.println("Bajando");
temp = 0;
temp2 = 0;
}
if (request.indexOf("/abajooff") != -1) {
digitalWrite(rele2, HIGH);
Serial.println("Stop");
}
if (request.indexOf("/abajotodo") != -1) {
tiempoAnterior=millis();
temp =1;
digitalWrite(rele2,LOW);
digitalWrite(rele1,HIGH);
Serial.println("Bajando persiana");
}
if((millis()>tiempoAnterior+periodo)&&temp==1){
digitalWrite(rele2,HIGH);
temp = 0;
Serial.println("Persiana completamente bajada");
}
if (request.indexOf("/tiempo") != -1) {
Serial.println(millis());
Serial.println(tiempoAnterior);
}
if (request.indexOf("/arribatodo") != -1) {
tiempoAnterior2=millis();
temp2 =1;
digitalWrite(rele1,LOW);
digitalWrite(rele2,HIGH);
Serial.println("Subiendo persiana");
}
if((millis()>tiempoAnterior2+periodo2)&&temp2==1){
digitalWrite(rele1,HIGH);
temp2 = 0;
Serial.println("Persiana completamente subida");
}
}