Busco implementar un watchdog en un codigo de comunicacion, con el fin de evitar cuelgues en caso de interrumpirse la transmision de datos. Aqui anexo el codigo:
if (sendATcommand(F("AT+FTPPUT=1"), F("+FTPPUT: 1,1,"), 30000)==1)
{
//Serial.println(F("Iniciando proceso de transferencia de datos"));
int data_size=0, aux;
while(Serial.available()==0);
aux = Serial.read();
do{
data_size *= 10;
data_size += (aux-0x30);
while(Serial.available()==0);
aux = Serial.read();
}while(aux != 0x0D);
snprintf(comA, sizeof(comA), "AT+FTPPUT=2,%d", data_size);
snprintf(comB, sizeof(comB), "+FTPPUT: 2,%d", data_size);
myFile = SD.open(filename);
if (myFile) {
unsigned long archivosize = myFile.size();
while(myFile.available()){
while(archivosize >= data_size){
if (sendATcommand(comA,comB,3000) == 1){
for(int d = 0; d < data_size; d++){
Serial.write(myFile.read());
archivosize -= 1;
}
}
}
snprintf(comA, sizeof(comA), "AT+FTPPUT=2,%d", archivosize);
snprintf(comB, sizeof(comB), "+FTPPUT: 2,%d", archivosize);
if (sendATcommand(comA,comB,3000) == 1){
for(int t = 0; t < archivosize; t++){
Serial.write(myFile.read());
}
}
}
myFile.close();
}
delay(500);
if (sendATcommand(F("AT+FTPPUT=2,0"), F("+FTPPUT: 1,0"), 30000)==1)
{
//Serial.println(F("Archivo enviado"));
//Serial.println(F("Sesion finalizada"));
digitalWrite(3,HIGH); //Led titila indicando que se realizo el envio de manera exitosa
delay(500);
digitalWrite(3,LOW);
delay(500);
digitalWrite(3,HIGH);
delay(500);
digitalWrite(3,LOW);
delay(500);
digitalWrite(3,HIGH);
delay(500);
digitalWrite(3,LOW);
}
else
{
sendATcommand(F("AT+FTPPUT=2,0"), F("OK"), 30000);
}
}
else
{
// Serial.println(F("Error sesion FTP"));
digitalWrite(3,HIGH);
delay(5000);
digitalWrite(3,LOW); //Led se mantiene encendido por 5 segundos indicando un error al enviar el archivo
}