Auteur Sujet: Lecture d'une carte SD  (Lu 16943 fois)

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Lecture d'une carte SD
« le: octobre 23, 2021, 09:55:01 am »
Bonjour a tous,

Je rame depuis plusieurs jours sur la problème suivant:

J'ai des données sur une carte SD qui sont très simple.

0
-760
-1080
-1530
-1865
-2018


1) J'arrive a les écrire sur la carte dans une fichier .txt

2) j'arrive a les lire et a les afficher tel quel dans le moniteur série

3) je n'arrive pas a mettre chaque chiffre dans une variable distincte utilisée ensuite dans le programme du style :

don1 = 0
don2 = -760
don3 = -1080

etc etc

Je sèche grave et ne trouve rien sur le net la dessus.

Par avance, merci de votre aide.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #1 le: octobre 23, 2021, 11:10:58 am »
Je vous propose de regarder les tableaux de variables avec un index permettant de se déplacer dans le tableau en même temps que la lectures des données dans la carte SD.

Cet article pourrait vous aider:
https://www.locoduino.org/spip.php?article227
Cordialement,
Dominique

chris_bzg

  • Sr. Member
  • ****
  • Messages: 319
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #2 le: octobre 23, 2021, 12:02:22 pm »
Bonjour Christian,

Si les données de la carte SD ont été écrites dans un fichier .TXT, alors ce sont des chaînes de caractères ASCII. En conséquence, tu ne peux pas affecter une chaîne de caractères dans une variable numérique.
Il faut au préalable transformer cette chaîne de caractères en une valeur numérique.
Ou bien changer le mode d'écriture sur la carte SD.

C'est donc dans cette voie que je te conseille de chercher.
Amicalement.

Christian

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #3 le: octobre 23, 2021, 12:28:09 pm »
Bonjour

On a déjà parlé de ce problème sur le forum, mais je n'arrive pas à trouver où.

Pierre

chris_bzg

  • Sr. Member
  • ****
  • Messages: 319
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #4 le: octobre 23, 2021, 06:50:35 pm »
C'est hélas l'inconvénient majeur d'un forum : pour retrouver l'information, c'est le bordel !  ;)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #5 le: octobre 23, 2021, 07:22:48 pm »
Cordialement,
Dominique

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Re : Lecture d'une carte SD
« Réponse #6 le: octobre 23, 2021, 07:56:36 pm »
A toutes fins utiles, regarder ce tuto :
https://www.carnetdumaker.net/articles/lire-et-ecrire-des-donnees-sur-une-carte-sd-avec-une-carte-arduino-genuino/

Merci @Dominique, je connaissais, en aucun cas il ne parle du passage de la donnée vers une variable. Mais uniquement de la carte SD vers le moniteur série.

 :(

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Re : Lecture d'une carte SD
« Réponse #7 le: octobre 23, 2021, 07:57:33 pm »
C'est hélas l'inconvénient majeur d'un forum : pour retrouver l'information, c'est le bordel !  ;)

Bonjour, effectivement je n'ai rien trouvé en utilisant la fonction "rechercher".

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Re : Lecture d'une carte SD
« Réponse #8 le: octobre 23, 2021, 07:59:22 pm »
Bonjour Christian,

Si les données de la carte SD ont été écrites dans un fichier .TXT, alors ce sont des chaînes de caractères ASCII. En conséquence, tu ne peux pas affecter une chaîne de caractères dans une variable numérique.
Il faut au préalable transformer cette chaîne de caractères en une valeur numérique.
Ou bien changer le mode d'écriture sur la carte SD.

C'est donc dans cette voie que je te conseille de chercher.
Amicalement.

Christian

Bonjour Christian,

Oui effectivement, c'est LA solution, mais je n'arrive pas a la mettre en pratique. J'ai lue pas mal de chose (en anglais) mais pour y piger quelque chose ....

 :P

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Re : Lecture d'une carte SD
« Réponse #9 le: octobre 23, 2021, 08:06:07 pm »
Je vous propose de regarder les tableaux de variables avec un index permettant de se déplacer dans le tableau en même temps que la lectures des données dans la carte SD.

Cet article pourrait vous aider:
https://www.locoduino.org/spip.php?article227

Re @Dominique,

Je viens de parcourir (vitesse grand V) ce sujet, il parle de trains, ça me plais car là je comprend. Étant plutôt cartésien, le programme par l'exemple me sied.

Je vais lire cela de façon approfondis avant de me lancer dans la mise en pratique.

Dans tout les cas, je vous remercie tous d'avoir passé un peu de votre temps sur ma question.

Bonne soirée.

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #10 le: octobre 24, 2021, 09:35:17 am »
Bonjour

La lecture de la carte SD fournit des octets, dans le cas présent ces octets sont des caractères (issus d'un fichier .txt)

Les caractères chiffres ('0' à '9') doivent êtres transformés en un entier. Il est pratique de le faire en balayant les chiffres de gauche à droite, cela évite de les mémoriser. Pour cela on utilise l'algorithme de Hörner.

Voila ce que cela peut donner pour un nombre lu :

  int n=0; // le resutat
  char c; // le caractere courant
 
  c=lireSD(); // obtention d'un caractere
  while (c>='0' && c<='9') {
    n=n*10+c-'0'; // algorithme de Hörner
    c=lireSD(); // obtention d'un caractere
  }
  ecrire(n); // affichage du résultat

En pratique il faudra aussi tenir compte des signes '-' et des fins de ligne.

Pierre

dmskd

  • Newbie
  • *
  • Messages: 48
  • Arduino et N
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #11 le: octobre 24, 2021, 09:46:12 am »
Bonjour,

Si ça peut aider, voici la méthode que j'utilise:

Le fichier texte comprends des données écrites sous le format JSON. Exemple mon fichier locos.jso :

[
{"id":0,"name":"BB67300","address":2},
{"id":1,"name":"X4200","address":4},
{"id":2,"name":"X3800","address":5},
{"id":3,"name":"BB66000","address":1},
{"id":4,"name":"040DG-58","address":7},
{"id":5,"name":"A1A-A1A68537","address":6},
{"id":6,"name":"Adr-3","address":3},
{"id":7,"name":"Adr-8","address":8},
{"id":8,"name":"Adr-9","address":9},
{"id":9,"name":"Adr-10","address":10}
]

Le programme lit le fichier et le stocke dans une variable String ;
File locosFile;
String locos;

  locosFile = SD.open("locos.jso");
  if (locosFile) {
    while (locosFile.available()) {
      locos = locos + locosFile.readString();
    }
  }


Ensuite on désérialise les données JSON :
DynamicJsonDocument locosData(1024);

deserializeJson(locosData, locos);

Puis on dispose des données sous la forme suivante :
int locoAddress = locosData[*index]["address"];

Cordialement,
Dominique
Cordialement,
Dominique

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Re : Lecture d'une carte SD
« Réponse #12 le: octobre 24, 2021, 12:08:48 pm »
Bonjour

La lecture de la carte SD fournit des octets, dans le cas présent ces octets sont des caractères (issus d'un fichier .txt)

Les caractères chiffres ('0' à '9') doivent êtres transformés en un entier. Il est pratique de le faire en balayant les chiffres de gauche à droite, cela évite de les mémoriser. Pour cela on utilise l'algorithme de Hörner.

Voila ce que cela peut donner pour un nombre lu :

  int n=0; // le resutat
  char c; // le caractere courant
 
  c=lireSD(); // obtention d'un caractere
  while (c>='0' && c<='9') {
    n=n*10+c-'0'; // algorithme de Hörner
    c=lireSD(); // obtention d'un caractere
  }
  ecrire(n); // affichage du résultat

En pratique il faudra aussi tenir compte des signes '-' et des fins de ligne.

Pierre

Bonjour @Pierre

lire le fichier, ne me pose pas de problème.

(voir l'image en fichiers joints pour voir le résultat que j'obtiens sur le moniteur série)

Par contre comment reconnaitre la fin de ligne ?

Pierre59

  • Sr. Member
  • ****
  • Messages: 346
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #13 le: octobre 24, 2021, 01:16:34 pm »
Bonjour

Suivant les systèmes la fin de ligne est marquée soit par le caractère ascii LF (codé '\n' en C), soit par les caractères ascii CR LF (codés '\r' et '\n' en C).

Pierre
« Modifié: octobre 24, 2021, 01:18:41 pm par Pierre59 »

likiki

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
Re : Lecture d'une carte SD
« Réponse #14 le: octobre 24, 2021, 01:47:38 pm »
Haaaa, voilà une information qui vas mettre bien utile.

Merci.