IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

S3eduino XIAO équipé ou non d'un BME280 - Problème avec init()


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut S3eduino XIAO équipé ou non d'un BME280 - Problème avec init()
    Bonjour à tous
    J'ai fait des petits modules avec des S3eduino XIAO dont certains peuvent recevoir des capteurs (par exemple un BME280).
    Je souhaite faire un programme unique quelque soit l'équipement du S3eduino XIAO.
    Pour un BME280, je charge la librairie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <Seeed_BME280.h>
    Je crée une instance:
    Je crée une variable globale:
    Puis dans le setup, je veux tester la présence du capteur par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(sens.init()) sensOk=true;    //détecte la présence d'un capteur
    Avec cette dernière ligne, mon programme est planté.
    Merci d'une idée pour solutionner

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 152
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Citation Envoyé par mormic Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(sens.init()) sensOk=true;    //détecte la présence d'un capteur
    Avec cette dernière ligne, mon programme est planté.
    Planté ? Comment ça ? Des messages d'erreur ? Qu'y a-t-il de prévu dans le code si sens.init() renvoie false ?

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Si cette ligne n'est pas présente, le programme continue normalement, en l'occurence une LED clignote pour indiquer que tout va bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      if(sens.init()) sensOk=true;    //détecte la présence d'un capteur
      delai('s',1);
      if(byte(vAdd) == 0 || vAdd=='\0'){
        vAdd = '0';   //pas d'adresse programmée 
        cligne(10,LEDPIN);
      }
      else cligne(cint(vAdd), LEDPIN);  //cligne no adresse
      top=millis();                     //démarre le timer
    Donc rien n'est prévu dans le cas d'un retour false puisque dans l'initialisation j'ai déjà sensOk=false;
    Par contre si cette ligne est présente, plus rien ne se passe! Le programme ne démarre pas et il n'y a pas de message d'erreur.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 152
    Billets dans le blog
    47
    Par défaut
    Tu utilises bien ce module Grove ? https://wiki.seeedstudio.com/Grove-B...Sensor-BME280/

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 599
    Par défaut
    Bonjour,

    Il faudrait voir un code complet car les quelques atomes montrés laissent perplexes (voir commentaires ajoutés commençant par !!!).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       //if(sens.init()) sensOk=true;                // détecte la présence d'un capteur
       sensOk = sens.init();                         // !!! Plus sûr car pas d'effet mémoire
       delai('s',1);
       if(byte(vAdd) == 0 || vAdd == '\0') {         // !!! C'est 2x le même test 
          vAdd = '0';                                // !!! S'il est à 0, je le mets à 0 ?
          cligne(10, LEDPIN);
       }
       else cligne(cint(vAdd), LEDPIN);  //cligne no adresse
       top=millis();                     //démarre le timer
    Si sens.init() n'est appelée qu'une fois, la proposition n'a pas d'impact . Mais si il y a plusieurs appels (par exemple tenter une reconnexion avec un capteur) il est mieux d'avoir sensOK actualisé. Ici, si sensOK est true, il le reste indépendamment de tout résultat d'appel à sens.init().

    Salutations

  6. #6
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    f-leb
    Tu utilises bien ce module Grove ? https://wiki.seeedstudio.com/Grove-B...Sensor-BME280/
    Oui c'est bien cette librairie que j'utilise.
    Le code qui correspond à init() est simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(BME280Read8(BME280_REG_CHIPID) != 0x60)
        return false;
    Alors mon problème vient peut être du fait que rien n'est raccordé sur les lignes SDA SCL du S3eduino, la fonction ne peut donc rien lire?

    Guesset
    Si sens.init() n'est appelée qu'une fois, la proposition n'a pas d'impact . Mais si il y a plusieurs appels (par exemple tenter une reconnexion avec un capteur) il est mieux d'avoir sensOK actualisé. Ici, si sensOK est true, il le reste indépendamment de tout résultat d'appel à sens.init().
    sens.init() n'est appelé qu'au setup. C'est le drapeau sensOk qui fait le boulot ensuite.

  7. #7
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Je viens d'avoir une idée qui semble fonctionner: comme je peux avoir différents modules connectés en I2C sur le S3eduino, au setup, je fais un scan des adresses I2C présentes et ainsi, s'il n'y a rien sur mes lignes SDA SCL, je ne bloque pas mon programme.
    Voilà la routine que j'exécute dans le setup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //*****************scanner I2C************************************
    void rechercheI2c(){
      byte addI2c;
      for(addI2c = 8; addI2c < 127; addI2c++ ){
        Wire.beginTransmission(addI2c);
        if (Wire.endTransmission()==0){
            if(addI2c == 0x76) sensOk=true;   //module BME280 présent
            if(addI2c == 0x38) muxOk=true;    //module PCF8574 présent
        }
      }
    }
    Merci de votre aide toujours aussi précieuse.
    Michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Arduino ESP32] S3EDuino XIAO Transmission HC12 réception message tronqué
    Par mormic dans le forum Arduino
    Réponses: 27
    Dernier message: 07/05/2023, 11h55
  2. problème avec un package non reconnu
    Par youp_db dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/09/2006, 09h37
  3. Réponses: 1
    Dernier message: 28/06/2006, 13h31
  4. Problème avec Me.RecordSource : valeur non conforme
    Par Tchupacabra dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2005, 17h01
  5. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo