Go Down

Topic: Limpiar el buffer tras un server.write() (Read 455 times) previous topic - next topic

Buenas, estoy con un proyecto en el que conecto a traves de un socket el arduino(servidor) y el PC(cliente) y a traves de este socket quiero dar ordenes al arduino. Ahora estoy intentando cambiar la hora de mi RTC a traves de este socket. Esto lo he conseguido hacer pero los mensajes que envio desde el socket al ordenador a traves de la orden server.write() no me llegan como deberian.

El fallo esta en que si envio una cadena de pongamos 20 caracteres y la siguiente vez envio una de 8 lo que hace el sobreescribir los ultimos 8 sobre los 20 anteriores y envia los 8 primeros del ultimo envio y los 12 siguientes del primero, supoongo que sera solo limpiar algun buffer pero no encuentro cual, os adjunto el codigo por si preferis verlo

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

// Enter a MAC address, IP address and Portnumber for your Server below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xB7, 0xC7 };//mac
IPAddress ip(192,168,0, 5);

String tiempo[]={"0.","1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12.","13.","14.","15.","16.","17.","18.","19.","20.","21.","22.","23.","24.","25.","26.","27.","28.","29.","30.","31.","32.","33.","34.","35.","36.","37.","38.","39.","40.","41.","42.","43.","44.","45.","46.","47.","48.","49.","50.","51.","52.","53.","54.","55.","56.","57.","58.","59."};
int serverPort=60;
int i,j;
int NuevaHora,NuevoMinuto;
int aux=0;
int set =1;
String probando="";
String MenEnviar="";



// Initialize the Ethernet server library
// with the IP address and port you want to use
EthernetServer server(serverPort);

void setup()
{
 
  // start the serial for debugging
  Serial.begin(9600);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip); 
  Serial.println("Server started and listening at ");//log
  Serial.println(Ethernet.localIP());
 

  server.begin(); 
}

/*probar la funcion readString.concat(c) //Almacenar los caracteres en la variable readString*/

void loop()
{
  int set2=0;
 
  // listen for incoming clients
       set2 = CicloComunicacion();     
  if(set2 == 3)// Si la info se recib ebien entra en este bucle, en el cual se realizara la accion requerida en el comando introducido
  {
     Serial.println("El mensaje que he recibido desde funcion es:"+probando);
     set2=0;
     set=1;
    if(aux)
   {
     for(i=0;i<60;i++)
     {
       if(tiempo[i] == probando)
       {
         if(aux ==1)
           {
         NuevaHora=i;
         Serial.print("La nueva hora introducida es:");
         Serial.println(NuevaHora);
         aux=2;
           }
         else if(aux=2)
           {
           NuevoMinuto=i;
           Serial.print("Los minutos introducidos son:");
           Serial.println(NuevoMinuto);
           aux=0;
           }
       }
     }
   }
  }
}






//Funcion para escuchar lo que nos envien desde el PC*****************************************************
int CicloComunicacion(){ 
  EthernetClient client = server.available();
   if (client && set)
  {
    Serial.println("Hay 1 cliente");
    Serial.flush ();
    String clientMsg ="";
    MenEnviar="";
    int ModificaHora= 0;
    while (client.connected() && set)
    {
     
     if (client.available() && set)
      {
        char c = client.read();
        //Serial.print("Caracter recien recibido:");
        //Serial.println(c);
        clientMsg+=c;//store the recieved chracters in a string
        //La frase escrita en el PC y que se recibe aqui tiene que terminar en "." para saber cuando ha terminado
        if (c == '.')
        {
          Serial.println("Message from Client:"+clientMsg);//print it to the serial
          client.println("You said:"+clientMsg);//modify the string and send it back
          set=0;
          probando=clientMsg;
          MenEnviar="Mensaje recibido";
         }
      }
      delay(100);
     if(probando == "modifica hora.")
     {
       //MenEnviar ="Introduce la nueva hora que deseas pulsa intro y haz lo mismo despues con los minutos";
       aux=1;
     }     
     if(aux == 1)
      server.write("mensaje recibido   ");
     else     
       server.write("Introduce la nueva hora que deseas pulsa intro y haz lo mismo despues con los minutos");
     
    }   
    // give the Client time to receive the data
    delay(100); 
    Serial.print("El valor que voy a retornar es:");
    Serial.println(probando);
    // close the connection:
    client.flush();   
    client.stop();
    if(probando == clientMsg)
    {
      clientMsg="";     
      return 3;
    }
    else
      return 0;
  }
}




gracias de antemano.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy