Go Down

Topic: Lo zipit Z1 e arduino (Read 2226 times) previous topic - next topic

cece99


cosa vuol dire non funziona?non compila? non funziona nulla?

a parte il doppio

Code: [Select]
while (client.connected()) {

e il

Code: [Select]
client.stop(); //disconnetti il client

che metterei dopo il while, dovrebbe funzionare....

Code: [Select]
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/

#include <Ethernet.h>
#include "SPI.h"

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  client = server.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {


      Serial.println("invio");
      server.print("a");
      Serial.println("attendo una risposta di almeno 5 caratteri");
      while (client.available() < 5){
        //do nothing
      }
      Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
      server.print("Grazie per avermi parlato, hai scritto:");
      while (client.available()){
        server.print( client.read() );
      }

      delay(10); //dai il tempo al client di ricevere il messaggio
      client.stop(); //disconnetti il client


    }
    client.stop(); //disconnetti il client
  }
}


edit: come non detto! client.availble() NON server.available()!

con server.available() ottieni un oggetto di tipo EthernetClient con dei dati da leggere.
con client.available() ottieni il numero di byte che quel client ha ricevuto.

oltre al fatto che se usi server.write  scrivi a tutti i client connessi, mavabe, qui dipende da cosa vuoi fare

Cavolo! Volete proprio confondermi? Non ho capito ancora cosa c'entra quell' edit.... potresti spiegarmi bene bene?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lesto

con quell'edit dico che hai sbagliato completamente la logica.

server.available() ritorna un oggetto EthernetClient che ha dei dati da leggere con la read.
client.available() ritorna il numero di dati da leggere con la read() da quel client.

esempio: ci sono 2 client connessi. nessuno scrive:
sia server.available() ritorna NULL (nessun oggetto client ha ricevuto dati)
client1.available() e client2.available() ritornano 0 (ovvero 0 dat da leggere)

ora client1 scrive "ciao" ad arduino:
server.available() ritorna client1 (che è un oggetto di tipo EthernetClient)
client1.available() ritorna 4 (ci sono 4 byte da leggere, perchè pgni lettera è un byte, se hai usato la codifica ASCII o UTF8, 2 byte per lettera se hai usato la codifica UTF16... quasi tutti usano la ASCII o la UTF8)
client2.available() ritorna 0
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

cece99


con quell'edit dico che hai sbagliato completamente la logica.

server.available() ritorna un oggetto EthernetClient che ha dei dati da leggere con la read.
client.available() ritorna il numero di dati da leggere con la read() da quel client.

esempio: ci sono 2 client connessi. nessuno scrive:
sia server.available() ritorna NULL (nessun oggetto client ha ricevuto dati)
client1.available() e client2.available() ritornano 0 (ovvero 0 dat da leggere)

ora client1 scrive "ciao" ad arduino:
server.available() ritorna client1 (che è un oggetto di tipo EthernetClient)
client1.available() ritorna 4 (ci sono 4 byte da leggere, perchè pgni lettera è un byte, se hai usato la codifica ASCII o UTF8, 2 byte per lettera se hai usato la codifica UTF16... quasi tutti usano la ASCII o la UTF8)
client2.available() ritorna 0

Quindi il codice giusto sarebbe?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lesto

ehhh la pappa pronta no  :P
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

cece99


ehhh la pappa pronta no  :P

Ehh sto facendo casino....
così va bene?
Code: [Select]
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/

#include <Ethernet.h>
#include "SPI.h"

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192, 168, 1, 4 };

EthernetServer server(23);
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  Serial.println("parto");
}

void loop()
{
  client = client.available();
  if (client) {
    // an http request ends with a blank line

    while (client.connected()) {


      Serial.println("invio");
      server.print("a");
      Serial.println("attendo una risposta di almeno 5 caratteri");
      while (client.available() < 5){
        //do nothing
      }
      Serial.println("risposta ricevuta! Rispondoi e disconnetto il client, di seguito quello che ho letto:");
      server.print("Grazie per avermi parlato, hai scritto:");
      while (client.available()){
        server.print( client.read() );
      }

      delay(10); //dai il tempo al client di ricevere il messaggio
      client.stop(); //disconnetti il client


    }
    client.stop(); //disconnetti il client
  }
}[code]
[/code]
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lesto

se client.available() ritorna un numero, come fai ad essegnarlo ad una variabile di tipo EthernetClient?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

cece99


se client.available() ritorna un numero, come fai ad essegnarlo ad una variabile di tipo EthernetClient?

Dove?
Sto facendo un casino pazzesco........
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Go Up