Es-ce que le boolean est fiable

Bonjour,
J’ai vraiment une question bête et idiote, mais je arrivé à me poser cette question

Avant le setup() j’ai déclarer cette variable

boolean firstCoords = false;

Elle me sert a envoyer un SMS des la premiere position GPS est recu, uniuqmenet.

Dans mon loop(), j’ai ceci

void loop()
{
  if(readyToGo)
  {
    // Toutes les 20sec, regarde s'il recoit du GPS
    // SCHEDULER TO GET GPS COORDINATE at an interval of INTERVAL_GPS
    if (millis() > scheduler_gps)
    {
      scheduler_gps = millis() + INTERVAL_GPS;
      
        // Si les stat du GPS est supérieur à 1 (2 Fix ou 3 Fix
        if(gps_stat() > 1)
        {
          // Prends les posisitions et envoi les au serveur distant
          if(gps_read())
          {
              #ifdef DEBUG
                Serial.print(F("  Lat : ")); Serial.println(lat);
                Serial.print(F("  Lon : ")); Serial.println(lon);
                Serial.print(F("  Alt : ")); Serial.println(alt);
                Serial.print(F("  Date : ")); Serial.println(dat);
                Serial.print(F("  Sat : ")); Serial.println(sat);
                Serial.print(F("\n"));
              #endif
            // Si c'est la premiere fois, envoi un SMS
            if(firstCoords == false)
            { 
              sprintf(sms_text,"First coords received, Lat: %s, Lon: %s, Alt. %s, Tim: %s",lat,lon,alt,dat);  
             // Envoi SMS avec les coords
              if(sms_send(owner,sms_text))
              {
                // Si envoyé met à true
                firstCoords = true;
                #ifdef DEBUG
                  Serial.println(F("> SMS sent"));
                #endif
              }
              else
              {
                #ifdef DEBUG
                  Serial.println(F("> SMS not sent"));
                #endif
              } 
            }
            // SEND DATAS
            send_HTTP();
          }  // end gps_read
        } // end if gps_stat
    } // End timer
  }
  
  #ifdef DEBUG
    serialhwread();
  #endif
}

Le truc de fou c’est qu’il m’envoi deux fois un SMS.
Puis j’ai lancé une seconde fois en regardant mes debug sur le terminal avec un

Serial.println(firstCoords)

placé en dessous de mes 4 autres Serial.println(lat),

et… je vois que le firstCoords affiche,
une fois 0
une fois 1
puis 0
puis une chiffre supéreur à 1 !!!

Supérieur à 1??? Mais es-ce possible pour un boolean???

Je me suis donc demandé si je devrais pas déclaré firstCoords, en int.
Comme ceci, je controlle juste si firstCoords est inf à 1

 if(firstCoords < 1)

En regardant ma loop(), comment firstCoords peut revenir à false, puisqu’é aucun moment il est mis à false???
D’ou ma question bête…
Bonne nuit

Un boolean "TRUE" se voit affecter la valeur 1
Un boolean "FALSE" se voit affecter la valeur 0
En réalité toute valeur différente de 0 est considérée comme vraie.

En fait le type boolean est créé dans la bibliothèque arduino et en réalité c'est un octet. Avec un micro 8 bits on ne peut pas faire moins.

if (firstcoordonnee==TRUE) peut s'écrire plus court : if (firstcoordonee) puisque le résultat de ce qui est entre parenthèses vaut soit 1 ou 0.

Je n'ai pas vérifié mais il me semble que la définition du type boolean utilise des majuscules puisque TRUE et FALSE sont des constantes.

boolean en minuscule est correct.

tu doit avoir un debordement.
l'ecriture sur une variable en ecrase une autre, ton boolean.
souvent avec un tableau indexé.

post ton code complet.

jean-I:
boolean en minuscule est correct.

Exact, tout à l'heure je n'ai pas pu vérifier, c'est chose faite : même que TRUE et FALSE ne doivent pas être correct !

Extrait du fichier "arduino.h"

typedef uint8_t boolean;
typedef uint8_t byte;

#define true 0x1
#define false 0x0

Ce fichier ainsi que "wiring.c" sont des mines de renseignements.

bonjour,
pourquoi se faire ch.... quand on peut mettre la variable à 1 ou 0 directement au lieu d'utiliser boolean true/false?
sinon tu peux faire ceci

 if(firstCoords != TRUE){
            firstCoords = TRUE;
....
....
....

Et en C++, bool est un type de données pouvant valoir true ou false...
http://en.cppreference.com/w/cpp/language/types

Bonjour,

Vu les symptômes et le morceau de code fourni, je suis en mesure de te dire que le problème vient de ta fonction "sms_send()" qui retourne toujours false, même quand le sms est bien parti.
Il n'y a pas d'autre possibilité, du moins pas avec le code que tu nous donnes.

Post ton code complet en pièce jointe, on sera vite fixé sur l'origine du problème :wink:

Bonsoir,

À un moment tu écris dans le buffer sms_text. Ce buffer ne serait-il pas déclaré juste avant le booléen firstCoords par hasard ?