data loguer 2 capteurs de température DHT 11

Bonjour
J’ai un petit souci je voudrais data loguer 2 capteurs de température DHT 11.
Mais je n’arrive pas à insérer le deuxième DHT 11
fichier ino

Bonjour,

Il ne faut pas essayer d'imbriquer deux fonctions readDHT11.
Il faut reprendre le readDHT11() original et l'appeler deux fois, une fois pour le premier DHT11 et une seconde fois pour le second DHT11 (c'est pour ça qu'on lui passe les paramètres)

Mets ton code avec des balises de code au lieu d'obliger à le charger.

Bonjour j’ai modifié mais ce qui est déclaré ne l’est toujours pas
Désolé mais je dépasse la taille réglementaire
fichier ino

helllo, j'ai modifié ton code
mais pas de DHT11 pour tester.
meme si ca plante, tu verras dans quel esprit faire tes modif

#include <SD.h>      
#include <Wire.h>    
#include "RTClib.h"  

// Intervalle d'acquisition de données
#define LOG_INTERVAL  1000 

// Intervalle d'écriture sur disque SD
// Régler sur LOG_INTERVAL pour enregistrer à chaque mesure (plus sûr)
// Régler sur 10 x LOG_INTERVAL pour enregistrer une fois sur 10, plus rapide et économe en énergie
#define SYNC_INTERVAL 1000

uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL   1 // 1 pour afficher sur le serial port
#define WAIT_TO_START    0 // Attente du  serial dans le  setup()

// Les 2 LED témoins du datalogger
#define redLEDpin 2      
#define greenLEDpin 3    

// Nos capteurs météo ici
// Capteur 1 =   Photorésistance (lumière) sur A0
// Capteur 2-3 = DHT11 Température et Humidite  sur 5 et 6
byte DHT_PIN ;//tampon
const byte DHT1_PIN = 5;     
const byte DHT2_PIN = 6;     
byte temperature0, humidity0;   //tampon
byte temperature1, humidity1;   //dht1
byte temperature2, humidity2;   //dht2

/** Code d'erreur de la fonction readDHT11() */
enum {
  DHT_SUCCESS, //!< Pas d'erreur
  DHT_TIMEOUT_ERROR, //!< Temps d'attente dépassé
  DHT_CHECKSUM_ERROR //!< Données reçues erronées
};

//  indicateur pour mesurer le bandgap
#define BANDGAPREF 14           

// On relie 3.3V sur ARef, tension précise qui sert de référence aux mesures analogiques
#define aref_voltage 3.3         
#define bandgap_voltage 1.1     

RTC_DS1307 RTC; // Objet  Real Time Clock

// Shield data-logger, SD = pin 10
const int chipSelect = 10;

// Le fichier d'enregistrement des mesures
File logfile;

void setup() {
 Serial.begin(9600); 
  Serial.println("Mon datalogger Meteo ");
  Serial.println();
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);

#if WAIT_TO_START
  Serial.println("Taper une touche pour lancer le log");
  while (!Serial.available());
#endif //WAIT_TO_START

  Serial.print("Initialiser la carte SD...");
  pinMode(10, OUTPUT);

  // verif si SD ok
  if (!SD.begin(chipSelect)) {
    error("Carte SD echec ou absente");
  }
  Serial.println("carte initialisee");

  // Créer un nouveau fichier, on les numérote successivement
  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // N'ouvrir un nouveau fichier que s il n'existe pas
      logfile = SD.open(filename, FILE_WRITE);
      break;  // quiter la boucle
    }
  }

  if (! logfile) {
    error("Ne peut pas creer le fichier");
  }

  Serial.print("Enregistrer dans : ");
  Serial.println(filename);

  // connection  RTC
  Wire.begin(); 
  if (!RTC.begin()) {
    logfile.println("RTC echec");
#if ECHO_TO_SERIAL
    Serial.println("RTC echec");
#endif 
  }

//Première ligne du fichier CSV pour excel
logfile.println("millis,stamp,dateheure,temperature1,humidite1,vcc");   
#if ECHO_TO_SERIAL
  Serial.println("millis, stamp, dateheure, temperature1, humidite1, vcc");   
#endif //ECHO_TO_SERIAL

  // Pourfixer aref sur autre chose que 5V
  analogReference(EXTERNAL);
}

void loop() {
 DateTime now;  //Instant actuel de mesure

  // Delai de scan entre mesures
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));

  digitalWrite(greenLEDpin, HIGH); //allumer, debut mesures

  // Enregistrer les millisecondes écoulées depuis le départ
  uint32_t m = millis();
  logfile.print(m);           
  logfile.print(", ");   
#if ECHO_TO_SERIAL
  Serial.print(m);         
  Serial.print(", "); 
#endif

  // Mesurer le time RTC
  now = RTC.now();
  logfile.print(now.unixtime()); // secondes depuis 01/01/1970
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);  //année
  logfile.print("/");
  logfile.print(now.month(), DEC);  //mois
  logfile.print("/");
  logfile.print(now.day(), DEC);   //jour
  logfile.print(" ");
  logfile.print(now.hour(), DEC);  //heure
  logfile.print(":");
  logfile.print(now.minute(), DEC);  //minutes
  logfile.print(":");
  logfile.print(now.second(), DEC);  //secondes
  logfile.print('"');
#if ECHO_TO_SERIAL
  Serial.print(now.unixtime()); // secondes depuis 01/01/1970
  Serial.print(", ");
  Serial.print('"');
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print('"');
#endif //ECHO_TO_SERIAL

 //=== Lecture de nos capteurs meteo

  //Serial.println();  //ligne suivante
 // Serial.print(", ");
  //Serial.print(lumiere);  //lecture de la photorésistance

  //Humidite et temperature
  // Lecture de la température et de l'humidité + gestion des erreurs


  DHT_PIN=DHT1_PIN; temperature0=temperature1; humidity0=humidity1;
  lecture_DHT();
  DHT_PIN=DHT2_PIN; temperature0=temperature2; humidity0=humidity2;
  lecture_DHT();
}
  void lecture_DHT(){
  switch (readDHT(DHT_PIN, &temperature0, &humidity0)) {
  case DHT_SUCCESS:
    Serial.print(", ");
    Serial.print((int) humidity0);
    Serial.print(", ");
    Serial.print((int) temperature0);
    break;
 
  case DHT_TIMEOUT_ERROR:
    Serial.println(F("Temps d'attente depasse !"));
    break;
 
  case DHT_CHECKSUM_ERROR:
    Serial.println(F("Erreur de checksum !"));
    break;
  }  
 
   // === Stocker ces mesures en fichier de log
  logfile.print(", ");   
  logfile.print((int) temperature0);
  logfile.print(", ");   
  logfile.print((int) humidity0);

  //Enregistrer aussi le Vcc estimé en mesurant le 1.1V interne
  analogRead(BANDGAPREF);
  delay(10);
  int refReading = analogRead(BANDGAPREF);
  float supplyvoltage = (bandgap_voltage * 1024) / refReading;

  logfile.print(", ");   //Fichier
  logfile.print(supplyvoltage);
#if ECHO_TO_SERIAL
  Serial.print(", ");     //Ecran
  Serial.print(supplyvoltage);
#endif // ECHO_TO_SERIAL

  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println();
#endif 

  digitalWrite(greenLEDpin, LOW);  //Eteindre en fin de mesure



  //Puis on écrit sur le disque, ne pas synchroniser trop souvent, requiert 2048 bytes of I/O to SD card
  //cequi consomme du temps et de la puissance
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();

  // Clignoter la LED rouge pour montrer qu'on sauvegarde les data sur la carte SD + update FAT
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW);
}


//========Fonction DHT
  byte readDHT(byte pin, byte* temperature0, byte* humidity0) {
  byte data[5] = { 0 }, counter = 7, index = 0;
  unsigned int timeout;
  uint8_t bit = digitalPinToBitMask(pin);
  uint8_t port = digitalPinToPort(pin);
  volatile uint8_t *ddr = portModeRegister(port); // Registre MODE (INPUT / OUTPUT)
  volatile uint8_t *out = portOutputRegister(port); // Registre OUT (écriture)
  volatile uint8_t *in = portInputRegister(port); // Registre IN (lecture)
 
  /* Réveil du capteur */
  *ddr |= bit;
  *out &= ~bit;
  delay(18); 
  *out |= bit;
  delayMicroseconds(40);
  *ddr &= ~bit;
 
  /* Attente de la réponse du capteur */
  timeout = 0;
  while(!(*in & bit))
    if (++timeout == 10000)
      return DHT_TIMEOUT_ERROR;
  timeout = 0;
  while(*in & bit)
    if (++timeout == 10000)
      return DHT_TIMEOUT_ERROR;
 
  /* Lecture des données du capteur (40 bits) */
  for (byte i = 0; i < 40; ++i) {
    timeout = 0;
    while(!(*in & bit))
      if (++timeout == 10000)
        return DHT_TIMEOUT_ERROR;

    unsigned long t = micros();
    timeout = 0;
    while(*in & bit)
      if (++timeout == 10000)
        return DHT_TIMEOUT_ERROR;
 
    if ((micros() - t) > 40)
      data[index] |= (1 << counter);
  
    if (counter-- == 0) {
      counter = 7;
      ++index;
    }
  }

  *humidity0 = data[0];
  *temperature0 = data[2];
 
  /* Vérifie la checksum */
  if (data[4] != (data[0] + data[2]))
    return DHT_CHECKSUM_ERROR;
  else
    return DHT_SUCCESS;
}
// === gestion des erreurs
void error(char *str)
{
  Serial.print("erreur: ");
  Serial.println(str);

  // La LED rouge indique les erreurs
  digitalWrite(redLEDpin, HIGH);
}

Bonjour sa fonctionne, j’ai juste changer quelle ligne pour la forme
Merci beaucoup

merci du retour

a petit souci pour la gestion du csv le capteur 2 utilise la ligne inférieur au lieu d'étre sur la méme ligne probablement normale

dans cette partie de code remplace la ligne en gras

logfile.print(", "); //Fichier
logfile.print(supplyvoltage);
#if ECHO_TO_SERIAL
Serial.print(", "); //Ecran
Serial.print(supplyvoltage);
#endif // ECHO_TO_SERIAL
logfile.println();
#if ECHO_TO_SERIAL
Serial.println();
#endif

digitalWrite(greenLEDpin, LOW); //Eteindre en fin de mesure

par cette ligne

if (DHT_PIN==DHT2_PIN){logfile.println();}else{logfile.print();}

si c'est une sauvegarde des données du capteur 2 alors on fait un retour à la ligne
sinon, c'est une sauveragde des données du capteur 1 et on ne fait pas de retour à la ligne. à voir s'il faut remplacer le else{logfile.print();} par un else{logfile.print(",");} ou tout autre motif pour séparer les données du capteur 1 de celle du capteur 2

Désole sa ne fonctionne pas (message d'erreur)

C’est ok j’ai jouer avec les virgules et les espaces afin d’avoir une présentation viable sous excel

oui, il fallait
else{logfile.print("");} et non else{logfile.print();}

Sa marche le csv de donné est bien aligné après conversion sur excel c’est super merci
Bon plus que à ajouter le capteur de pression !!