Relè Arduino

Ciao a tutti!

Vi spiego subito il mio problema,
praticamente ieri mi è arrivato Arduino UNO, inseme ai relè che si attivano con 5V e allo shield Ethernet

Io avevo intenzione di accendere due relè da remoto, solamente che nello sketch, quando c’è settato un solo relè tutto funziona a meraviglia, mentre quando copio le stringe e cambio i parametri per far si che non siano uguali, ad esempio i Boolean, tutto smette di funzionare

Vi allego lo sketch del singolo relè collegato:

/**
Questo programma mostra come sia possibile inserire del codice HTML all'interno della
pagina web del webserver di Arduino*/
 
#include <SPI.h>
#include <Ethernet.h>
 
int pinLED = 9; // pin a cui è connesso il LED
boolean acceso = false; 
// Mac Address di Arduino
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
 
// Viene inizializzata la libreria Ethernet di Arduino e il webserver gira sulla porta 80
EthernetServer server(80);
 
void setup() {
  pinMode(pinLED,OUTPUT);
  digitalWrite(pinLED,LOW);
  Serial.begin(9600);
  // Viene inilizzato il webserver e la connessione di rete
  Ethernet.begin(mac);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
void loop() {
  // Vengono ascoltati nuovi client
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // Finisce una richiesta HTTP
    boolean currentLineIsBlank = true;
    String postText ="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if(postText.length()<10){
          postText +=c;
        }
        // Se viene completato l'invio della richiesta HTTP, allora il server invia la risposta
        if (c == '\n' && currentLineIsBlank) {
          // Viene fatta una risposta HTTP, in pratica viene creata una pagina WEB in HTML
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // Dopo la risposta la connessione si interrompe
          client.println();
          client.println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head> <TITLE>Arduino</TITLE> </head>"); // Viene creato il Titolo
          client.println("<body> <h1> Benvenuto nel Webserver Arduino </h1>"); // Viene inserito del testo
          client.println("<h3> Attraverso questa pagina è possibile accendere e spegnere un LED </h3>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    // Se l'utente ha premuto l'icona per accendere il LED
    if(postText.indexOf("?on") >0){
          digitalWrite(pinLED,LOW);
          Serial.println("Accendi LED");
          acceso = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?off") >0 ){
       digitalWrite(pinLED,HIGH);
        Serial.println("Spegni LED");
        acceso = false;
       }
      // Viene cambiata la pagina WEB a seconda che il LED sia spento, oppure acceso
      if(acceso){
          client.println("<a href=\"./?off\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-red.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> Il LED è accesa </h3>");
        }else{
          client.println("<a href=\"./?on\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-green.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> Il LED è spento </h3>");
          }   
    delay(1);
    // Viene chiusta la connessione
    client.stop();
    Serial.println("client disconnected");
  }
}

mentre questo sotto sarebbe lo sketch con il secondo relè configurato:

/**
Questo programma mostra come sia possibile inserire del codice HTML all'interno della
pagina web del webserver di Arduino*/
 
#include <SPI.h>
#include <Ethernet.h>
 
int pinLED = 9; // pin a cui è connesso il LED
int pinLED2 = 10;
boolean acceso = false; 
boolean acceso1 = false;
// Mac Address di Arduino
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
 
// Viene inizializzata la libreria Ethernet di Arduino e il webserver gira sulla porta 80
EthernetServer server(80);
 
void setup() {
  pinMode(pinLED,OUTPUT);
  pinMode(pinLED2,OUTPUT);
  digitalWrite(pinLED,LOW);
  digitalWrite(pinLED2,LOW);
  Serial.begin(9600);
  // Viene inilizzato il webserver e la connessione di rete
  Ethernet.begin(mac);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
void loop() {
  // Vengono ascoltati nuovi client
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // Finisce una richiesta HTTP
    boolean currentLineIsBlank = true;
    String postText ="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if(postText.length()<10){
          postText +=c;
        }
        // Se viene completato l'invio della richiesta HTTP, allora il server invia la risposta
        if (c == '\n' && currentLineIsBlank) {
          // Viene fatta una risposta HTTP, in pratica viene creata una pagina WEB in HTML
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // Dopo la risposta la connessione si interrompe
          client.println();
          client.println("<meta charset=UTF-8>"); // serve per inserire i caretteri speciali
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head> <TITLE>Arduino</TITLE> </head>"); // Viene creato il Titolo
          client.println("<body> <h1> Benvenuto nel Webserver Arduino </h1>"); // Viene inserito del testo
          client.println("<h3> Attraverso questa pagina è possibile accendere e spegnere un LED </h3>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    // Se l'utente ha premuto l'icona per accendere il LED
    if(postText.indexOf("?on") >0){
          digitalWrite(pinLED,LOW);
          Serial.println("Accendi LED");
          acceso = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?off") >0 ){
       digitalWrite(pinLED,HIGH);
        Serial.println("Spegni LED");
        acceso = false;
       }

    // Se l'utente ha premuto l'icona per accendere il LED
    if(postText.indexOf("?on=L2") >0){
          digitalWrite(pinLED2,LOW);
          Serial.println("Accendi LED2");
          acceso1 = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?off=L2") >0 ){
       digitalWrite(pinLED2,HIGH);
        Serial.println("Spegni LED2");
        acceso1 = false;
       }
      // Viene cambiata la pagina WEB a seconda che il LED sia spento, oppure acceso
      if(acceso){
          client.println("<a href=\"./?off\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-red.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> Il LED è accesa </h3>");
        }else{
          client.println("<a href=\"./?on\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-green.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> Il LED è spento </h3>");
          }   

      if(acceso1){
          client.println("<a href=\"./?off=L2\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-red.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> Il LED2 è accesa </h3>");
        }else{
          client.println("<a href=\"./?on=L2\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-green.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> Il LED2 è spento </h3>");
          }   
    delay(1);
    // Viene chiusta la connessione
    client.stop();
    Serial.println("client disconnected");
  }
}

sinceramente non capisco proprio perche non funzioni.
Se qualche buonanima potrebbe aiutarmi gliene sarei veramente grato.

Buona Giornata.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Ok, mi sono presentato ed ho messo il codice fra i tag "CODE"
Tu riesci a darmi una mano a capire dov'è il problema? Grazie

Non conosco bene la programmazione html, e quindi i GET/POST message
Però per il primo rele usi ?on mentre per il secondo usi ?on=L2

Perchè non provi a usare ?on1 e ?on2 ??

ora provo, grazie

Più che altro il problema è che se al posto di ?on metto ?staccionataon non lo legge

Si ma la sintassi completa è ?parametro=valore
Se nel primo caso usi ?on hai un parametro senza valore, mentre poi ?on=L2 hai un parametro il cui valore è L2
Non credo cambia nulla, ma la logica mi dice questo. Poi, ripeto, non credo cambia nulla nell’analisi del messaggio.

P.S. ma non è che con tutto quel codice/testo scritto hai esaurito la poca memoria di Arduino Uno ?
Prova a mettere le varie frasi fisse dentro a F()
esempio client.println( F("") );

quando lo compilo mi dice che ha occupato un 70% dei 2048byte

Il problema è che se cerchi nella richiesta HTTP le stringhe "?on" e "?on=L2", quando trovi la prima trovi anche la seconda, per cui li spegni/accendi entrambi! Come suggerisce nid dovresti risolvere.

SukkoPera:
Il problema è che se cerchi nella richiesta HTTP le stringhe “?on” e “?on=L2”, quando trovi la prima trovi anche la seconda, per cui li spegni/accendi entrambi! Come suggerisce nid dovresti risolvere.

Ho provato come mi avete suggerito voi, ma ancora non funziona, o meglio, se premo uno dei due pulsanti che esegue ad esempio ?stac=on si bugga tutto, sia il primo pulsante che il secondo.

Ti metto qui sotto la parte di codice che ho modificato, come vedi ho messo “?stac=…” e “?pian=…” e ancora niente si risolve, hai altre soluzioni?

  // Se l'utente ha premuto l'icona per accendere il LED
    if(postText.indexOf("?stac=on") >0){
          digitalWrite(pinLED,HIGH);
          Serial.println("Accendi LED");
          acceso = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?stac=off") >0 ){
       digitalWrite(pinLED,LOW);
        Serial.println("Spegni LED");
        acceso = false;
       }

    if(postText.indexOf("?pian=on") >0){
          digitalWrite(pinLED2,HIGH);
          Serial.println("Accendi LED2");
          acceso1 = true;
        }
     // Se l'utente ha premuto l'icona per spegnere il LED
     if(postText.indexOf("?pian=off") >0 ){
       digitalWrite(pinLED2,LOW);
        Serial.println("Spegni LED2");
        acceso1 = false;
       }
      // Viene cambiata la pagina WEB a seconda che il LED sia spento, oppure acceso
      if(acceso){
          client.println("<a href=\"./?pian=off\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-red.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> Il LED è accesa </h3>");
        }else{
          client.println("<a href=\"./?pian=on\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-green.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> Il LED è spento </h3>");
          }   

      if(acceso){
          client.println("<a href=\"./?pian=off\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-red.png\"alt = \"Spegni\" ></a>");
          client.println("<h3> Il LED2 è accesa </h3>");
        }else{
          client.println("<a href=\"./?pian=on\"> <img src = \"http://ismanettoneblog.altervista.org/blog/wp-content/uploads/2014/03/led-green.png\"alt = \"Accendi\" ></a>");
          client.println("<h3> Il LED2 è spento </h3>");
          }   
    delay(1);
    // Viene chiusta la connessione
    client.stop();
    Serial.println("client disconnected");
  }

devi aumentare la lunghezza della stringa

if(postText.length()<10){

ed usa il debug, stampando ad esempio la stringa sulla seriale