Go Down

Topic: Aide sur la prog - Arduino Duemilanove + module SD (Read 5451 times) previous topic - next topic

KaiZer

Jan 22, 2011, 01:14 pm Last Edit: Jan 22, 2011, 01:15 pm by KaiZer Reason: 1
Bonjour,
Je suis entrain de faire un programme qui permet d'écrire, de lire et d'effacer des fichiers sur une carte SD avec l'intermédiaire du Serial Monitor. Le but est de pouvoir taper le texte à écrire dans le fichier et de choisir le nom du fichier à crée, lire ou effacer. Le problème c'est que j'arrive à écrire ce que je souhaite dans un fichier, mais pas à choisir le nom du fichier en le tapant sur le pc comme je fais pour écrire le texte qui se trouve dans le fichier.

Voici le programme :

#include <SdFat.h>
#include <SdFatUtil.h>

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ------------------------
Sd2Card card;               // création d'un objet Sd2Card
SdVolume volume;       // création d'un objet SdVolume
SdFile root;             // création d'un objet SdFile pour le répertoire racine
SdFile file;           // création d'un objet SdFile pour le fichier utilisé


//----Déclaration des variables------------------------------------------------------------------
int testSD; //utilisé pour les tests des fonctions
int incomingByte ;

//-----Déclaration des prototypes----------------------------------------------------------------
void ecriture(void);
void lecture(void);

//------- Initialisation fonctionnalités utilisées ----------------------------------------------  
void setup()
{
 Serial.begin(115200);      // configuration de la liaison série (usb) à 115 200 bps            
 card.init(SPI_HALF_SPEED); // initialise la carte SD à la vitesse voulues
 volume.init(&card) ; // initialise le volume FAT de la carte SD
 root.openRoot(&volume) ;  // ouverture du répertoire root
}
//-----Boucle-Programme------------------------------------------------------
void loop()
{

 Serial.println();                   //saut de ligne
 Serial.println("Debut du programme");
 Serial.println("Entrer un caratere pour commancer");
 Serial.println();                  //saut de ligne
 while(!Serial.available());        //attente d'un envoie de donnée pour continuer
 Serial.flush();
 
 void ecriture(void);
 void lecture(void);
 
 Serial.println();
 Serial.println("Fin");  

}  
// -------------------Fonction ecriture------------------  
void ecriture(void)  
{
 
 if (!root.isOpen())      // si root pas ouvert, on l'ouvre
  {
   root.openRoot(&volume);
  }
 
char nomFichier[] = "0000000.TXT";   //Creation du fichier
for (uint8_t i = 0; i < 100; i++)    //incrementation du nom du fichier
{
  nomFichier[5] = i/10 + '0';
  nomFichier[6] = i%10 + '0';  
 if (file.open(&root, nomFichier, O_CREAT | O_EXCL  | O_WRITE)) break;
}
 if (!file.isOpen()) Serial.print("Erreur");
 
 Serial.print("Ecrire dans : ");
 Serial.println(nomFichier);
 Serial.println("Taper le texte a ecrire");
 while(!Serial.available());
 char myStr[Serial.available()];
 while (Serial.available() > 0)
   {
     for (int i = 0; i < sizeof(Serial.available()); i++)
    {
     incomingByte = Serial.read();
     delay(1);
     myStr=incomingByte;
     Serial.print(myStr);
     file.print(*myStr);
     }
   }
  Serial.flush();  
  Serial.println();
  file.close();  
}

//------------Fonction lecture----------------------------------------
void lecture(void)
{
 file.open(&root, nomFichier, O_READ);    
 char c; // variable de reception données lues
 while ((c = file.read()) > 0) Serial.print(c);
 file.close();
}



Le problème se situe sur le   file.open(&root, nomFichier, O_READ);    Pour nomFichier je voudrais pouvoir le taper a l'ordinateur.
Je voulais savoir aussi si c'était possible d'effacer tout les fichiers existants sur la carte ?

Merci d'avance pour votre aide !

KaiZer

j'ai fais un test tout simple qui consiste à envoyer un mot via le Serial Moniteur. Le programme l'enregistre dans un tableau (Serial.read dans une boucle), puis au moment de l'afficher (Serial.println(valeur)), il me renvoie seulement le dernier caractère...


Jean-François

#2
Jan 22, 2011, 10:27 pm Last Edit: Jan 22, 2011, 10:29 pm by jfs Reason: 1
Essaie ça :

Code: [Select]
String maString;

for(int i=0;i<=sizeof(tableau);i++){
 maString += tableau[i];
}


(Sans garantie)  ::)
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up