Lire un fichier text

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

#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();
}

Wuaaouuu ça marche :slight_smile: :slight_smile: :slight_smile:
Merci 1000 fois :wink:

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

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

Ok, allez commatons commentationnons commentant dans ce cas :grin:

#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();
  }
  
}

Super merci beaucoup,
Je vais méditer la dessus en effet :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 :
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 !

bobijack:
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 :wink:
Texte, int, float, char, ...

bobijack:

  • 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 :wink:
1 ligne = 1 série de valeurs

Exemple :

led1;led2;led3;led4
led1;led2;led3;led4
led1;led2;led3;led4

Le code n'as alors besoin que d'une modification mineure :

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);
   }

Super pour la réponse rapide ! MERCI :wink:
Par contre pour l'écriture de la position j'obtiens toujours cette erreur :

request for member 'position' in 'led1', which is of non-class type 'const byte'

Merci de ta patience :wink:

bobijack:
Par contre pour l'écriture de la position j'obtiens toujours cette erreur :

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 :wink: