Go Down

Topic: Arduino e le scelte (Read 347 times) previous topic - next topic

docdoc

Domanda: non sarebbe possibile costruire le pagine in modo tale che, ad esempio, la scelta del led facesse apparire la scelta del tempo di accensione, e solo dopo la scelta della seconda inviare ad Arduino entrambe le informazioni? (ad esempio con tre led e tre tempi per led potresti fare, se si potesse, quattro pagine:
Se fossero 4 pagine queste dovrebbero risiedere nel web server ossia in Arduino, con 4 interrogazioni quindi complicherebbe un poco la cosa.
Comunque tutto è possibile, si può giocare anche con codice javascript sulla pagina stessa per far fare qualcosa localmente in modo "automatico" in base alle scelte ed azioni.
Ma se l'OP già non conosce bene l'HTML ed il C, vuoi inserirgli anche il javascript? :)
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Lollo9906

Ciao, ho sperimentato un po' qua e la e, per me che di HTML so ben poco, ho preferito provare per la strada che mi aveva consigliato Guglielmo, ovvero utilizzando una flag.
Ora come ora sono arrivato a questo punto

parte dichiarazione
Code: [Select]


#include <Ethernet.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <String.h> //gestione stringhe
byte flag = 0;
int tempo = 0;
int led = 0;
//dati Ethernet shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
EthernetServer server(80); //imposto porta protocollo HTTP
String ascoltatore1; //dichiarazione stringa
String ascoltatore2; //dichiarazione stringa




void setup
Code: [Select]


void setup() {
  Serial.begin(9600);

  //Ethernet shield
  Ethernet.begin(mac); //inizializzazione
  server.begin(); //avvio server
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP()); //stampa indirizzo del server
}



void loop
Code: [Select]


void loop() {

  EthernetClient client = server.available(); //attendo l'arrivo di un client

  if (client) { //se c'è il cliente deve..
    boolean currentLineIsBlank = true;
    azioni();
    while (client.connected()) {
      if (client.available()) {
        if (flag == 0) {
          char c = client.read(); //..leggere i caratteri che invia
          ascoltatore1.concat(c); //concatena i caratteri del client
          if (c == '\n' && currentLineIsBlank) { //se arrivo a fine riga
            if (ascoltatore1.indexOf("/?rosso") > 0) { //controllo che nell'url ci sia rosso
              led = 1;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            else if (ascoltatore1.indexOf("/?verde") > 0) { //controllo che nell'url ci sia verde
              led = 2;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            client.println("HTTP/1.1 200 OK"); //dico al client che è tutt'ok - standard http
            client.println("Content-Type: text/html");//indico il formato - standard http
            client.println("Connection: close");
            client.print("<!DOCTYPE HTML>");
            client.println(); //necessario per non buggare
            client.println("<html>"); //inizio codice html
            client.println("<head><title>GIGIO2.0</title> <link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' /></head>");
            client.println("<body><center><h1>GIGIO 2.0 </h1>");
            client.println("<a href='/?rosso'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/avanti.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?verde'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/indietro.gif\" width='200' height='150' ></a>");
            client.println("</body>");
            client.println("</html>");
            ascoltatore1 = "";
            break;
          }
          if (c == '\n') {
            //scrive una nuova riga
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank = false;
          }
        }
        else if (flag == 1) {
          char d = client.read();
          ascoltatore2.concat(d);
          if (d == '\n' && currentLineIsBlank) { //se arrivo a fine riga
            if (ascoltatore2.indexOf("/?10_sec") > 0) { //controllo che nell'url ci sia 10_sec
              tempo = 1;
              flag = 0;
              Serial.print("flag");
              Serial.print(flag);
              Serial.print("led");
              Serial.print(led);
            }
            else if (ascoltatore2.indexOf("/?5_sec") > 0) { //controllo che nell'url ci sia 5_sec
              tempo = 2;
              flag = 0;
              Serial.print("flag");
              Serial.print(flag);
              Serial.print("led");
              Serial.print(led);
            }
            else if (ascoltatore2.indexOf("/?15_sec") > 0) { //controllo che nell'url ci sia 15_sec
              tempo = 3;
              flag = 0;
              Serial.print("flag");
              Serial.print(flag);
              Serial.print("led");
              Serial.print(led);
            }
            else if (ascoltatore2.indexOf("/?7_sec") > 0) { //controllo che nell'url ci sia 7_sec
              tempo = 4;
              flag = 0;
              Serial.print("flag");
              Serial.print(flag);
              Serial.print("led");
              Serial.print(led);
            }

            client.println("HTTP/1.1 200 OK"); //dico al client che è tutt'ok - standard http
            client.println("Content-Type: text/html");//indico il formato - standard http
            client.println("Connection: close");
            client.print("<!DOCTYPE HTML>");
            client.println(); //necessario per non buggare
            client.println("<html>"); //inizio codice html
            client.println("<head><title>GIGIO2.0</title> <link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' /></head>");
            client.println("<body><center><h1>GIGIO 2.0 </h1>");
            client.println("<a href='/?10_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/ferma.jpg\" width='200' height='150' ></a>");
            client.println("<a href='/?5_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/destra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?15_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/sinistra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?7_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/automatica.gif\" width='200' height='150' ></a>");
            client.println("</body>");
            client.println("</html>");
            ascoltatore2 = "";
            break;
          }
          if (d == '\n') {
            //scrive una nuova riga
            currentLineIsBlank = true;
          }
          else if (d != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank = false;
          }
        }
      }
    }
    delay(10);
    client.stop();
  }
}




void azioni , che si trova subito sotto if (client) a inizio void loop
Code: [Select]


void azioni() {
    if (led == 1 && tempo == 1) {
    Serial.print("rosso per 10sec");
  }
  else if (led == 1 && tempo == 2) {
    Serial.print("rosso per 5sec");
  }
  else if (led == 1 && tempo == 3) {
    Serial.print("rosso per 15sec");
  }
  else if (led == 1 && tempo == 4) {
    Serial.print("rosso per 7sec");
  }
  else if (led == 2 && tempo == 1) {
    Serial.print("verde per 10sec");
  }
  else if (led == 2 && tempo == 2) {
    Serial.print("verde per 5sec");
  }
  else if (led == 2 && tempo == 3) {
    Serial.print("verde per 15sec");
  }
  else if (led == 2 && tempo == 4) {
    Serial.print("verde per 7sec");
  }
}



Ho creato il codice anche facendo un po di riferimento all'esempio WebServer della libreria Ethernet, ma ci sono degli errori lo stesso... dato che nemmeno mi apre la pagina quando inserisco l'indirizzo ip sul browser.
Non so dove sto sbagliando :(

Lollo9906

Sono riuscito a fare il programma che mi serviva, l'unico intoppo e' che se dopo aver fatto la prima scelta, non riapro il web server su una nuova pagina web, ogni tanto mi da un problema di rallentamento.
Questo puo' essere dovuto al browser?

Code: [Select]


#include <Ethernet.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <String.h> //gestione stringhe
int flag = 0;
int tempo = 0;
int led = 0;
//dati Ethernet shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
EthernetServer server(80); //imposto porta protocollo HTTP
String ascoltatore1; //dichiarazione stringa
String ascoltatore2; //dichiarazione stringa

void setup() {
  Serial.begin(9600);

  //Ethernet shield
  Ethernet.begin(mac); //inizializzazione
  server.begin(); //avvio server
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP()); //stampa indirizzo del server
}

void loop() {

  if (flag == 0) {
    EthernetClient client = server.available(); //attendo l'arrivo di un client
    if (client) { //se c'è il cliente deve..
      boolean currentLineIsBlank = true;

      while (client.connected()) {
        if (client.available()) {

          char c = client.read(); //..leggere i caratteri che invia
          ascoltatore1.concat(c); //concatena i caratteri del client
          if (c == '\n' && currentLineIsBlank) { //se arrivo a fine riga
            if (ascoltatore1.indexOf("/?rosso") > 0) { //controllo che nell'url ci sia rosso
              led = 1;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            else if (ascoltatore1.indexOf("/?verde") > 0) { //controllo che nell'url ci sia verde
              led = 2;
              flag = 1;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("led");
              Serial.println(led);
            }
            client.print(
              "HTTP/1.1 200 OK\r\n"
              "Content-Type: text/html\r\n"
              "Connection: close\r\n"  // la connessione viene chiusa dopo la risposta
              "\r\n");
            client.print("<!DOCTYPE HTML>\r\n");
            client.println(); //necessario per non buggare
            client.print("<html>\r\n");
            client.println("<head>\r\n");
            client.println("<title>\r\n");
            client.println("DAMBOBOTS");
            client.println("</title>\r\n");
            client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
            client.println("</head>\r\n");
            client.println("<body>\r\n");
            client.println("<center>\r\n");
            client.println("<h1>\r\n");
            client.println("DAMBOBOTS ");
            client.println("</h1>\r\n");
            client.println("<a href='/?rosso'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/avanti.gif\" width='200' height='150' ></a>\r\n");
            client.println("<a href='/?verde'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/indietro.gif\" width='200' height='150' ></a>\r\n");
            client.println("</body>\r\n");
            client.println("</html>\r\n");
            ascoltatore1 = "";
            break;
          }
          if (c == '\n') {
            //scrive una nuova riga
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank = false;
          }
        }
      }
      delay(10);
      client.stop();
    }
  }
  if (flag == 1) {
    EthernetClient client = server.available(); //attendo l'arrivo di un client
    if (client) { //se c'è il cliente deve..
      boolean currentLineIsBlank1 = true;
      while (client.connected()) {
        if (client.available()) {
          char d = client.read();
          ascoltatore2.concat(d);
          if (d == '\n' && currentLineIsBlank1) { //se arrivo a fine riga
            if (ascoltatore2.indexOf("/?10_sec") > 0) { //controllo che nell'url ci sia 10_sec
              tempo = 1;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?5_sec") > 0) { //controllo che nell'url ci sia 5_sec
              tempo = 2;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?15_sec") > 0) { //controllo che nell'url ci sia 15_sec
              tempo = 3;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }
            else if (ascoltatore2.indexOf("/?7_sec") > 0) { //controllo che nell'url ci sia 7_sec
              tempo = 4;
              flag = 2;
              Serial.println("flag");
              Serial.println(flag);
              Serial.println("tempo");
              Serial.println(tempo);
            }

            client.print(
              "HTTP/1.1 200 OK\r\n"
              "Content-Type: text/html\r\n"
              "Connection: close\r\n"  // la connessione viene chiusa dopo la risposta
              "\r\n");
            client.print("<!DOCTYPE HTML>");
            client.println(); //necessario per non buggare
            client.print("<html>\r\n");
            client.println("<head>\r\n");
            client.println("<title>\r\n");
            client.println("DAMBOBOTS");
            client.println("</title>\r\n");
            client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
            client.println("</head>\r\n");
            client.println("<body>\r\n");
            client.println("<center>\r\n");
            client.println("<h1>\r\n");
            client.println("DAMBOBOTS ");
            client.println("</h1>\r\n");
            client.println("<a href='/?10_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/ferma.jpg\" width='200' height='150' ></a>");
            client.println("<a href='/?5_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/destra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?15_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/sinistra.gif\" width='200' height='150' ></a>");
            client.println("<a href='/?7_sec'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/automatica.gif\" width='200' height='150' ></a>");
            client.println("</body>");
            client.println("</html>");
            ascoltatore2 = "";
            break;
          }
          if (d == '\n') {
            //scrive una nuova riga
            currentLineIsBlank1 = true;
          }
          else if (d != '\r') {
            // riceve un carattere sulla linea
            currentLineIsBlank1 = false;
          }
        }
      }
      delay(10);
      client.stop();
    }
  }
  if (flag == 2) {
    azioni();
  }
}

void azioni() {
    if (led == 1 && tempo == 1) {
    Serial.println("rosso per 10sec");
  }
  else if (led == 1 && tempo == 2) {
    Serial.println("rosso per 5sec");
  }
  else if (led == 1 && tempo == 3) {
    Serial.println("rosso per 15sec");
  }
  else if (led == 1 && tempo == 4) {
    Serial.println("rosso per 7sec");
  }
  else if (led == 2 && tempo == 1) {
    Serial.println("verde per 10sec");
  }
  else if (led == 2 && tempo == 2) {
    Serial.println("verde per 5sec");
  }
  else if (led == 2 && tempo == 3) {
    Serial.println("verde per 15sec");
  }
  else if (led == 2 && tempo == 4) {
    Serial.println("verde per 7sec");
  }
}


Questo e' il programma funzionante.

Go Up