Problème enregistrement sur carte SD

Bonjour,

Je me permet de solliciter votre aide car j’ai un petit soucis, premièrement pour expliquer j’ai un capteur de déplacement auquel je récupère une tension à l'aide d'un arduino Uno (+carte 16bits pour améliorer la précision). Je souhaite enregistrer les données sur une carte SD, avec un shield dédié.
Le soucis est que le fichier d'enregistrement des données ne s'ouvre pas en mode écriture. Avez-vous des pistes d'erreur?

Je ne suis pas non plus un expert mais je me demande si ce n’est pas un soucis de code ou de bibliothèque. Par ailleurs il y a surement quelques optimisations à faire dans le programme donc si vous voyez quelque chose n’hésitez pas.

Merci

#include <SD.h>
#include <ADS1X15.h>

ADS1115 ADS(0x48);

// Variables utilisées pour la carte SD
const int   sdCardPinChipSelect     = 10;               // Le lecteur de carte SD sera branché sur la pin 10 pour le CS (chip select), 11/12/13 pour le MOSI/MISO/SCK du bus SPI
const char* nomDuFichier            = "donnees.csv";    // Format 8.3 (c'est à dire 8 lettres maximum pour le nom, et optionnellement 3 pour l'extension)
File monFichier;

void setup() {
  // Initialisation de port série
  Serial.begin(9600);
  Serial.println("Lecture de tensions différentielles / ADS1115");
  Serial.println("---------------------------------------------");
  Serial.println("Mesure de différence de potentiel entre les entrées A0 et A1 de l'ADC");
  Serial.println("Nota : ADC Range: +/- 6.144V (soit 1 bit = 0.1875 mV)");
  Serial.println("");
  
  // ADS1115
  ADS.begin();         // Initialisation du module ADS1115
  ADS.setGain(1);      // On prend le gain 1 pour fixer la mesure. Rmq :le gain est le plus bas (index 0), pour avoir la plus grande plage de mesure (6.144 volt)
  ADS.setMode(1);      // On indique à l'ADC qu'on fera des mesures à la demande, et non en continu (0 = CONTINUOUS, 1 = SINGLE)
  ADS.setDataRate(7);  // On spécifie la vitesse de mesure de tension qu'on souhaite, allant de 0 à 7 (7 étant le plus rapide, soit 860 échantillons par seconde)
  ADS.readADC(0);      // Et on fait une lecture à vide, pour envoyer tous ces paramètres
}

void loop() {
  // Mesure de la tension différentielle entre A0 et A1 (le résultat se situera entre -32768 et +32767, comme nous sommes sur 16 bits)
  int16_t difference_potentiel_A0_A1 = ADS.readADC_Differential_0_1();
  Serial.print("Lecture de l'ADC (A0-A1) : ");
  Serial.println(difference_potentiel_A0_A1);

  // Conversion de cette valeur en volts (le résultat sera fonction de la plage sélectionnée, fonction du gain ; ici, le résultat sera entre -6.144 et +6.144 volts)
  float tension_volts_A0_A1 = ADS.toVoltage(difference_potentiel_A0_A1);
  Serial.print("Tension différentielle = ");
  Serial.print(tension_volts_A0_A1,4);    // On limite l'affichage à 4 chiffres après la virgule
  Serial.println(" volts");

// Enregistrement de ces données sur la carte SD
  monFichier = SD.open(nomDuFichier, FILE_WRITE);
  if (monFichier) {    
    
    monFichier.print(tension_volts_A0_A1);
    monFichier.close();                     // L'enregistrement des données se fait au moment de la clôture du fichier
    Serial.println(F("Enregistrement réussi en carte SD"));
  }
  else {
    Serial.println(F("Erreur lors de la tentative d'ouverture du fichier en écriture, sur la carte SD"));
  }

  // Puis on boucle, après une pause de 2 secondes !
  Serial.println("");
  delay(2000);
}

voyez vous le message d'erreur "Erreur lors de la tentative d'ouverture du fichier en écriture, sur la carte SD" ?

quel Arduino ? postez un dessin de votre circuit des connexions

Exactement, je vois ce message d'erreur

vous n'avez pas de SD.begin() - éventuellement avec la CS pin en paramètre

Pour reformuler, il faudrait que je rajoute la ligne SD.begin() au début de la partie //Enregistrement de ces données sur la carte SD? c'est bien ça?

non, dans le setup() - regardez les exemples d'usage de la carte SD (https://docs.arduino.cc/learn/programming/sd-guide)

Ca fonctionne :grinning:
Merci

cool :wink:
bravo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.