aide station meteo et carte SD

Bonjour,

Je suis en train de construire une petite station météo qui pour l’instant marche pas trop mal.

Les données sont enregistré sur une carte SD.

J’aurais bien voulu crée un fichier par jour, afin de rendre la lecture des données plus simple et mettre comme nom de fichier simplement la date et c’est la que tout pêche …

Sur le forum il y un article sur une station météo similaire (en plus poussé), Lien, j’ai donc essayé de m’inspiré de son code (juste la partie SD) pour tenté de faire une sauvegarde par jour mais sa ne marche pas.

Voici sa fonction où il crée et écrit sur sa carte SD

void sdcar()
{
  
  heures=hour();
  minutes = minute();
  secondes =second();
  Mois=month();
  jour_mois= day();
  annee=year();
  sensors.requestTemperatures();
  int temp_Ext_sd= (sensors.getTempCByIndex(0));
  int pression_atm_sd = ((bmp.readPressure()/100)+17);
  sprintf(myData,"%u/%u/%u    %u:%u:%u  %u  %u", annee,Mois,jour_mois,heures,minutes,secondes,temp_Ext_sd,pression_atm_sd); 
  sprintf(nom_fichier,"%u_%u.txt",Mois,jour_mois);
  Serial.println(nom_fichier);
  myFile = SD.open(nom_fichier, FILE_WRITE);
  myFile.println(myData);
  myFile.close();
  /*
  myFile = SD.open("Meteo3.txt");
  // Lecture du contenu du fichier
  if (myFile)
  {
  Serial.println("Meteo3.txt:");
  while (myFile.available()) {
  Serial.write(myFile.read());
  }
  // Fermeture fichier
  myFile.close();
  }
  else
  {
 
  Serial.println("erreur ouverture meteo2.txt");
  }
  */
  comp_sd = comp_sd+1;
  
}

En pièce jointe je vous met mon code complet sans la modification pour la sauvegarde SD

Et la ma fonction SDcard en essayant de faire comme dans le code de l’autre article

void sdcar(float humidite, float temperature, String temps, String date, String jour, float pression)
{  

  sprintf(donnee,"%u/%u/%u/    %u/%u/%u", jour,date,temps,temperature,Tmax,Tmin);
  sprintf(nomFichier,"%u.txt",date);
  Serial.println(nomFichier);
  monFichier = SD.open(nomFichier, FILE_WRITE);
  monFichier.println(donnee);
  monFichier.close;
       
 
}

Si vous avez des questions n’hésitez pas.
Merci pour votre aide et passé de bonne fête de fin d’année

StationV1.7.ino (11.3 KB)

Quel est l'intérêt de créer un fichier par jour, dont le nom contient la date ? Pourquoi ne pas créer un seul fichier auquel tu ajouterais une ligne à chaque mesure, avec la date et l'heure comme tu le fais déjà, le tout au format CSV ou JSON ou XML par exemple ? Ça te permettrait de faire des traitements ensuite sur un PC

%u c’est pas pour une String ... regardez la doc de sprintf() (qui prend les mêmes formats que printf())

Aucune raison d’utiliser une String en plus pour cela...

Merci de vaut réponse

lesept:
Quel est l'intérêt de créer un fichier par jour, dont le nom contient la date ? Pourquoi ne pas créer un seul fichier auquel tu ajouterais une ligne à chaque mesure, avec la date et l'heure comme tu le fais déjà, le tout au format CSV ou JSON ou XML par exemple ? Ça te permettrait de faire des traitements ensuite sur un PC

Pour ne pas cherché les données d'une journée au milieu de toutes la semaine par exemple je sais que je pourrais faire un CTRL+F dans mon fichier mais c'était pour trié directement.
Et pour le traitement sur PC quand j'importe mon CSV dans excel impossible de faire des graphiques il comprend pas les valeurs mais sa c'est un autre soucis.

J-M-L:
%u c’est pas pour une String ... regardez la doc de sprintf() (qui prend les mêmes formats que printf())

Aucune raison d’utiliser une String en plus pour cela...

J'ai essayé en mettant printf() et les valeurs qui conviennent mais c'est toujours pareil sa ne veut pas du coup je comprend plus grand chose...

mouton13:
J'ai essayé en mettant printf() et les valeurs qui conviennent mais c'est toujours pareil sa ne veut pas du coup je comprend plus grand chose...

Non il faut conserver sprintf qui fabrique le nom du fichier mais il ne faut pas lui donner en paramètre une String mais un unsigned (qui est dénoté par le %u) —> lisez la doc de sprintf et n’utilisez pas la classe String. Ne travaillez qu’avec des cStrings et des entiers

Ok j'avais mal compris et j'ai compris mon erreur je passé la date entière en paramètre donc une chaîne alors qu'il me fallait juste le jour et le mois qui sont des entiers.

Merci sa marche maintenant c'est super.

cool :slight_smile: