écriture de la date et heure sur sd cart

Bonjour petit problème à vous soumettre sur un programme, l’heure apparaît bien sur le moniteur serial mais sur la sd c’est un peut n'importe quoi, je joint le programme

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
#include <FreqCounter.h>  //Inclure la librairie de fréquence

    // Variables utilisées
    unsigned long frq;    //fréquence mesurée
    int cnt;              //nombre de mesures réalisées
    int encoches=9;  //16;       //nombre d encoches de la roue codeuse (1 ou plus)
    float trmin;  //vitesse de rotation en tour/min


RTC_DS1307 rtc;

File fichierSD;

int sensorValue;

void setup() {
 Serial.begin(9600);
 Serial.println("Frequencemetre");
//Pour la carte SD=====================
 //Initialisation de l'instance
 if(!SD.begin(10)) {//10 pour notre carte, peut etre different
 Serial.println(F("Initialisation impossible !"));
 return;
 }
 Serial.println(F("Initialisation OK"));
//Fin carte SD==========================

//Pour l'horloge=========================
 #ifdef AVR
 Wire.begin();
 #else
 Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
 #endif
 rtc.begin();

 if (! rtc.isrunning()) {
 Serial.println("RTC ne fonctionne PAS!");
   //Si RTC ne fonctionne pas
   //Met à l'heure à date à laquelle le sketch est compilé
   // RTC.adjust(DateTime(__DATE__, __TIME__)); 
 // La ligne qui suit ajuste le RTC à la date et time du moment de compilation(si connectee a ordinateur)
 rtc.adjust(DateTime("Nov  3 2017","9:32:10"));
 //Cela fonctionne également :
    //RTC.adjust(DateTime("Dec  5 2012","12:00:00"));
    //RTC.adjust(DateTime(2014, 1, 21, 3, 0, 0));
 }
//Fin horloge=============================
}

void loop() {
  
 sensorValue = analogRead(A0);//Le capteur est ici en A0
 
 DateTime now = rtc.now();

//On envoie dans le moniteur série l'info écrite
 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("->");
 Serial.print(sensorValue);
 
//On nomme le fichier selon la date, donc toutes les donnees prises le meme jour dans un seul fichier==========
 char datafile[13]; //tableau de 13 espaces pour le nom
 int jour=now.day();
 int mois = now.month();
 int annee= now.year(); 
 sprintf(datafile,"%02d%02d%04d.csv",jour,mois,annee); // %d pour un int 
 datafile[13]='\0';//à mettre pour fermer convenablement le fichier
//Fin nommer fichier==================
//Fonction qui écrit la date et l'heure dans le fichierSD
//void maintenant() {


// Attendre le signal
      //compensation (étalonnage)
      FreqCounter::f_comp=10;   // Cal Value / Calibrate with professional Freq Counter

      // 10, 100 ou 1000 ms pour une résolution de 100, 10 et 1 Hz 
      FreqCounter::start(100);  // 100 ms Gate Time

      // Attendre jusqu'à avoir un comptage terminé
      while (FreqCounter::f_ready == 0)
     
     // Afficher la mesure de fréquence (et de rotation)
      frq=FreqCounter::f_freq;
      Serial.print(cnt++);
      Serial.print("  Freq (Hz): ");
      Serial.print(frq);
      //Test pour écriture
 //if(fichierSD) {
// Serial.println(F("Ecriture en cours"));
 //Ecriture
 //maintenant();
      //fichierSD.print(cnt++);
     // fichierSD.print("  Freq (Hz): ");
      //fichierSD.print(frq);
     
      trmin = frq/encoches*60;  //Vitesse de rotation en tour/min
      Serial.print("  tour/min: ");
      Serial.println(trmin);
      delay(10000);


//Ouverture du fichier==========================
 fichierSD = SD.open(datafile, FILE_WRITE);
 
 //Test pour écriture
 if(fichierSD) {
 Serial.println(F("Ecriture en cours"));
 //Ecriture
//maintenant();
 //fichierSD.print(' ');
 //fichierSD.print(sensorValue);
 //fichierSD.print(' ');
 //fichierSD.print(', ');
 fichierSD.print(now.year(), DEC);
 fichierSD.print('/');
 fichierSD.print(now.month(), DEC);
 fichierSD.print('/');
 fichierSD.print(now.day(), DEC);
 //fichierSD.print(', ');
 fichierSD.print(now.hour(), DEC);
 fichierSD.print(':');
 fichierSD.print(now.minute(), DEC);
 fichierSD.print(':');
 fichierSD.print(now.second(), DEC);
  fichierSD.print(",");
   fichierSD.print(cnt++);
      fichierSD.print("  Freq (Hz): ");
      fichierSD.print(frq);
       fichierSD.print(",");
      fichierSD.print("  tour/min: ");
      fichierSD.println(trmin);
 fichierSD.close();
 
 //Fermeture du fichier avec une ligne de plus============
 
 delay(20000);//durée en ms entre les mesures 
 }}

Dans cette partie

char datafile[[color=green][b]13[/b][/color]]; //tableau de 13 espaces pour le nom
...
datafile[[color=red][b]13[/b][/color]]='\0';//à mettre pour fermer convenablement le fichier

Je changerais le second commentaire pour dire

datafile[13]='\0';//à mettre pour Garantir de mettre le souc dans la mémoire en dépassant la taille du buffer

:slight_smile:

de plus ça sert à rien de le faire (même en index 12) car sprintf() le fait pour vous

ok merci sa marche

Aussi à je sais j’abuse, je cherche un tuto pour intégrer le sens de rotation merci

Le sens de rotation de quoi?

Des pales du ventilateur, une fourche optique est posé sur le cadre pour compter le nombre de tour par tranche de 5 secondes tout les heures et de plus je voudrais savoir dans quel sens tournes les pales du ventilateur selon le sens la puissance du vent bon c’est plus le courant d’air dont il s’agit. Je ne sais pas si c’est la bonne solution je ne sais pas quelle solution je doit employer pour les bas débit sachent que le compteur/enregistreur doit consommé le minimum d’énergie