Hola que tal, hice un código de un arduino que manda señal de sus entradas digitales (3,4,5) a una base de datos remota vía PHP cada 5 segundos, a la vez tiene un web server por el puerto 85 para poder activar o desactivar diferentes reveladores (9,8,7), les paso este código a ver si me pueden ayudar a ver si le puedo hacer alguna mejora, ya que de repente se me atora el webserver, no hay un tiempo o no he podido encontrar en que momento exactamente se atora, simplemente de repente se bloquea y no entro al web client... Por otro lado les agradecería que si pueden considerar una mejora al código en general me la digan... Gracias...
================================================================
/*
Web client
Circuit:
- Envia valores de estado a un servidor con php y mysql
- A su vez funciona como webserver para activar o desactivar relays
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Puede ser una IP remota
IPAddress server(200, 162, 155, 188);
IPAddress ip(192, 168, 1, 177);
IPAddress gateway(192, 168, 1, 253);
IPAddress subnet(255, 255, 255, 0);
IPAddress dnServer(192, 168, 1, 253);
// Se declara el cliente2 y server2(Puerto)
EthernetClient client2;
EthernetServer server2(85);
//Id de la privada o cliente remoto
int controlador=52;
String estado9="OFF";
String estado8="OFF";
String estado7="OFF";
String readString;
//Funcion millis, actualiza cada 5 segundos el estado de los input
unsigned long previousMillis = 0;
const long interval = 5000;
void setup() {
server2.begin();
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
// start the serial library:
Serial.begin(9600);
// start the Ethernet connection:
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
server2.begin();
// give the Ethernet shield a second to initialize:
delay(1000);
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
//Se leen las entradas
int input0 = digitalRead(3);
int input1 = digitalRead(4);
int input2 = digitalRead(5);
//Se mandan al servidor las variables input
client2.connect(server, 83);
client2.print("GET /prueba2/prueba.php?controlador=");
client2.print(controlador);
client2.print("&input0=");
client2.print(input0);
client2.print("&input1=");
client2.print(input1);
client2.print("&input2=");
client2.print(input2);
client2.println(" HTTP/1.0");
client2.println();
char d = client2.read();
Serial.print(d);
client2.stop();
}
EthernetClient cliente = server2.available();
if (cliente) {
while (cliente.connected()) {
if (cliente.available()) {
char c = cliente.read();
if (readString.length() < 100) {
//Almacenar caracteres en un string
readString += c;
}
//Si ha terminado la petición del cliente
if (c == '\n') {
Serial.println(readString);
if(readString.indexOf("?encender9") >0)
{
digitalWrite(9,HIGH);
estado9="ON";
}
if(readString.indexOf("?apagar9") >0)
{
digitalWrite(9,LOW);
estado9="OFF";
}
if(readString.indexOf("?encender8") >0)
{
digitalWrite(8,HIGH);
estado8="ON";
}
if(readString.indexOf("?apagar8") >0)
{
digitalWrite(8,LOW);
estado8="OFF";
}
if(readString.indexOf("?encender7") >0)
{
digitalWrite(7,HIGH);
estado7="ON";
}
if(readString.indexOf("?apagar7") >0)
{
digitalWrite(7,LOW);
estado7="OFF";
}
//Mostrqamos la web de control
cliente.println("HTTP/1.1 200 OK"); //send new page
cliente.println("Content-Type: text/html");
cliente.println();
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("
cliente.println("
Controles Zona Dorada
");cliente.println("
");
cliente.println("
");
cliente.println("
");
cliente.println("<a href="/?encender9"">Encender LED");
cliente.println("<a href="/?apagar9"">Apagar LED
");
cliente.println("
FORZADA: ");
cliente.println(estado9);
cliente.println("
");
cliente.println("
");
cliente.println("<a href="/?encender8"">Encender LED");
cliente.println("<a href="/?apagar8"">Apagar LED
");
cliente.println("
FORZADA: ");
cliente.println(estado8);
cliente.println("
");
cliente.println("
");
cliente.println("<a href="/?encender7"">Encender LED");
cliente.println("<a href="/?apagar7"">Apagar LED
");
cliente.println("
FORZADA: ");
cliente.println(estado7);
cliente.println("
");
cliente.println("");
cliente.println("");
break;
}
}
}
// Darle un respiro al navegador web para recibir los datos
delay(1);
//Limpiar String para proxima etición HTTP
readString="";
//Cerrar conexión
cliente.stop();
}
}