Pages: 1 [2]   Go Down
Author Topic: Lire un fichier text  (Read 2554 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je me suis tourné du coté de la carte SD car cela m'apporte plusieurs avantages smiley

J'arrive bien à lire et ouvrir mon fichier stocker sur ma carte SD avec la library SD
Mais j'arrive pas à parser mon fichier et récupérer l'intensité à chaque pas de temps ...
pourtant j'ai suivis ton tuto sur ton site mais rien y fait ma led brille de la même façon.

suis-je obligé de stocker les valeurs d'intensités ? ou je peux directement les récupérer du fichier et les assigner dans le analogwrite ?

encore 1000x merci pour votre aide smiley-wink
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Faire voir ton code actuel et un exemple de fichier texte smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Skywodd smiley
Merci de ton aide ...

voici mon horrible code traficoté avec plusieurs choses trouvées sur le net.
J'ai plusieurs erreurs et j'ai vraiment du mal mais bon ça vous donnera surement une idée.

Code:

#include <SPI.h>
#include <SD.h>

File myFile;
String config;
int led1 = 9;  

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  
  // open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
     Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
   // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  File myFile = SD.open("test.txt");
  if(myFile){
    for(int i=0;i<10;i++)
    config[i]=myFile.parseInt();
    
    analogWrite(led1, config[i]);
    delay(5000)
    
    myFile.close();
  }
  
}



mon fichier txt ressemble à ça :
Code:
255,100,255,50,100,20,10,200,50,90,85,200,0,0,0,255
Mais je peux le mettre sous une forme différente selon ce qui est plus facile.

Dans mon vrai travail le vecteur sera beaucoup beaucoup plus long.
du coup autre question : il y a t-il une taille maximal de fichier utilisable ?

Encore merci smiley
« Last Edit: April 05, 2013, 03:31:31 am by bobijack » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

voici mon horrible code traficoté avec plusieurs choses trouvées sur le net.
J'ai plusieurs erreurs et j'ai vraiment du mal mais bon ça vous donnera surement une idée.
Aie aie aie ... le code va pas du tout, ya de grosses erreurs qui me sautent au visage smiley-wink

mon fichier txt ressemble à ça :
Code:
255,100,255,50,100,20,10,200,50,90,85,200,0,0,0,255
Mais je peux le mettre sous une forme différente selon ce qui est plus facile.
Tu peut ré-expliquer la signification de ces nombres j'ai cru comprendre mais je suis pas trop sûr.
Si j'ai bien compris j'ai une solution bien plus simple en tête pour toi.

Dans mon vrai travail le vecteur sera beaucoup beaucoup plus long.
du coup autre question : il y a t-il une taille maximal de fichier utilisable ?
La seule limite que je vois c'est le uint32_t qui stock la position dans le fichier soit un maximum de quelque chose comme 4Go donc.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Skywodd,
Je savais bien que mon code était tout pourris ... smiley-wink

Ce que j'essaye de faire c'est reproduire une histoire lumineuse perçu par un objet x.
Donc une fois que j'ai cette histoire lumineuse (obtenue numériquement) je veux la tester en vraie smiley-wink

Concernant le fichier text : il contient les intensités lumineuses perçu par cette objet.
255 étant l'intensité maximal de ma led et 0 l'intensité minimale (led éteinte).

Donc mon fichier ressemblera à ça :

Code:
255,100,20, ... etc..., 200,10,230
où chaque nombre correspond à un entier que j'implemente dans la fonction : analogwrite.

Donc je veux qu'à chaque pas de temps (environ 60 secondes) ma led s'allume pendant 60 secondes à 255 puis 100 puis 20 ... etc.
et arrivé à la fin de mon vecteur que ça boucle et revient au début afin de reproduire n fois cette histoire lumineuse smiley-wink
est-ce-que c'est plus clair ?

Concernant le fichier je ne pense pas du coup qu'il dépassera 4giga smiley-wink

Merci 1000 fois pour ton aide precieuse smileysmileysmiley





Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Remplace le Serial.println() dans le while par ton analogWrite et ça devrait être bon smiley-wink

Code:
#include <SD.h>

void setup() {

   Serial.begin(9600);
   pinMode(10, OUTPUT);
   
   if (!SD.begin(4)) {
     Serial.println("Card failed, or not present");
     for(;;);
   }
}

void loop() {

   File dataFile = SD.open("test.txt");

   if (!dataFile) {
     Serial.println("error opening datalog.txt");
for(;;);
   }
 
   while (dataFile.available()) {
     Serial.write(dataFile.parseInt());
     delay(60000);
   }
   
   dataFile.close();
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wuaaouuu ça marche smiley smiley smiley
Merci 1000 fois smiley-wink

si tu as le temps peux tu me commenter mes erreurs s'il te plais ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si tu as le temps peux tu me commenter mes erreurs s'il te plais ?
Ok, allez commatons commentationnons commentant dans ce cas smiley-mr-green

Code:
#include <SPI.h> // Pas obligatoire
#include <SD.h>

File myFile; // Tu n'est pas obligé de déclarer ça ici
String config; // Tu déclares un String pour stocker tes valeurs, ça va pas du coup pour stocker des chiffres ;)
int led1 = 9;   // const byte au lieu de int, c'est mieux et plus propre pour des numéros de broche

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) { // pas besoin pour la UNO, uniquement pour la leonardo
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
 
  // Pourquoi afficher le contenu du fichier texte ici ? Le ^c^v bête et méchant c'est pas bien ;)
  // open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
   
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
    Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
  // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  File myFile = SD.open("test.txt");
  if(myFile){
    for(int i=0;i<10;i++)
    config[i]=myFile.parseInt(); // Tu récupéres un int que tu met dans un char (de la String), ce n'est pas viable comme méthode et ça ne marche pas
    // Enfin si ça peut marcher mais c'est pas comme ça qu'il faut faire
    analogWrite(led1, config[i]); // Du coup tu utilises toujours le même char, à quoi sert le string ? Médite la dessus ;)
    delay(5000)
   
    myFile.close();
  }
 
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Super merci beaucoup,
Je vais méditer la dessus en effet smiley-wink

J'ai deux dernières petites questions :

- j'essaye à chaque fois de copier dans un fichier text vierge la position où je me situe dans mon vecteur :
Code:
File write1 = SD.open("position1.txt",FILE_WRITE);
write1.println(led1.position());
Cependant je ne peux pas mettre quelque chose de non integer ce qui m'étonne ... ???

- Comment je peux faire pour faire la même chose avec différentes led et différents vecteurs d'intensités ?
J'ai essayé avec différents fichier text mais les résultats ne sont pas concluants. Peut être avec différentes lignes ?

Merci Beaucoup !
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cependant je ne peux pas mettre quelque chose de non integer ce qui m'étonne ... ???
File::println() est en fait la même fonction que Serial::println() tout ce que tu peut sortir sur le port série tu peut le sortir sur un fichier smiley-wink
Texte, int, float, char, ...

- Comment je peux faire pour faire la même chose avec différentes led et différents vecteurs d'intensités ?
J'ai essayé avec différents fichier text mais les résultats ne sont pas concluants. Peut être avec différentes lignes ?
Regarde le format CSV smiley-wink
1 ligne = 1 série de valeurs

Exemple :
Quote
led1;led2;led3;led4
led1;led2;led3;led4
led1;led2;led3;led4

Le code n'as alors besoin que d'une modification mineure :
Code:
while (dataFile.available()) {
     analogWrite(LED1_PIN, dataFile.parseInt()); // led 1
     analogWrite(LED2_PIN, dataFile.parseInt()); // led 2
     analogWrite(LED3_PIN, dataFile.parseInt()); // led 3
     analogWrite(LED4_PIN, dataFile.parseInt()); // led 4
     delay(60000);
   }
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Super pour la réponse rapide ! MERCI smiley-wink
Par contre pour l'écriture de la position j'obtiens toujours cette erreur :
Code:
request for member 'position' in 'led1', which is of non-class type 'const byte'

Merci de ta patience smiley-wink
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Par contre pour l'écriture de la position j'obtiens toujours cette erreur :
Code:
request for member 'position' in 'led1', which is of non-class type 'const byte'
"led1" doit être une variable de type "const byte" et non de type File d'où l'erreur smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: 1 [2]   Go Up
Jump to: