Bonsoir à l'aide précieuse reçue sur ce forum et à quelques heure de recherches et de tests voilà la solution de mon problème.
Pour lire les données d'une carte SD stockées dans cette configuration :
45,0,27,0
35,0,17,0
35,0,17,0
66,0,16,1
109,0,41,1
109,0,41,1
109,0,41,1
109,0,41,1
111,0,39,1
111,0,39,1
Mon code:
#include <SPI.h>
#include <SD.h>
const int chipSelect = SS; //carte SD
File dataFile;
int compteur = 1;
int DIRg, DIRd; // directions des moteurs
String speedRequired_L=""; //vitesse moteur gauche
String speedRequired_R=""; //vitesse moteur droit
void setup(){
Serial.begin(38400);
pinMode(SS, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
while (1) ;
}
Serial.println("card initialized.");
dataFile = SD.open("datalog.txt", FILE_READ);
if (!dataFile) {
Serial.println("error opening datalog.txt");
while (1) ;
}
}
void loop(){
if(dataFile)
{
while(dataFile.available())
{
char c = dataFile.read();
while(c != '\n')
{
if(c!='\,'){
if( compteur==1){
speedRequired_L += c;
}
if( compteur==2 ){
DIRg = c;
}
if(compteur==3 ){
speedRequired_R += c;
}
if( compteur==4 ){
DIRd = c;
}
c = dataFile.read();
}
else{
compteur++;
c = dataFile.read();
}
}
// ici j'affiche la lecture des données mais n'importe quel autre traitement est possible
/* A utiliser pour des valeurs à virgules ou > abs 32768
char buf1[speedRequired_L.length()];
speedRequired_L.toCharArray(buf1,speedRequired_L.length()+1);
float vall=atof(buf1);
char buf2[speedRequired_R.length()];
speedRequired_R.toCharArray(buf2,speedRequired_R.length()+1);
float valr=atof(buf2);
Serial.print(vall);
Serial.print(",");
Serial.print(DIRg-48);
Serial.print(",");
Serial.print(valr);
Serial.print(",");
Serial.println(DIRd-48);
compteur =1;
*/
Serial.print(speedRequired_L.toInt());
Serial.print(",");
Serial.print(DIRg-48);
Serial.print(",");
Serial.print(speedRequired_R.toInt());
Serial.print(",");
Serial.println(DIRd-48);
speedRequired_L="";
speedRequired_R="";
compteur =1;
}
dataFile.close();
}
}
Merci encore pour votre aide.