//Arduino 1.0.3 //Ethernet Shield #include #include //mac address ethernet shield byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x09, 0x92 }; //indirizzo ip della mia scheda arduino byte ip[] = {192, 168, 0, 111}; char Data_RX; String msg = ""; int cmd = 0; EthernetServer server(80); String a,b,c; void setup() { Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); pinMode(8, OUTPUT); //collegare un led per testare il comando da web } void loop() { msg = ""; EthernetClient pc_client = server.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; //Se Data_RX = '\n' ho ricevuto tutti i caratteri if (Data_RX == '\n') { /*Adesso devo estrarre i valori dalla stringa ricevuta: ho usato il comando 'substring' percui bisogna sapere la posizione del carattere da leggere. Usando, ad es., i comandi 'startsWith' o 'endsWith' si può migliorare questa parte */ cmd = msg.indexOf("PIN8"); //controllo se è stato inviato in comando PIN8x if (cmd > 0) //se si i valori da leggere sono spostati { a = msg.substring(13,14); //estraggo il valore 0~9 spedito b = msg.substring(17,18); c = msg.substring(21,22); } else{ a = msg.substring(8,9); b = msg.substring(12,13); c = msg.substring(16,17); } cmd = msg.indexOf("=&"); //controllo che non ci siano campi vuoti if (cmd > 0) { pc_client.print("

Attenzione: spedito valore nullo!

"); a=b=c="0"; } //codice HTML pc_client.print(""); pc_client.print("");//refresh automatico: 25s pc_client.print(""); pc_client.println(""); pc_client.println("

Test Arduino

"); pc_client.println("Stringa ricevuta da Arduino: "); pc_client.println(msg); pc_client.println("

Valori letti da Arduino
A: "); pc_client.println(a); pc_client.println("
B: "); pc_client.println(b); pc_client.println("
C: "); pc_client.println(c); pc_client.println("

"); //form per inviare valori ad Arduino pc_client.println("
Inserire nuovi valori (0~9)"); pc_client.print("
A:
B:
C: 
"); pc_client.println(""); pc_client.println("

Comando pin 8 di Arduino
"); //Comandi predefiniti da spedire ad Arduino pc_client.println(""); pc_client.println(""); //controllo se arriva il comando cmd=0; cmd = msg.indexOf("PIN8H"); if (cmd > 0) { digitalWrite(8, HIGH); Serial.println("pin 8 on"); pc_client.print("

PIN 8 ON

"); } cmd=0; cmd = msg.indexOf("PIN8L"); if (cmd > 0) { digitalWrite(8, LOW); pc_client.print("

PIN 8 OFF

"); } //scrivo sulla seriale Serial.println("A: "); Serial.print(a); Serial.println("B: "); Serial.print(b); Serial.println("C: "); Serial.print (c); Serial.println("Stringa completa: "); Serial.println(msg); break; pc_client.print(""); //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(); } }