Problème sscanf / csv

Bonjour,

J'ai un projet a réaliser qui est de lire un fichier csv qui me servira a paramettrer mon programme.

Le problême est que je n'arriva pas a convertir mon char (nom[5]).

J'utilise la fonction sscanf qui fonctionne très bien avec les chiffres mais impossible de convertir mon HIGH du fichier csv.

Fichier CSV :

1000;HIGH

Code :

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

File fichierlog;

char ID[5];
char nom[5];


int pos =0;

int de;
int test;




void setup() {


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

     
     
               Serial.print("Initialisation de la carte SD ...");

               if (!SD.begin(4)) {
                                    Serial.println("initialisation echouee !");
                                    return;
                                  }
               Serial.println("initialisation reussie.");


//----------------------------lecture du fichier csv---------------------------

               Serial.println("Ouverture carte SD");
               fichierlog = SD.open ("READTEST.csv", FILE_READ);
               for (int x=0; x<4; x++)
                                      {
                                       fichierlog.seek(pos);
                                       ID[x] = fichierlog.read();
                                       pos++;
                                      }
               pos++;

               for (int x=0; x<4; x++)
                                      {
                                       fichierlog.seek(pos);
                                       nom[x] = fichierlog.read();
                                       pos++;
                                      }
               pos++;
               
                                                     
              


                
  Serial.println(ID);
  Serial.println(nom);
 
  // convertion
  
  sscanf(ID,"%d\n", &de);
  sscanf(nom,"%c", &test);

  Serial.println(de);
  Serial.println(test);
 
             }


void loop() {}

résultat :

Initialisation de la carte SD ...initialisation reussie.
Ouverture carte SD
1000
HIGH
1000
72

résultat souhaité :

Initialisation de la carte SD ...initialisation reussie.
Ouverture carte SD
1000
HIGH
1000
HIGH

Merci de votre aide :slight_smile:

'H' == 0x48 == 72

Bonjour,

Je ne comprend pas ce que tu veux faire. HIGH c'est une chaine de caractères. C'est déjà ce que tu as dans nom[]

J'aimerais pouvoir utiliser la valeur HIGH dans un boucle par exemple :

digitalWrite (9, LOW);
delay(40);
digitalWrite (9, HIGH);
delay(40);

à la place de HIGH j'aimerais mettre la valeur qu'il y a dans mon nom[] car elle peut changer soit HIGH soit LOW . Et ce paramettre est défini dans le fichier csv .

Il est pas possible d'ecrire cela ??? :

digitalWrite (9, nom);
delay(40);
digitalWrite (9, nom);
delay(40);

Tu peux écrire ça

digitalWrite (9, nom);
  delay(40);
  digitalWrite (9, nom);
  delay(40);

Si nom est un entier.
Le problème c'est que HIGH c'est une chaine de caractères. Il faut la convertir en un entier qui vaudra O si la chaine est LOW et 1 si la chaine est HIGH. Et ça, c'est pas le boulot de sscanf.

Il ne faut pas oublier que HIGH et LOW sont des define auxquels on substitue une valeur numérique lors de la compilation.

effectivement il faut faire correspondre un entier à ta chaine
comme ceci par exemple

  test=strcmp(nom,"HIGH")==0 ? HIGH : LOW;

ou plus classique:

  if (strcmp(nom,"HIGH")==0)
    test=1;  // ou test=HIGH
  else
    test=0;

Et ensuite tu fais

  digitalWrite(9,test);

Merci à tous ça fonctionne !! :slight_smile: