Per semplicità vi posto l'intero codice.
//Librerie impiegate per il progetto
#include <SPI.h>
#include <Ethernet.h>
//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {192, 168, 1, 110}; //modificate questo valore in base alla vostra rete
char Data_RX;
String msg = "";
String app1 = "";
String app2 = "";
boolean LEDON[10] = { false };
//Stringa Form
int cmd1[10] = { 0 };
int cmd2[10] = { 0 };
//indice per cicli
int i = 0;
//creao un oggetto server che rimane in ascolto sulla porta
//specificata
EthernetServer ArduinoServer(80);
void setup(){
Serial.begin(14400);
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
//inizializza l'oggetto server
ArduinoServer.begin();
//definisco i pin come uscite
for(i=0; i<10; i++){
pinMode(i, OUTPUT);
}
}
void loop(){
//IMPORTANTE pulisco la variabile msg
msg = "";
EthernetClient pc_client = ArduinoServer.available();
//controllo se pc_client è true
if (pc_client != false){
//controllo continuamente che il client sia connesso
while (pc_client.connected()){
//Controllo se ci sono byte disponibili per la lettura
if (pc_client.available()){
//leggo i byte disponibili
//provenienti dal client
Data_RX = pc_client.read();
//ricostruisco la stringa ricevuta concatenando i singoli byte
msg += Data_RX;
//Attendo che tutti i byte siano letti
//quando Data_RX contiene il carattere
//di nuova line capisco tutti i byte sono
//stati letti
if (Data_RX == '\n'){
//cerco all'interno della stringa il parametro che mi interessa
for(i=1; i<10; i++){
cmd[i]=msg.indexOf("%d=ON",i);
}
//Invio la risposta al client
//invio lo status code
pc_client.println("HTTP/1.1 200 OK");
//imposto il data type
pc_client.println("Content-Type: text/html");
pc_client.println();
//invio codice html
//Piloto l'uscita e invio lo stato al browser
for(i = 1; i < 10; i++){
if(cmd[i] > 0){
digitalWrite(i, HIGH);
LEDON[i] = true;
//pc_client.print("<p>PIN %d ATTIVO </p>");
}else{
digitalWrite(i, LOW);
LEDON[i] = false;
//pc_client.print("<p>PIN %d ATTIVO </p>");
}
}
pc_client.print("<html><head>");
pc_client.print("<meta http-equiv=\"refresh\" content=\"0; url=http://localhost/domotic/riservata/loggato.php\"/>");
pc_client.print("</head></html>");
//aspetto 1 ms affinche la risposta giunga al browser del client
delay(1);
//esco dal ciclo while una volta completato l'invio della risposta
break;
}
}
}
//chiudo la connessione
pc_client.stop();
}
}
Ora stavo pensando che una soluzione potesse essere anche questa di seguito, ma non mi funziona sapreste dirmi il perchè?
for(i = 1; i < 10; i ++){
app = i + "=ON";
cmd[i] = msg.indexOf(app1);
}
Dove app è una stringa d'appoggio che utilizzo per concatenare il numero del pin (int i) e la stringa "=ON", così da ottenere 1=ON, 2=ON etc etc...così con cmd*=indexOf(app1) ottengo un vettore cmd1 contenente un valore intero che mi dice se il led è acceso o meno (perchè se cmd > 0 è su ON, mentre se = 0 è OFF). Ovviamente all'inizio ho dichiarato app1 nel seguente modo String app1 = "";.*
Provando questo script mi rimane fisso il led 1, e non posso fare nient'altro.