accenzione led via web


buona sera tutti , miei studi iniziano dare frutti desiderati grazie ad arduino.
ho solo un problemino che mi rivolgo in mani esperte come voi.
seguo una guida su youtube su come accendere 2 led via browser.
fin qui tutto bene
(arduino) ethernet shield + led control browser (lan local ip)

il problema e che molte volte non si accede alla pagina web (quasi sempre ) infatti mi sono collegato la 1 volta con 2 led e funzionava (anche se male ) e un altra volta quando ho compilato la sketch con 3 led ( da solo )

come mai non riesco ad entrare nell arduino tramite browser??

ecco la sketch:



#include <spi.h>
#include <client.h>
#include <ethernet.h>
#include <server.h>

//determina il mac e l'ip della pagina web
byte mac[] = {
  0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed};
byte ip[] = {
  192, 168, 1, 239};

//porta di comunicazione         
ethernetserver server(272);

//scrive il numero di pin corrispondente ai led
int ledpin1 = 9;
int ledpin2 = 8;
int ledpin3 = 7;

//lunghezza della stringa inviata
string readstring = string(30);

//imposta all'avvio led spenti
boolean ledon1 = false;
boolean ledon2 = false;
boolean ledon3 = false; 

void setup(){
  ethernet.begin(mac, ip);
  pinmode(ledpin1, output); 
  pinmode(ledpin2, output);
  serial.begin(9600);
}

void loop(){
  ethernetclient client = server.available();
  if (client) //se esiste un cliente
  {
    while (client.connected()) // se il cliente e' connesso
    {
      if (client.available()) //se e' tutto ok per iniziare
      {
        char c = client.read(); //leggi singoli caratteri inviati
        if (readstring.length() < 100)
        {
          readstring += c; //concatena caratteri
        } 
        if (c == '\n') //vede se c'e' il carattere di fine stringa, per individuare che e' finita
        {
          if(readstring.indexof("l1=1") > 0) //imposta una variabile di tipo boleana (vero-falso) per gli stati del led
          {
            ledon1 = true;
          }
          else if (readstring.indexof("l2=1") > 0)
          {
            ledon2 = true;             
          }
     else if (readstring.indexof("l3=1") > 0)
          {
            ledon3 = true;             
          }
          else if(readstring.indexof("l1=0") > 0)           

     {
            ledon1 = false;
          }
          else if (readstring.indexof("l2=0") > 0)
          {
            ledon2 = false;             
          }
     else if (readstring.indexof("l3=0") > 0)
          {
            ledon3 = false;             
          }



          //crea la pagina html (verra' aggiornata ad ogni istruzione nuova)
          client.println("http/1.1 200 ok");
          client.println("content-type: text/html");
          client.println();
          client.println("<html><head></head><body>");

          //titolo led 1
          client.println("<h1>led 1</h1>");

          //operazioni da fare quando si clicca per attivare ledon1: 
          if (ledon1) {
            digitalwrite(ledpin1, high);   
            client.println("stato: on<br>");
          }
          else {

            //operazioni da fare quando si clicca per spegnere ledon1: 
            digitalwrite(ledpin1, low );
            client.println("stato: off<br>");
          }

          //crea pulsanti relativi led1   
          client.println("<a href='?l1=0'>spegni</a>");
          client.println("<a href='?l1=1'>accendi</a>");

          //inserisce il divisore
          client.println("<br>______________________________<br>");

          //ttolo led2
          client.println("<h1>led 2</h1>");

          //operazioni da fare quando si clicca per attivare ledon2: 
          if (ledon2) {
            digitalwrite(ledpin2, high); 
            client.println("stato: on<br>");
          }
          else {

            //operazioni da fare quando si clicca per spegnere ledon2:   
            digitalwrite(ledpin2, low);
            client.println("stato: off<br>");
          }

          //crea pulsanti relativi led2
          client.println("<a href='?l2=0'>spegni</a>");
          client.println("<a href='?l2=1'>accendi</a>");
    
     //inserisce il divisore
          client.println("<br>______________________________<br>");

     //ttolo led3
          client.println("<h1>led 3</h1>");

          //operazioni da fare quando si clicca per attivare ledon3: 
          if (ledon3) {
            digitalwrite(ledpin3, high); 
            client.println("stato: on<br>");
          }
          else {

            //operazioni da fare quando si clicca per spegnere ledon3:   
            digitalwrite(ledpin3, low);
            client.println("stato: off<br>");
          }

          //crea pulsanti relativi led3
          client.println("<a href='?l3=0'>spegni</a>");
          client.println("<a href='?l3=1'>accendi</a>");

      //chiude tag html per la pagina
          client.println("</body></html>");

          //si prepara per una nuova istruzione
          readstring="";

          //termina le operazioni cliente
          client.stop();
        }
      }
    }
  }
}
--------------------------------------------------------------------------------
la mia procedura e semplice :
collego l' arduino alla com 11 (virtuale)
incollo la sketch
tolgo usb
attendo 10 secondi
ricollego il tutto
ma dal web non entra
192.168.1.239:273 (impossibile visualizzare la pagina)

start
esegui
cmd
ping 192.168.1.239 (perfetto tutt ok)
arpo il modem telecom ma negli accessori collegati non vedo l' arduino e normale

controlla che cosa succede dal lato router. ad esempio, prova disabilitare il servizio dhcp e configura le macchine che parleranno all'arduino con ip statici. fai un ping dal router all'arduino.

se non va, prova ad escludere proprio il router e collegare direttamente l'arduino ad un pc con un cavo ethernet incrociato o attraverso uno switch. anche qui, usa indirizzi ip manuali.

ah, non credo che il problema sia questo, ma ricordati di chiudere tutti tag html, anche quelli individuali, così:

code: [select]

bla, bla, bla.

<br />

bla, bla, bla...


e se ti serve un divisore, prova ad usare <hr />

a proposito, è tutto più chiaro se qui sul forum formatti la parte codice con due tag "code", così:

code: [select]

[kode]
prima riga del listato
seconda riga
......
n-esima riga
[/kode]


...ma scrivi "code" con la "c", mi raccomando!


Arduino Forum > International > Italiano > Generale (Moderator: leo72) > accenzione led via web


arduino

Comments

Popular posts from this blog

invalid use of void expresion in FlexiTimer2 library

error: a function-definition is not allowed here before '{' token

LED Strip Code