[conseil] enregistement sur carte SD

Bonjour,
Je suis totalement novice en matière d'arduino. Après plusieurs jours de recherches sur internet j'ai réussi a faire les exercices de base. Maintenant j'aimerai réaliser le capteur qui m'intéresse. Pour cela dans un premier temps j'aimerai enregistrer les mesures de température et d'humidité de mon capteur sur un fichier csv dans une carte SD. A écrire comme ça ça parait simple... Mais malheureusement pour moi c'est la première de mon instrumentation et elle ne fonctionne pas...
Alors voilà le matériel que j'ai acheté : capteur de température et humidité DHT11 (dont j'ai trouvé sur un tutorial comment le paramétrer), un schield avec carte SD et une carte arduino Uno.
Je connecte le tout ensemble et ensuite j'ai injecté le code suivant. Au final quand je souhaite lire ma carte SD j'ai un fichier csv qui a été créé mais il n'y a rien dedans...
J'aurai donc aimé avoir quelques conseils pour comprendre pourquoi cela ne fonctionne pas.
En vous remerciant.

#include <SPI.h>     // Inclusion de la librairie SPI (communications bas niveau)
#include <SD.h>      // Inclusion de la librairie SD (carte SD en format FAT)
#define DHT11_PIN 0      // Capteur temperature et humidite sur le AO

//definition du capteur
byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while(!(PINC & _BV(DHT11_PIN)));  // wait for 50us
    delayMicroseconds(30);

    if(PINC & _BV(DHT11_PIN)) 
      result |=(1<<(7-i));
    while((PINC & _BV(DHT11_PIN)));  // wait '1' finish
  }
  return result;
}

//definition du fichier ou on enregistre les donnees
File logFile; // Fichier de log
const unsigned long pauseBetweenReadings = 900000UL; // 90 000 ms = 90 secondes = 1.5 minutes


void setup()
{
   
  //pour le capteur de temperature et humidite
  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);

  //pour initialiser le port serie pour les communications
  Serial.begin(9600);// Initialisation du port série
  Serial.println("Iniciando lectura de datos...");
  
  pinMode(10, OUTPUT); // SS SPI en OUTPUT 
 
  /* Initialisation de la carte SD (SS = 4) */
  if (!SD.begin(4)) {
    Serial.println(F("Initialisation de la carte SD : echec !"));
    for(;;); // Boucle infini
  }
  Serial.println(F("Initialisation de la carte SD : succes !"));
 
  /* Ouverture du fichier de log */
  logFile = SD.open("log.csv", FILE_WRITE);
  if (logFile)
    Serial.print(F("Ouverture du fichier de log : succes !"));
  else {
    Serial.println(F("Ouverture du fichier de log : echec !"));
    for(;;); // Boucle infini
    logFile.println("NumeroMesure;humidite; temperature;Millis");
  }

}

void loop()
{
  byte dht11_dat[5];
  byte dht11_in;
  byte i;

  // start condition
  // 1. pull-down i/o pin from 18ms
  PORTC &= ~_BV(DHT11_PIN);
  delay(18);
  PORTC |= _BV(DHT11_PIN);
  delayMicroseconds(40);

  DDRC &= ~_BV(DHT11_PIN);
  delayMicroseconds(40);

  dht11_in = PINC & _BV(DHT11_PIN);

  if(dht11_in)
  {
    Serial.println("dht11 start condition 1 not met");
    return;
  }
  delayMicroseconds(80);

  dht11_in = PINC & _BV(DHT11_PIN);

  if(!dht11_in)
  {
    Serial.println("dht11 start condition 2 not met");
    return;
  }
  delayMicroseconds(80);
  // now ready for data reception
  for (i=0; i<5; i++)
    dht11_dat[i] = read_dht11_dat();

  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);

  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
  // check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
  
  {
  logFile.print(millis() / 1000); // NOTE un affiche de la date/heure via un DS1307 serait plus approprié
    logFile.print(';');
    logFile.print(dht11_dat[0],DEC);
    logFile.print(';');
    logFile.print(dht11_dat[2],DEC);
    logFile.println();
     
    // Attente avant la prochaine mesure
    delay(pauseBetweenReadings);
  }
}

bonjour,
inspire toi de ce script

EDIT : tu n'ouvre pas ton fichier pour écrire dedans en plus dans ton loop, donc ca peux pas le faire

Bonjour,

Tu devrais t'inspirer du code d'exemple "Datalogger" comme te le propose infobarquee.

Pour la partie DHT11 je te conseille d'utiliser la fonction de mon tuto :

Bonjour,
grâce à vos conseil j'ai repris mon code et maintenant cela fonctionne! ;-)))
j'ai cependant quelques petites questions supplémentaires...

Pour le code de l'horloge dont je me suis inspirée sur snootlab, il y a marqué :
"Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation"
qu'est ce que cela veut dire? Et comment le configurer?

Ensuite j'ai ajouté à mon système un capteur d'ouverture de porte. Je l'ai codé comme on code un bouton poussoir mais j'aimerai que dès que je déconnecte les deux éléments la mesure soit enregistrée dans le fichier. à l'heure actuelle, je lit l'état du capteur d'ouverture que lorsque j'ai la température et l'humidité c'est à dire tous les 15 minutes (car j'ai mis un "const unsigned long F_refresh = 900000"), mais si j'ouvre entre temps je n'arrive pas à enregistrer la mesure à ce moment précis. Je n'ai l'état que lors de la prochaine mesure. Est ce possible de faire ce que je veux? ou avez vous quelques éléments pour m'orienter?

En vous remerciant.