Ardunio por red se para.

Hola.

Tengo dos arduinos con dos placas ethernet shield.

Mi sistema lo que hace es que un arduino mande comandos por red y el otro los interprete. La parte de interpretar no da problemas, ya que con el hyperterminal o telnet puedes estar horas "hablandole".

El problema esta en el arduino que envia.
Le pongo por ejemplo el siguiente codigo:

#include <Ethernet.h>

// network configuration. gateway and subnet are optional.
byte mac[] = { 0xDE, 0xFE, 0xFE, 0xFE, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 199 };
byte server[] = { 192, 168, 1, 200 };
Client client(server, 23);
int i;
void setup()
{
Ethernet.begin(mac, ip);
client.connect();
}

void loop()
{
for(i=1;i<6;i++){
delay(50);
client.print(i);}

for(i=6;i>1;i--){
delay(50);
client.print(i);}
}

Lo que hace es mandas numeros del 1 al 6 en modo creciente y luego decreciente.
Y pasados unos dos minutos mas o menos deja de emitir sin razon aparente.

Tu le puedes mandar comandos por hyperterminal y sigue funcionando pero hasta que no reseteas el arduino que emite no comienza otra vez a mandar numeros.

Que creeis que puede ser.

Gracias de antemano ^^

Hola:

Hace tiempo estuve trasteando con el arduino como cliente y me pasaba lo mismo. El arduino mandaba los datos al PC y al cabo de un rato se paraba. Me estuve volviendo loco porque era algo esporádico, y al final, en un rincón de la documentación algo relativo al número de conexiones abiertas simultáneamente. Total, que modifiqué el código y a partir de ahí empezó a funcionar de maravilla. Te lo paso entero, pro si te sirve de ayuda:

#include <Ethernet.h>
#include <stdio.h> 

//Numero de milisegundos entre conexiones consecutivas al servidor
const long DELAYSERVER = 1000;

byte bArduinoMAC[] = {0xBE, 0xBE, 0xCA, 0xFE, 0x00, 0x02 };
byte bArduinoIP[] = {10, 0, 0, 222 };
byte bServerIP[] = {10, 0, 0, 74 };

Client cArduino(bServerIP,80);

void setup(){
  Ethernet.begin(bArduinoMAC, bArduinoIP);
  Serial.begin(9600);
  delay(1000);
}

void loop(){
  if (sendSensorData()) {
    Serial.print(".");      
  }
  delay(DELAYSERVER);
}

boolean sendSensorData() {

  boolean bSent = false;
  char cValor[256];
  sprintf(cValor,"GET /bhive/data_store.php?pet_valor=%d HTTP/1.0",dato_que_obtengo_por_ahi);

  if(cArduino.connect()){
    cArduino.println(cValor);
    cArduino.println();
    cArduino.flush();  
    bSent = true;    
  } 

  //http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235991468/14#14
  cArduino.stop();
  while ( cArduino.status() != 0 ) { 
    delay(5); 
  }

  return bSent;

}

Acabo de descubrir el fallo xD.

Conecte otro arduino al cabe RX para monitorizar lo que se recibia y "casualmente" los caracteres transmitidos eran 4096. El cuanto vi que era binario me lo empece a oler....

El error estaba es el comando del servidor "server.Write(server.Read)"

Al parecer algun buffer se llenaba.

Fue quitarselo y funcinar jeje.

Gracias por tu ayuda socio :wink: