Go Down

Topic: Comment vérifier la présence de fichier txt sur carte SD (Read 513 times) previous topic - next topic

Cobrasse

Bonjour à tous,

Je rencontre un souci dans mon petit programme qui se veut un datalog, et comme tout datalog, il faut veiller à ne pas écraser/compléter les fichiers déjà présent !

Voici mon petit bout de programme :

Code: [Select]
include the necessary libraries
#include SPI.h
#include SD.h
#include TFT.h   Arduino LCD library

 pin definition
#define sd_cs  53
#define lcd_cs 10
#define dc     9
#define rst    8
#define miso 50
#define sck 52
#define mosi 51

TFT TFTscreen = TFT(lcd_cs, dc, rst);

#Variable déclaration
float sensorvalue = 0;
Sd2Card card;
SdVolume volume;
int numlog = 0; #Indique le numéro du fichier
char temp[2]; #Retourne la chaîne de caractère du nom intégral du fichier
File datalog;

void setup() {
 
   Open serial communications and wait for port to open
  Serial.begin(9600);
  while (!Serial) {
    ;  wait for serial port to connect. Needed for native USB port only
  }
 
   Put this line at the beginning of every sketch that uses the GLCD
  TFTscreen.begin();
  pinMode(sd_cs, OUTPUT);

   clear the screen with a black background
  TFTscreen.background(0, 0, 0);

   write the static text to the screen
   set the font color to white
  TFTscreen.stroke(0, 255, 0);
   set the font size
  TFTscreen.setTextSize(1);

  Serial.println(nInitialisation carte SD...);

   write the text to the top left corner of the screen
  TFTscreen.text(Initialisation carte SD n , 0, 0);
  delay(1000);
   we'll use the initialization code from the utility libraries
   since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, sd_cs)) {
    Serial.println(Echec d'initialisation de la carte SD);
    TFTscreen.stroke(255, 0, 0);
    TFTscreen.text(Echec d'initialisation n , 0, 10);
    return;
  } else {
    Serial.println(Initialisation carte SD OK);
    TFTscreen.text(Initialisation OK n , 0, 10);
  }
  delay(1000);
   Now we will try to open the 'volume''partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println(Could not find FAT16FAT32 partition.nMake sure you've formatted the card);
    TFTscreen.stroke(255, 0, 0);
    TFTscreen.text(Carte SD non formatée ! n , 0, 20);
    return;
  } else {
    TFTscreen.text(Formatage carte SD OK ! n , 0, 20);
    Serial.println(Formatage carte SD OK !);
  }
  dtostrf(numlog, 1, 0, temp);
  Serial.println(strcat(temp,.TXT));
  while(SD.exists(temp)) {
    Serial.println(toto);
    numlog++;
    dtostrf(numlog, 1, 0, temp);
    strcat(temp,.TXT)
  }
  Serial.println(fin);
}

void loop() {

}


Ce qui ne fonctionne pas est à la fin dans la boucle While ! J'ai sur la carte SD 3 fichiers : 0.TXT, 1.TXT et 2.TXT ... Pourtant le serialprintLN avant la boucle while, me retourne bien "0.TXT" dans la partie moniteur, logiquement le while devrait vérifier si ce fichier existe sur la carte SD à la racine (comme il est présent, je devrais rentrer dans la boucle) ... Et bien impossible de faire cette condition pour rentrer dans la boucle, pourquoi ?

Merci par avance de votre aide ... Il y a peut être plus simple, mais là tout me semblait clair ...

J'aurai aussi voulu passer par des fichiers formatés ainsi : DTLOGxxx.TXT ... Mais cela devient compliqué de gérer les "xxx" qui peuvent prendre la forme 001, 002 ... 015 ... sans que les 0 soit retiré et que je puisse quand même les incrémenter ... Concaténer pour les comparaisons/conditions, mais cela devient vite l'embrouille.

Bonne journée


icare

Bonjour,
Pas dans la bonne rubrique !
Faire "Report to moderator" pour le déplacer.
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Cobrasse


kamill

Bonjour,

Voir ici

Demandes au modérateur de déplacer ton sujet en cliquant sur 'report to moderator' en dessous de ton post.

Go Up