Go Down

Topic: help etherneth shield (Read 805 times) previous topic - next topic

sergioruello

Sep 27, 2012, 11:03 pm Last Edit: Sep 27, 2012, 11:10 pm by UweFederer Reason: 1
salve
finlmente ho iniziato a smanettare con il mio nuovo arduino uno + etherneth shield.
guardate il mio codice:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

int indexByteMessaggio;
byte inByte;
byte messaggio[] = {
 0, 0,};
EthernetClient client;
byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0x77, 0x4b };
IPAddress server(192,168,0,253); // server cucina

void setup()
             {
 Serial.begin(9600);
delay(1000);
//////////////////////////////////////////////////////////////////

  if (!client.connected()) {
   Serial.println();
   Serial.println("disconnecting.");
   client.stop()
   }
             }
void loop()
       {
if (Serial.available() > 0) {
   inByte = Serial.read();
   if (inByte=='K'){
     indexByteMessaggio=0;
   }
   else
   if (inByte=='k'){
     indexByteMessaggio=0;
     }
   messaggio[indexByteMessaggio] = inByte;
   indexByteMessaggio = indexByteMessaggio + 1;}

if (messaggio[0] == 'k' && messaggio[1] == 'x'){
 
    Serial.println("connecting...");
     if (Ethernet.begin(mac) == 0) {
       Serial.println("Failed to configure Ethernet using DHCP");
      for(;; ) ;
     }
if (client.connect(server, 80)){
   Serial.println("connected");

  client.println("GET /login.htm?usern=e&passw=e HTTP/1.0");
   client.println(); }
   messaggio[0]='0';
   messaggio[1]='0';
   
}

 if (messaggio[0] == 'k' && messaggio[1] == 'c'){
 
    Serial.println("connecting...");
     if (Ethernet.begin(mac) == 0) {
       Serial.println("Failed to configure Ethernet using DHCP");
       // no point in carrying on, so do nothing forevermore:
       for(;; );
     }
if (client.connect(server, 80)){
   Serial.println("connected");

  client.println("GET /index.htm?out1on=ON HTTP/1.0");
   client.println(); }
   messaggio[0]='0';
   messaggio[1]='0';
   
}

if (client.available()) {
   
  char c = client.read();
  Serial.print(c);}
           
}

inviando tramite seriale " kx " il server 192,168,0,253 mi risonde correttamente e visualizzo
la rispettiva pagina html

se invio una seconda volta il codice " kx " o " kc " si blocca tutto. Se premo reset sull'arduino
il primo codice inviato tutto procede regolarmente ma al secondo codice inviato al client arduino si blocca
tutto come mai?

ringrazio anticipatamente per l'aiuto

pablos

#1
Sep 27, 2012, 11:29 pm Last Edit: Sep 27, 2012, 11:41 pm by pablos Reason: 1
O non hai copiato tutto o nel loop non chiudi il client  client.stop()  il buffer assai limitato si satura e saluti.

a cosa serve nel setup questo?
Code: [Select]
if (!client.connected()) {
   Serial.println();
   Serial.println("disconnecting.");
   client.stop()
   }


perchè non c'e' ethernet.begin?
tralasciamo il fatto che non specifichi quale shield hai. Se c'e' la sd card vanno specificati i 2 pin di enable/disable 4-10

ciao
no comment

sergioruello

ciao
grazie 1000 per l'aiuto.
Ho eth shield con sd - sono solo alla prima settimana devo ancora studiare un po'


pablos

Spiega meglio cosa vuoi fare sarà più facile aiutarti

Non capisco cosa centra la seriale con la pagina htm
Quote
inviando tramite seriale " kx " il server 192,168,0,253 mi risonde correttamente e visualizzo la rispettiva pagina html


???
La pagina dovrebbe visualizzarsi sul browser ed essere chiamata da li ...
ciao
no comment

sergioruello

#4
Sep 28, 2012, 02:37 pm Last Edit: Sep 28, 2012, 02:49 pm by sergioruello Reason: 1
hai ragione scusa,
ho un display touch della screen demmel  ( http://www.elettroshop.com/dpp-bt3224z63511-bfh-modulo-grafico-ilcd-320x240/  ) che programmato a parte (non gestito da arduino) invia sulla seriale stringhe
tipo kc o kx a due caratteri. Volevo interfacciarlo con l'arduino uno + eth shield con sd card in modo che
ricevendo il carattere "kc" arduino comandi una scheda server (CONTROLLO ETHERNET 4 INGRESSI E 4 USCITE http://www.futurashop.it/index.html codice  7100-FT823M) tramite lan.
La sheda controllo ethernet riceve comandi tipo  htt://192.168.0.253index.htm?out1on=ON.
Con lo schetch che ho provato dopo ogni comando devo resettare l'arduino per continuare a funzionare.


PaoloP

Secondo me dovresti procedere in questo modo:
nel setup inizializzi la seriale e la scheda ethernet (con o senza dhcp)
nel loop invece controlli la ricezione della seriale e acquisisci il messaggio. Quando il messaggio è completo lo passi come parametro ad un "select case" che in base al codice letto richiama una funzione che invia i parametri alla seconda scheda ethernet.
Al posto del select case potresti crearti una sola funzione che accetta un parametro in ingresso e si comporta di conseguenza.

Esempio di pseudo codice:
Quote
#include bla bla bla

>> inizializzazioni variabili globali
bla bla bla

void setup() {
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
     Serial.println("Failed to configure Ethernet using DHCP");
     for(;; ) ;
  }
}

void loop() {
if (Serial.available() > 0) {
   >> leggi il messaggio
}

if (messaggio == completo) {
>> funzione invia testo via ethernet(messaggio)
}
}

void invia testo via ethernet(messaggio){
>> apri client bla bla bla
>> invia il testo xxyyzz in base al comando ricevuto
>> chiudi il client bla bla bla
}

Go Up