Go Down

Topic: Problème avec mon code (Read 919 times) previous topic - next topic

Michel_B

Bonsoir tout le monde,

J'ai problème avec mon code.

Si je laisse à la fin le delay, toutes les 10 secondes la requete sera bien envoyée au serveur. De ce coté tout fonctionne bien.
Je souhaite remplacer le delay par une boucle while pour envoyer ma requete une fois, quand les minutes et secondes sont =0 (autrement dit 1 fois / heure).
Avec cette programmation je sort bien de ma boucle au moment décidé mais je n'ai plus ma connection au serveur et la requête n'est pas envoyée.

Si quelqu'un a une idée...

Merci d'avance


Voici le code, je l'ai alégé pour une comprehension plus aisée.

Code: [Select]
Client client(serverip, serverport);                    

bool connected = false;                                  
                                               
int Heure;
int Minute;
int Seconde;
int Mois;
int Jour;
int An;

void setup()
{
   lcd.begin(20, 4);
   Serial.begin(9600);
   Serial.println("Initializing Ethernet.");
   Ethernet. begin(hwaddr, ipaddr);                  // start up ethernet  
   sensors.begin();                                  // start up the library    
   sensors.getDeviceCount();               // store the number of sensors to the variable numSensors,
}

void loop()
{
 if(!connected)   {                                    // if "not" connected print: not connected ;)
    Serial.println("Not connected");  
        if (client.connect()){                             // if connected, set variable connected to "true" and    
        connected = true;                              
        sensors.requestTemperatures();                  // send the request for temperature to sensors (all sensors)      
        delay(100);

       
         Heure=(RTC.get(DS1307_HR,true));
         ....
         ....

         client.print("GET /essaiArduinoBase2/update_db.php?");
         ...
         ...
     

         }

    else{
        Serial.println("Cannot connect to Server");        
        }
}
    else{
      delay(100);                                                
      while (client.connected() && client.available()) {        
      char c = client.read();                                    
      Serial.print(c);                                              
        }                                                            

Serial.println();                                                
client.stop();                                              
connected = false;                                          

}
delay(10000);  // Avec ce delay c'est ok, on renvoie bien la requête au serveur

/*  // Si je remplace par cette boucle j'en sort bien, mais plus de connection au serveur
do
{
delay(1000);
Minute=(RTC.get(DS1307_MIN,true));      
Seconde=(RTC.get(DS1307_SEC,true));
} while ((Minute !=0) || (Seconde !=0));
*/

}

gerse

Je pense que tu ne dois plus etre connecté. Timeout sur la connection TCP_KEEPALIVE? Je ne sais pas si cela existe aexc la pile tcp de l'arduino

gerse

Il y a cette instruction pour verifier l'etat de la connexion:
http://arduino.cc/en/Reference/ClientConnected

zoroastre

Yep!

Plus simple. Tu stockes l'heure en cours dans une variable et tu la compare à l'heure.

If (heure != heure_precedente) {
...
do something;
...
heure_precedente = heure;
}

@+

Zoroastre.
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message ;)

Michel_B

Quote
Je pense que tu ne dois plus etre connecté.


Bonjour,

Même si je mets un delay d'une heure cela fonctionne donc ce n'est pas une question de durée.

Quelle est la difference pour mon prog entre un delay de 10 secondes par exemple et un do while qui va durer 10s avant de quitter la boucle ?
J'avoue que je ne pige pas trop sur ce coup la.

Si quelqu'un a une explication à me fournir ce serait cool car je n'ai vraiment aucune idée.

++

Go Up