Innanzitutto grazie a tutti delle risposte siete stati gentilissimi e utilissimi.
lesto:
la soluzione più facile è
pc_client.print("<p>PIN ");
pc_client.print(i);
pc_client.print(" ATTIVO
");
poi se vuoi possiamo complicarci la vita, eh :grin:
Questa non è una soluzione che fa al caso mio perchè gli stati dei led li gestisco attraverso una query al database. Voglio limitare arduino a spegnere e accendere.
Vi posto il codice di arduino che utilizzo tuttora, che funziona per tutti i led, ma è troppo lungo come codice a mio avviso.
//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 app = "";
int cmd1 = 0;
int cmd2 = 0;
int cmd3 = 0;
int cmd4 = 0;
int cmd5 = 0;
int cmd6 = 0;
int cmd7 = 0;
int cmd8 = 0;
int cmd9 = 0;
boolean LEDON[10] = { false };
//creao un oggetto server che rimane in ascolto sulla porta
//specificata
EthernetServer ArduinoServer(80);
void setup()
{
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
//inizializza l'oggetto server
ArduinoServer.begin();
//definisco i pin2 e pin3 come uscite
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, 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
cmd1 = msg.indexOf("1=ON");
cmd2 = msg.indexOf("2=ON");
cmd3 = msg.indexOf("3=ON");
cmd4 = msg.indexOf("4=ON");
cmd5 = msg.indexOf("5=ON");
cmd6 = msg.indexOf("6=ON");
cmd7 = msg.indexOf("7=ON");
cmd8 = msg.indexOf("8=ON");
cmd9 = msg.indexOf("9=ON");
//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();
//Piloto l'uscita e invio lo stato al browser 2
if (cmd1 > 0){
digitalWrite(1, HIGH);
LEDON[1] = true;
app = "1=ON";
}else{
digitalWrite(1, LOW);
LEDON[1] = false;
app = "1=OFF";
}
//Pilota l'uscita e invio lo stato al browser del led 4
if (cmd2 > 0) {
digitalWrite(2, HIGH);
LEDON[2] = true;
app = app + "&2=ON";
}else{
digitalWrite(2, LOW);
LEDON[2] = false;
app = app + "&2=OFF";
}
//Piloto l'uscita e invio lo stato al browser 5
if (cmd3 > 0){
digitalWrite(3, HIGH);
LEDON[3] = true;
app = app + "&3=ON";
}else{
digitalWrite(3, LOW);
LEDON[3] = false;
app = app + "&3=OFF";
}
//Piloto l'uscita e invio lo stato al browser 5
if (cmd4 > 0){
digitalWrite(4, HIGH);
LEDON[4] = true;
app = app + "&4=ON";
}else{
digitalWrite(4, LOW);
LEDON[4] = false;
app = app + "&4=OFF";
}
//Piloto l'uscita e invio lo stato al browser 5
if (cmd5 > 0){
digitalWrite(5, HIGH);
LEDON[5] = true;
app = app + "&5=ON";
}else{
digitalWrite(5, LOW);
LEDON[5] = false;
app = app + "&5=OFF";
}
//Piloto l'uscita e invio lo stato al browser 2
if (cmd6 > 0){
digitalWrite(6, HIGH);
LEDON[6] = true;
app = app + "&6=ON";
}else{
digitalWrite(6, LOW);
LEDON[6] = false;
app = app + "&6=OFF";
}
//Pilota l'uscita e invio lo stato al browser del led 4
if (cmd7 > 0){
digitalWrite(7, HIGH);
LEDON[7] = true;
app = app + "&7=ON";
}else{
digitalWrite(7, LOW);
LEDON[7] = false;
app = app + "&7=OFF";
}
//Piloto l'uscita e invio lo stato al browser 5
if (cmd8 > 0){
digitalWrite(8, HIGH);
LEDON[8] = true;
app = app + "&8=ON";
}else{
digitalWrite(8, LOW);
LEDON[8] = false;
app = app + "&8=OFF";
}
//Piloto l'uscita e invio lo stato al browser 5
if (cmd9 > 0){
digitalWrite(9, HIGH);
LEDON[9] = true;
app = app + "&9=ON";
}else{
digitalWrite(9, LOW);
LEDON[9] = false;
app = app + "&9=OFF";
}
pc_client.print("<html><head>");
pc_client.print("<meta http-equiv=\"refresh\" content=\"0; url=http://localhost/domotic/riservata/update.php?");
pc_client.print(app);
pc_client.print("\"> ");
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();
}
}