salve
finlmente ho iniziato a smanettare con il mio nuovo arduino uno + etherneth shield.
guardate il mio codice:
#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?
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?
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
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 FuturaNet: Il portale per makers ed elettronica by Futura Group 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.
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:
#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
}