Problema al guardar datos en SD si no conecta al servidor.

Hola de nuevo.

Tengo un problema con mi código, que lo tengo todo redactado y con las funciones todas funcionando independientemente. A la hora de unirlas en un programa, no acaba de funcionar.

Explico un poco el tema: Dispongo de dos sensores, cuyos valores quiero enviar periódicamente a mi servidor, en una tabla mysql que someto mediante PHP, junto con la fecha que inicialmente también la cojo de un servidor horario. Hasta aquí, siempre que haya conexión, no hay problema.

El problema viene que cuando falla la conexión, tiene que guardarme los registros en la SD, y al retomar la conexión enviarlos.

Adjunto el código. Las funciones a las que llamo están verificadas y funcionan por separado. Si alguien quiere saber de alguna que me lo comente.

void setup()
{
    Serial.begin(9600);
    iniWifly();
    iniDate();
    iniSD();
} 

void loop()
{
    iniWifly();
    valor = medSens();
    valor = valor+getDate(); 
    if (wifly.open(site, 80)) {
      if (posSD=0){
        reporte();
        if(SD.exists("test.txt")){  //Miramos si existe un archivo llamado test.txt
          SD.remove("test.txt");    //Lo eliminamos.
        }
      }
      else{
        reporte();
        while(posSD>=0){  //Barrido para leer todo el documento
          valor=leerSD(posSD);
          posSD--;
          reporte();
        }
         if(SD.exists("test.txt")){  //Miramos si existe un archivo llamado test.txt
            SD.remove("test.txt");    //Lo eliminamos.
          }
      }
    }
    else{
      guardarSD();
      posSD++;
    }
    wifly.close();
    delay(30000);
}

Muchas gracias! Un saludo.

Código completo!!

iniWifly(); // no se sabe que hace ni que librería usa

Evalua si se comparta bien cuando no hay conexión.

Las pongo:

void iniWifly(){
    if (!wifly.begin(&Serial)) {
	return;
    }
    if (!wifly.isAssociated()) {
	wifly.setSSID(mySSID);
	wifly.setPassphrase(myPassword);
	wifly.enableDHCP();
	if (!wifly.join()) {	   
	    return;
	}
    } 
}

Las demás no creo que intervengan en el código… Yo creo que el progrema reside en el “if (wifly.open(site, 80))” que el else sólo lo hace eventualmente…

Por cierto, utilizo para wifly la libreria WiflyHQ.

Un saludo.

Crea un sketch simple que solo detecte conectado desconectado y asegúrate que funciona bien.

Evidentemente si no encuentra una IP de parte del servidor DHCP del router sale sin informarlo y claro ese es la razón de conexión interrumpida o bien, no tengo IP.

if (!wifly.join()) {	   
	    return;
	}

NOTA: nos cambiaron el editor del foro

En el sketch siguiente, funciona:

include <WiFlyHQ.h>
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(8,10);
const char mySSID[] = "XXXX";
const char myPassword[] = "XXXX";
const char site[] = "XXXX";
WiFly wifly;



void setup()
{
    Serial.begin(9600);
    wifiSerial.begin(9600);
    iniWifly();
} 

void loop()
{
    iniWifly();
    if (wifly.open(site, 80)) {
      Serial.println("Conecta al servidor.");
    }
    else{
      Serial.println("No conecta al servidor.");      
    }
    wifly.close();
    delay(30000);
}


void iniWifly(){
    if (!wifly.begin(&wifiSerial,&Serial)) {
	return;
    }
    if (!wifly.isAssociated()) {
	wifly.setSSID(mySSID);
	wifly.setPassphrase(myPassword);
	wifly.enableDHCP();
	if (!wifly.join()) {	   
	    return;
	}
    } 
}

Te muestra por pantalla si conecta o si no conecta sin problemas.

Pudiera ser que va algo justillo de memoria al compilar el sketch todo entero? No me salta ni el aviso de que pueda ser inestable…

Un saludo.

Edito para quitar la password de la red y el servidor.

¿Alguien puede echarle un ojo?, por favor que no encuentro el error.

Un saludo.

cuando haces eso, recuerda agregar el link de tu librería.
Yo no la tengo.

Perdona surbyte, la libreria es Libreria WiflyHQ.