Bonjour,
J'ai actuellement un problème concernant mon programme Arduino et j'aimerai que vous m’éclaircissez s'il vous plaît.
Le but de celui-ci est de lire une succession de valeurs décimales (séparées par des tabulations) afin de faire multiples actions comme :
-Prendre la première valeur avant la tabulation
-L'afficher
-La convertir en entier afin d'obtenir deux nombre
-Puis les retransformer en décimal.
Jusque là tout va bien, j'arrive à réaliser cela uniquement pour la première valeur mais pas pour les autres. Je pense que cela vient des tabulations et qui perturbe donc le reste de mon programme et l'affichage qui est tout décalé donc c'est pour ça je pense.
Ceci étant dit, je n'arrive pas à supprimer les tabulations donc si quelqu'un pourrait m'aider ce serait génial.
Je vous met le code à disposition : (je fais un appel de fonction un moment pour répéter à chaque fois).
#include <SPI.h>
#include <SD.h>
#include <String.h>
File myFile;
char c;
String readStg, part1, part2, suppr;
void setup() {
Serial.begin(9600);
//Il est montré à l'écran que la communication avec le SD va commencer
Serial.println("Communication avec la carte SD...");
//Le moniteur indique si la communication a été établie correctement
//ou il y a eu un type d'erreur.
if (!SD.begin(4)){
Serial.println("La communication a échouée");
return;
}
Serial.println("La communication a démarrée correctement");
/* LECTURE DE DONNÉES DANS LA MÉMOIRE SD DE ARDUINO */
//Le fichier est ouvert à nouveau, cette fois pour lire les données écrites.
myFile = SD.open("V01_1L.txt");
//Si le fichier a été ouvert correctement, les données sont affichées.
if (myFile){
//Le moniteur indique les informations qui apparaîtront dans
//test.txt
//Une boucle est implémentée qui parcourt le fichier jusqu'à ce qu'il n'en trouve plus
/* RECHERCHE DE LA PREMIERE DONNEE THERMIQUE */
while (myFile.available()) {
c = myFile.read();
if (c=='\t')
part();
//stock des caractères dans une chaîne
if (c!=0 && c!=(char)0xff && c!=(char)0xfe)
readStg += c;
}
/* FIN DE LA RECHERCHE */
//Si tout s'est bien passé, fermer le fichier pour ne pas perdre les données
myFile.close();
}
//Au cas où il y aurait eu des problèmes pour ouvrir test.txt, celui-ci sera affiché à l'écran.
else{
Serial.println("Le fichier test.txt ne s'est pas ouvert correctement");
}
}
void loop(){
}
void part(){
while(myFile.available()){
Serial.println("\nLecture de la première donnée thermique");
Serial.println(readStg); //Affichage de la donnée
delay(1000);
part1 = readStg.substring(0, 2); //Prend les 2 premiers caractères
part2 = readStg.substring(3, 4); //Prend le suivant après la virgule
Serial.println("\nRésultat de la séparation :");
Serial.println(part1); //Affiche les résulats
Serial.println(part2);
delay(1000);
int n1 = part1.toInt(); // Convertit en entier
int n2 = part2.toInt();
Serial.println("\nLes nombres entiers sont :");
Serial.println(n1); //Affiche le résultat final
Serial.println(n2);
delay(1000);
Serial.println("\nRetour en décimal...");
float resultat = n1 + (float)n2 / 10;
Serial.println(resultat);
readStg="";
break;
}
}
En sortie :
Communication avec la carte SD...
La communication a démarrée correctement
Lecture de la première donnée thermique
82,1
Résultat de la séparation :
82
1
Les nombres entiers sont :
82
1
Retour en décimal...
82.10
Lecture de la première donnée thermique
81,9
Résultat de la séparation :
8
,
Les nombres entiers sont :
8
0
Retour en décimal...
8.00
Donc voilà c'est à partir de 81,9 (après 81,2) que le problème de décalage commence.
Merci
PS: j'utilise un Arduino Wireless SD Shield