Problema richieste GET con RN-XV e Arduino UNO

ciao, ho un modulo wifly (RN-XV) con il quale mi collego in wifi alla mia rete privata…riesco a vedere il server e collegarmi…
solo che facendo delle richieste GET al server, riesco a fare solo le prime tre…mentre le altre non le fa…cosa potrebbe essere? (metto il codice)

#include <SPI.h>
#include <WiFlyHQ.h>
#include <SoftwareSerial.h>

#define Light_PIN A1 //imposto il pin a cui è connesso il sensore
#define Smoke_PIN A2 //imposto il pin a cui è connesso il sensore
#define DHT22_PIN 2 //imposto il pin a cui è connesso il sensore

#define ledLight_PIN 7
#define ledSmoke_PIN 8
#define ledTemp_PIN 9

#define Periodo_Invio_Dati 10000 //30s = tempo minimo tra un'invio sul web e l'altro.(ms)
#define Periodo_Lettura_Sensore 2000 //2s = tempo minimo tra una lettura del sensore e l'altra (ms)

#define id_Light 2000
#define id_Smoke 3000
#define id_Temp 4000

char username[] = "root";  //username per login sito
char password[] = "";      //password per login sito

/*WIFI SETTING*/
WiFly wifly;

/* Change these to match your WiFi network */
const char mySSID[] = "***";
const char myPassword[] = "";

//const char site[] = "192.168.1.2";

void terminal();
void print_P(const prog_char *str);
void println_P(const prog_char *str);

char serverName[] = "192.168.1.2";//URL del server a cui connettersi
#define serverPort 80 //porta di connessione
char pageName[] = "pagina_server.php";//nome pagina php per la ricezione dei dati

SoftwareSerial wifiSerial(8,9);

int light_accum = 0; 
float temp_accum = 0.0;
float smoke_accum = 0.0;

long n_camp = 0;

float avg_light = 0.0;
float avg_smoke = 0.0;
float avg_temp = 0.0;

unsigned long time = 0;
unsigned long SendTime = 0;
unsigned long ReadTime = 0;


void setup()
{
  // start the serial library:
  Serial.begin(9600);
  
  gestionWIFI();
  
  pinMode(ledLight_PIN, OUTPUT);
  pinMode(ledSmoke_PIN, OUTPUT);
  pinMode(ledTemp_PIN, OUTPUT);
  Serial.println("Connessione Configurata.");
  delay(1000);//aspetto un secondo per far avviare lo shield ethernet
  Serial.println("Programma Avviato, Setup Terminato!");

}


void loop()
{
    time = millis();  
        
    if(time > SendTime + Periodo_Invio_Dati){
       SendTime = millis();
       avg_light = float(light_accum / double(n_camp));//calcolo la media delle lettura
       avg_smoke = float(smoke_accum / double(n_camp));//calcolo la media delle lettura
       avg_temp = float(temp_accum / double(n_camp));//calcolo la media delle lettura
       if(n_camp > 0)
       {
         Serial.println("connessione...");
         
            //FA QUESTE 3 GET SOLO LA PRIMA VOLTA..E POI NON LO FA PIU

             digitalWrite(ledLight_PIN, HIGH);
             Serial.println("invio light sensor");
             InvioWIFIHttp(serverName,serverPort,pageName,username,password,id_Light,avg_light);
             Serial.println("fine invio");
             delay(100);
             digitalWrite(ledLight_PIN, LOW);
                         
             digitalWrite(ledSmoke_PIN, HIGH);
             Serial.println("invio smoke sensor");
             InvioWIFIHttp(serverName,serverPort,pageName,username,password,id_Smoke,avg_smoke);
             Serial.println("fine invio");
             delay(100);
             digitalWrite(ledSmoke_PIN, LOW);
             
             digitalWrite(ledTemp_PIN, HIGH);
             Serial.println("invio temp sensor");
             InvioWIFIHttp(serverName,serverPort,pageName,username,password,id_Temp,avg_temp);             
             Serial.println("fine invio");
             delay(100);
             digitalWrite(ledTemp_PIN, LOW);         
         
        }else
          Serial.println("Nessuna Campionatura, controllare sensore");
       n_camp = 0; //azzero le variabili per iniziare nuovamente il calcolo della media
       light_accum = 0;
       smoke_accum = 0.0;
       temp_accum = 0.0;   
       Serial.flush();    
       wifly.flush();
    }


    if(time > ReadTime + Periodo_Lettura_Sensore){
        ReadTime = millis();
        light_accum += readLightSensor();
        smoke_accum += readSmokeSensor();
        temp_accum += readTempSensor();        
        
        n_camp++;        
        Serial.print("Campione : ");
        Serial.print(n_camp);
        Serial.print(" - ");
        Serial.println(time);  
    }
}

/*LETTURA SENSORI OMESSA*/

void gestionWIFI(){
    char buf[32];

    println_P(PSTR("Starting"));
    print_P(PSTR("Free memory: "));
    Serial.println(wifly.getFreeMemory(),DEC);

    wifiSerial.begin(9600);
    if (!wifly.begin(&wifiSerial, &Serial)) {
        println_P(PSTR("Failed to start wifly"));
	terminal();
    }

    /* Join wifi network if not already associated */
    if (!wifly.isAssociated()) {
	/* Setup the WiFly to connect to a wifi network */
	println_P(PSTR("Joining network"));
	wifly.setSSID(mySSID);
	//wifly.setPassphrase(myPassword);
	wifly.enableDHCP();

	if (wifly.join()) {
	    println_P(PSTR("Joined wifi network"));
	} else {
	    println_P(PSTR("Failed to join wifi network"));
	    terminal();
	}
    } else {
        println_P(PSTR("Already joined network"));
    }

    print_P(PSTR("MAC: "));
    Serial.println(wifly.getMAC(buf, sizeof(buf)));
    print_P(PSTR("IP: "));
    Serial.println(wifly.getIP(buf, sizeof(buf)));
    print_P(PSTR("Netmask: "));
    Serial.println(wifly.getNetmask(buf, sizeof(buf)));
    print_P(PSTR("Gateway: "));
    Serial.println(wifly.getGateway(buf, sizeof(buf)));
    print_P(PSTR("SSID: "));
    Serial.println(wifly.getSSID(buf, sizeof(buf)));

    wifly.setDeviceID("Wifly-WebClient");
    print_P(PSTR("DeviceID: "));
    Serial.println(wifly.getDeviceID(buf, sizeof(buf)));
  
    if (wifly.isConnected()) {
        println_P(PSTR("Old connection active. Closing"));
	wifly.close();
    }
        
    if (wifly.open(serverName, 80)) {
        print_P(PSTR("Connected to "));
	Serial.println(serverName);

	Serial.println("WIFI ALREADY");
    } else {
        println_P(PSTR("Failed to connect"));
    }    
}

/* Print a string from program memory */
void print_P(const prog_char *str)
{
    char ch;
    while ((ch=pgm_read_byte(str++)) != 0) {
	Serial.write(ch);
    }
}

void println_P(const prog_char *str)
{
    print_P(str);
    Serial.println();
}

/* Connect the WiFly serial to the serial monitor. */
void terminal()
{
    while (1) {
	if (wifly.available() > 0) {
	    Serial.write(wifly.read());
	}


	if (Serial.available() > 0) {
	    wifly.write(Serial.read());
	}
    }
}

void InvioWIFIHttp(char server[], int porta, char pagina[], char username[], char password[], int idSensore, float dato)
{
  /* Send the request */
  //wifly.println("GET /arduino/pagina_server.php?username=&password=&sensore=5&dato=5 HTTP/1.0");
  //wifly.println();
  
  wifly.print("GET /arduino/");
  wifly.print(pagina);
  wifly.print("?username=");
  wifly.print(username);
  wifly.print("&password=");
  wifly.print(password);
  wifly.print("&sensore=");
  wifly.print("5");
  //wifly.print(idSensore);
  wifly.print("&dato=");
  wifly.print("10");
  //wifly.print(dato);
  wifly.println(" HTTP/1.1");
  wifly.print("Host: ");
  wifly.println(server);
  wifly.println();
}

cosa potrebbe essere?? ho anche provato a aprire e chiudere la connessione ogni get che faccio…ma niente…non funziona lo stesso

Non conosco questa libreria wifi, però lo faceva anche a me sulla ethernet shield dopo 2 richieste alla terza si inchiodava, molto probabilmente il buffer della shield è pieno, dopo la richiesta ci vuole un close uno stop qualcosa di simile, ora non so come si scriva la tua istruzione

io ad esempio nella shield uso

client.flush(); client.stop();

senza quello stop si inchioda dopo 3 GET, potrebbe la tua essere una causa diversa, ma verificare se è questa male non fa. ciao

vedo che c’e’ questo if(n_camp > 0)
Stampa come dubug la variabile n_camp alla fine del loop e vedi, se viene portata a 0 il ciclo di GET non lo fa più

ho provato a fare un wifly.flush()..ma niente..dopo provo anche a stampare la variabile che hai detto..ma penso vada a zero

guarda qui

wifly.open("192.168.1.100",8042); wifly.println("Hello, world!"); wifly.close();

l'ho preso qui http://arduino.cc/forum/index.php?topic=99362.0

scrivendo su google "arduino WiFlyHQ.h esempio" ho preso il primo

no nn c'è verso di farlo funzionare..sembra che voglia i parametri di connessione all'inizio del programma..

se provo ad aprire una connessione nel loop s'incazza..mi manda in crash il dispositivo e non fa nient'altro..