Go Down

Topic: [Résolu] Lire fichier texte carte SD et stocker dans matrice (Read 13876 times) previous topic - next topic

Freequant

Apr 22, 2013, 11:36 am Last Edit: Jun 04, 2013, 05:52 pm by Freequant Reason: 1
Bonjour,  :)

Nous avons un problème pour lire un fichier texte sur un carte SD. Je vous fait part du programme, nous n'arrivons pas à avoir ce que l'on veut dans le port série de Arduino. Nous avons tout les deux la version 1.5.2 mais le soucis de pose également avec la précédente version. Il est assez fréquent de trouver ceci dans le port série : ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Nous aurions vraiment besoin d'un coup de main   :smiley-red:

Je vous expliques un peu le problème. Sur un fichier txt présent sur une carte SD, nous avons 32 caractère de 0 et 1, nous souhaitons les récupérer, les stocker dans une matrice et les réutiliser par la suite. Si vous avez une autre approche ou une autre méthode pour faire cela, nous sommes à votre écoute !  :)

Voici le code :

Code: [Select]
#include <SPI.h>
#include <SD.h>

File myFile;

int bit = 0;
int ligne = 0;
int red = 0;
char rouge[] = {};
char R;
String Rfinal = "";
String Rfinal1 = "";
String Rfinal2 = "";

void setup() {
 Serial.begin(9600);
 Serial.println("");
 Serial.println("Carte SD detectee...");
 pinMode(10, OUTPUT);
 
 if (!SD.begin(4)) {
   Serial.println("Erreur de chargement.");
   return;
 }
 
 Serial.println("Chargement reussi.");
 myFile = SD.open("/0/R.txt");
 if (myFile) {
   while (myFile.available()) {
    Serial.write(myFile.read());
   }
   myFile.close();
   
   /////////////////////////
   if (bit < 16) {
 R = myFile.read();
 Rfinal1=Rfinal1+R;
 bit = bit + 1;
} else {
 if (red < 2) {
   Rfinal2 = Rfinal1;
   Rfinal1="";
   red = red+1;
 } else {
   Rfinal = Rfinal2+Rfinal1;
   bit = 0;
 }
}

 Serial.println("");
 Serial.print("Return : ");
 Serial.print(Rfinal);
///////////////////////
 } else {
   Serial.println("Erreur de lecture du fichier.");
 }
}

void loop() {
 
}


Merci à vous !

Christian_R


Il est assez fréquent de trouver ceci dans le port série : ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Est ce que sur l'ordi le baudrate est bien lui aussi réglé sur 9600 ?
Christian

Freequant

#2
Apr 22, 2013, 04:16 pm Last Edit: Apr 22, 2013, 07:12 pm by Freequant Reason: 1
Bonjour, :)

Oui, c'est bien le cas  :smiley-roll:

Le programme est il correcte ? J'ai vu un peu par tout parlé de la liaison SPI il ne me semble pourtant pas y faire référence dans le programme, est ce ça pourrait venir de là ?

Merci  :)

Edit : il faudrait arriver à récupérer les lignes, une par une, contenu dans le .txt,
puis les stocker séparément dans la matrice pour pouvoir sans servir par la suite.

Artouste


Bonjour, :)

Oui, c'est bien le cas  :smiley-roll:

Le programme est il correcte ? J'ai vu un peu par tout parlé de la liaison SPI il ne me semble pourtant pas y faire référence dans le programme, est ce ça pourrait venir de là ?

Merci  :)

Edit : il faudrait arriver à récupérer les lignes, une par une, contenu dans le .txt,
puis les stocker séparément dans la matrice pour pouvoir sans servir par la suite.

le code est fonctionnel (utilisation du slot SD de la carte ethernet)
resultat :
contenu du fichier

artouste Artouste test sur dossier 0
01110101110001010110001110010101
end



resultat sur le serial

Carte SD detectee...
Chargement reussi.
artouste Artouste test sur dossier 0
01110101110001010110001110010101
end

Return :

Freequant

#4
Apr 22, 2013, 11:44 pm Last Edit: May 09, 2013, 11:29 am by Freequant Reason: 1
Bonsoir,

Milles merci de porter attention à notre sujet !  :)

C'est une excellente nouvelle ! Vous utiliser donc la prise ethernet et non le câble USB ? Nous nous servons nous de l'USB, le soucis devait donc venir de là non ?

Comment pouvons nous faire pour réutiliser le contenue de la carte ? Nous avions pour projet de le mettre dans une matrice et de récupérer les données par la suite. Es ce que ceci est faisable ou y a t'il plus simple ?

Pour être le plus précis possible les 0 et 1 seront assignés à des leds de 1 à 32 ou 0 à 31. Chaque leds comportent 3 couleurs RVB. Si nous lisons ceci :

011

Cela voudrait dire que seulement la LED rouge serait éteinte.

Exemple complet.

Arduino doit lire le contenue de 3 fichier sur la carte SD un R un V un B. Il doit lire ceci :

01000101111011110100100011001101
10111010000100001011011100110010
11111111111111111111111111111111

La première led aura comme couleur CYAN. Chaque colones correspond à la couleurs d'une LED sur le bâton.

Colonne 1 => LED 1
Colonne 2 => LED 2
Colonne 3 => LED 3
...

Si vous avez besoin de plus de détailles je suis là  8)

Merci de votre aide !  :)

Rovhell

Non, il utilise le câble USB, mais il utilise le slot pour carte sd présent sur la carte ethernet pour insérer une sd et tester votre code. D'ailleurs, vous utilisez quoi vous pour mettre la carte sd? Et quel pin de la carte sd est relié avec quel pin de l'arduino? Peut être que le problème vient de là ! Votre montage est-il soudé ou bien relié par une breadboard? Ou bien est-ce un shield branché directement sur la carte arduino?

Freequant

#6
Apr 23, 2013, 11:49 am Last Edit: Apr 23, 2013, 11:52 am by Freequant Reason: 1
Bonjour,

Je pense avoir trouvé l'origine du problème. Nous n'utilisons pas de Carte SD mais une micro SD, autant pour moi je me suis trompé  :* :smiley-red:



Nous ne définissons donc aucun broche, rien. Du coup le problème viendrait de la ?

Comment procéderiez vous pour que cela fonctionne ? Si il y a du matériel à commander nous pouvons bien évidement le faire. Si vous avez un shéma pour y voir plus clair c'est avez plaisir !  :)

Un grand merci !

Edit : nous utilisons donc un shield, mais nous ne fesont que l'emboiter par dessus la carte arduino.
Manque t'il un fil à relier par rapport à ceci : pinMode(10, OUTPUT); ?

Artouste


Bonjour,

Je pense avoir trouvé l'origine du problème. Nous n'utilisons pas de Carte SD mais une micro SD, autant pour moi je me suis trompé  :* :smiley-red:



Nous ne définissons donc aucun broche, rien. Du coup le problème viendrait de la ?

Comment procéderiez vous pour que cela fonctionne ? Si il y a du matériel à commander nous pouvons bien évidement le faire. Si vous avez un shéma pour y voir plus clair c'est avez plaisir !  :)

Un grand merci !

Edit : nous utilisons donc un shield, mais nous ne fesont que l'emboiter par dessus la carte arduino.
Manque t'il un fil à relier par rapport à ceci : pinMode(10, OUTPUT); ?

bonjour
J'utilise aussi une µSD sur le slot de la carte ethernet
mais toi tu utilise quoi exactement comme lecteur de carte, quel shield ?


Freequant

#8
Apr 23, 2013, 01:31 pm Last Edit: Apr 23, 2013, 01:53 pm by Freequant Reason: 1
Quote
mais toi tu utilise quoi exactement comme lecteur de carte, quel shield ?


Je ne comprend pas trop ta question, on utilise celui sur l'image au dessus?!
Peux tu reformuler ta question stp, Merci

EDIT : il y a plusieurs modèles ? Peut être que nous emboîtons pas les cartes de la bonnes manières ? Es ce qu'il serait possible d'avoir une photo de votre montage ? svp :)

On va vous envoyer une photo du notre vous pourrez bien voir comme ça :)

Merci encore !

Artouste


Quote
mais toi tu utilise quoi exactement comme lecteur de carte, quel shield ?


Je ne comprend pas trop ta question, on utilise celui sur l'image au dessus?!
Peux tu reformuler ta question stp, Merci

alors si tu utilise le slot µsd de la carte ethernet officielle (c'est ce que j'ai fait)
le code est fonctionnel sans modif

ma config
UNO rev2
Shield ethernet (pas un R3, mais la version precendente)
IDE 1.0.4

dossier 0 et fichier R.txt de la µsd créé sur PC



Freequant

#10
Apr 23, 2013, 10:40 pm Last Edit: Apr 25, 2013, 05:04 pm by Freequant Reason: 1
Bonsoir,

Le soucis se pose plus loin. Comment stocker les informations lu sur la micro SD ? Nous avions prévu de les stocker dans une matrice mais après 20 essaies aucun ne fonctionne  :(

Es ce qu'il y aurait un autre moyen plus efficace ?

Merci encore  :)


Edit : Voici la config, dans l'ordre l'une sur l'autre :

- ARDUINO UNO R3
- SHIELD ETHERNET R3
- Arduino ProtoShield v2

   

Voilà les photos de notre montage (cliquer pour agrandir) ;)
Nous utilisons les pins 1 et 4 définit dans notre programme, ainsi qu'une masse GND.
Le port ethernet a été dessoudé, c'est donc normal qu'il n’apparaisse pas sur les photos

Freequant

Bonjour,

Un petit post pour faire remonter le sujet, c'est pour le bac alors  :smiley-red:

Merci à vous  :(

Freequant


skywodd

-> le code actuel
-> petit résumé de ce que tu veut faire et de ce que tu as testé ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Freequant

#14
May 07, 2013, 04:06 pm Last Edit: May 07, 2013, 04:08 pm by Freequant Reason: 1
Salut skywodd,
merci de d'intéresser à notre problème :).
Désolé mais nous n’avons pas de code actuel à te donner.
En fait nous avons essayés différentes choses :
- lire un fichier sur la micro SD et le stocker directement dans une matrice
- lire les lignes une par une et les afficher
- découper une ligne en 2 puis rassembler les 2 parties d’une ligne
- récupérer les caractères un par un d’une ligne, puis reconstituer la ligne

Je suis également allé voir sur ton site internet pour voir si n’y avait pas de solution.
J’ai trouvé le sujet Charger un fichier de configuration depuis une carte SD,
Nous avons regardé et essayé ton code.
Si je te résume exactement le problème, un fichier à lire ce compose par exemple
comme ceci :

Code: [Select]

10000000000000000000000000000000
01000000000000000000000000000000
00100000000000000000000000000000
00010000000000000000000000000000
00001000000000000000000000000000


C’est un fichier avec un nombre de ligne variable.
Chaque ligne est composée de 0 ou de 1 représentant l’état d’une LED.
Comme nous avons 32 LED, les lignes font toujours 32 caractères de long.
En fait notre problème est d’arriver à stocker chaque ligne séparément
dans une matrice pour pouvoir être utilisé par la suite.

Voilà merci, dis-moi si tu as besoin de plus de détails

Go Up