Pages: [1]   Go Down
Author Topic: Limpiar el buffer tras un server.write()  (Read 396 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.
Logged

Pages: [1]   Go Up
Jump to: