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 :

Problème I2C avec 2 arduino (maitre-esclave)


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 99
    Par défaut Problème I2C avec 2 arduino (maitre-esclave)
    Bonjour a tous,

    Configuration:
    J'ai 1 arduino UNO en (maître) avec écran LCD et 1 arduino nano en (esclave) avec un capteur de température (DHT22_PIN), le tout branché en I2C.

    Je souhaite récupérer du (maître) 2 valeurs (température et hygrométrie) qui sont géré par l'esclave.
    Code du maitre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Wire.requestFrom(1, 2);  // Demande a esclave1 , 2 octets 
      if (2 <= Wire.available()) {   
        byte temp = Wire.read(); 
        Serial.print("Temp: "); Serial.print(temp);
        //byte hygro = Wire.read(); 
        //Serial.print("Hygro: "); Serial.print(hygro);
    }
    Code esclave:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void requestEvent() {
      byte t = myDHT22.getTemperatureC(); 
      byte h = myDHT22.getHumidity();
      Wire.write(t);
      //Wire.write(h);
    }
    Problème:
    Je récupère bien la valeur Température (ou) Hygrométrie mais pas les 2 en même temps.
    Comment récupérer les 2 valeurs en 1 seul requête ou faut'il utiliser 2 requêtes " Wire.requestFrom(1, 2); " (mais comment faire la différence en (temp ou hygro) !!

    J'espère avoir été claire, MERCI d'avance pour les réponse.

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    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 197
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    On peut essayer avec un tableau de 2 octets :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    byte tableau[2];
    tableau[0] = myDHT22.getTemperatureC(); 
    tableau[1] = myDHT22.getHumidity();
    Wire.write(tableau, 2);

    voir write() :
    Wire.write(data, length)

    data: an array of data to send as bytes

    length: the number of bytes to transmit

    code non testé...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 99
    Par défaut
    Bonjour,

    Problème résolu.

    Maitre : envoie requête + récupération des 2 valeurs ok.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Wire.requestFrom(1, 4);  // Demande a esclave1 , 4 octets 
      if (4 <= Wire.available()) { // si quatre octets disponibles    
        gTempReel = Wire.read();  // lire valeur de l'octet 1
        gHygroReel = Wire.read();  // lire valeur de l'octet 1
        Serial.print("gTempReel: "); Serial.println(gTempReel); 
        Serial.print("gHygroReel: "); Serial.println(gHygroReel);          
      }
    Esclave : Tableau pour réponse avec les 2 valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void requestEvent() {
      byte tableau[2];
      tableau[0] = myDHT22.getTemperatureC(); 
      tableau[1] = myDHT22.getHumidity();
      Wire.write(tableau, 2);
    }
    Merci f-leb pour la réponse qui fonctionne trés bien.

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

Discussions similaires

  1. maitre esclave / labview arduino
    Par ramzi008 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 16/03/2015, 11h29
  2. Problème de mot de passe avec un disque dur esclave
    Par sef25 dans le forum Windows XP
    Réponses: 2
    Dernier message: 14/02/2007, 11h57
  3. Problème avec le disque dur esclave.
    Par JavaAcro dans le forum Composants
    Réponses: 1
    Dernier message: 20/12/2005, 10h30
  4. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 12h00
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

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