Buenos dias, antes de nada decir que soy novato, y que lamento molestar con esta nimiedad. Pero llevo dos dias tratando de cambiar el estado de un relé con botones físicos, sin que me cuente miles de pulsaciones. De momento solo tengo en el programa un boton, que cambiaría el estado de rele1, si está LOW a HIGH, y viceversa. El proyecto completo es un programa de riego con dos electrovalvulas que puedan ser manejadas de manera directa, con los botones, de manera remota, mediante un servidor web, y que se puedan tambien programar riegos a determinadas horas con la ayuda de un RTC y un modulo de micro sd para guardar las horas de riego (o quizas usar la memoria EEPROM), y empleando una placa NodeMCU. Ya he buscado por el foro y veo que no soy el primero que pretende algo similar, no obstante mi problema se encuentra en la gestión del boton en este momento, puesto que actualmente sí me funciona el cambio de estado del relé via remota.
Adjunto el código, supongo que mi error será alguna tonteria. Muchas gracias de antemano.
#include <ESP8266WiFi.h> //Incluimos la librería para del WiFi
//Trabajaremos con este, 18/02/2019
//Credenciales del WiFi
const char* ssid = "vodafoneDFD0";
const char* password = "B5YTHMTVUL4NG6";
int rele1 = D0; // D0 is the LEDBUILDIN (Active LOW)
int rele2 = D1;
int boton1 = D2; // the number of the pushbutton pin
int estadoAnterior = 0; // the current state of the output pin
int estadoActual; // the current reading from the input pin
int contador = 0; // the previous reading from the input pin
WiFiServer server(80);
void setup() {
Serial.begin(115200); //Inicio el puerto serie
delay(10);
pinMode(rele1, OUTPUT);
digitalWrite(rele1, LOW);
pinMode(rele2, OUTPUT);
digitalWrite(rele2, LOW);
pinMode(boton1, INPUT);
// Conecto con la red WiFi en modo estación (STA)
Serial.println();
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
delay(5000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
// Inicializo el servidor
server.begin();
Serial.println("Servidor iniciado");
// Muestro la IP local asignada. URL del servidor
Serial.print("Usa esta URL para conectar al servidor: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
{
estadoActual = digitalRead(boton1);
if (estadoAnterior != estadoActual)
{
contador++;
int validarPar = contador % 2;
if (validarPar != 1)
{
// digitalRead(rele1);
//}
if (digitalRead(rele1)==HIGH)
{
digitalWrite (rele1,LOW);
}
else
{
digitalWrite (rele1,HIGH);
}
}
estadoAnterior = estadoActual;
}
}
// Compruebo si hay un cliente disponible (una petición)
WiFiClient client = server.available();
if (!client) {
return; // En caso de no haber un cliente, no hago nada
}
// Espero hasta que el cliente realice una petición
Serial.println("¡Nuevo cliente!");
while(!client.available()){
delay(1);
}
// Leo la primera linea de la petición del cliente
String request = client.readStringUntil('\r'); // Leo hasta retorno de carro
Serial.println(request); //Imprimo la petición
client.flush(); //Limpio el buffer
// Interpreto lo que he recibido
int value = rele1 ;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(rele1, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(rele1, LOW);
value = LOW;
}
int blk2 = LOW;
if (request.indexOf("/BLK2=ON") != -1) {
digitalWrite(rele2, HIGH);
blk2 = HIGH;
}
if (request.indexOf("/BLK2=OFF") != -1) {
digitalWrite(rele2, LOW);
blk2 = LOW;
}
// Pongo rele1 al valor que ha solicitado el cliente en la petición
// Devuelvo la respuesta al cliente -> Todo ha ido bien, el mensaje ha sido interpretado correctamente
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
// A partir de aquí creo la página en raw HTML
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("El LED esta: ");
if(value == HIGH) {
client.print("ON");
} else {
client.print("OFF");
}
client.println("
");
client.println("<a href=\"/LED=ON\"\"><button>Encender </button></a>"); // Los botones con enlace
client.println("<a href=\"/LED=OFF\"\"><button>Apagar </button></a>
");
client.println("</html>");
client.print("El bloque 2 esta: ");
if(blk2 == HIGH) {
client.print("ON");
} else {
client.print("OFF");
}
client.println("
");
client.println("<a href=\"/BLK2=ON\"\"><button>Encender </button></a>"); // Los botones con enlace
client.println("<a href=\"/BLK2=OFF\"\"><button>Apagar </button></a>
");
client.println("</html>");
delay(1);
Serial.println("Cliente desconectado"); // Nos desconectamos del cliente
Serial.println("");
}