Convertir chaine de caractère en float...

Bonjour,

J'arrive à afficher à l'écran un nombre à virgule issu d'une chaine de caractère, mais il m'est impossible d'utiliser la variable pour faire des calculs ou autres. J'ai essayé le sscanf() et atof() mais ces fonctions ne me récupère pas les chiffres après la virgule, c'est pourtant leur rôle ??

Voici mon code :

// Chaine de caractère stockée dans la mémoire FLASH.
char * const Niveau_Pause_myStrings2[] PROGMEM={                               
"0,001", "0,00125", "0,0015625","0,002", ",0,0025","0,003125",                                  
"0,004", "0,005", "0,00625","0,008", "0,01","0,0125", "0,0166666666666667", "0,02",
 "0,025","0,0333333333333333", "0,04","0,05","0,0666666666666667","0,0769230769230769",
 "0,1", "0,125","0,1666666666666667", "0,2","0,25", "0,3125", "0,4", "0,5", "0,625",
"0,7692307692307692", "1","1,3","1,6", "2", "2,5",
"3,2","4", "5","6","7", "8","9","10", "11","12","13", "14","15","16", 
"17","18","19", "20","21","22","23","24","25", "26","27","28", "29","30",
"31", "32","33","34", "35","36","37", "38","39", "40", "41","42","43","44",
"45","46","47","48","49", "50","51","52", "53","54","55", "56","57","58",
"59","60","61", "62","63","64", "65","66","67", "68","69","70","71","72",
"73","74","75","76","77","78","79","80","81","82","83","84","85","86","87",
"88","89","90","91","92","93","94","95","96","97","98","99","100","101",
"102","103","104","105","106","107","108","109","110","111","112","113",
"114","115","116","117","118","119","120"};



// Récupération de la variable Niveau_Pause_myStrings2 dans la mémoire Flash, en fonction de Niveau_Pause.
char * PauseAffichage2 = (char *) pgm_read_word (&Niveau_Pause_myStrings2 [Niveau_Pause]);  


// Impression de la valeur à l'écran                                                                                               
lcd.print(PauseAffichage2);                       


// Stockage de la valeur issu de la chaine de caractère dans float Pause.
float Pause = atof(PauseAffichage2)            

//Calcul.....
float Duree = Pause + 100;

bonjour, ca ne serait pas un . (point) et non une ,(virgule) pour les décimales?

J'ai bien essayé mais rien de mieux.

Quand j'affiche la variable Pause à l'écran, j'ai "0.00" pour les valeur plus petites à 0,99, et "1.00" pour 1,3 ou bien 1,6, je n'ai donc que les chiffres à partir des unités.

Bonjour,

Comme le dit infobarquee, le séparateur décimal est '.'

De plus si tu affiches les 1ere valeurs de ta table avec 2 décimales c'est normal que tu ais 0.00 car elles sont inférieures à 0.01 essaie

lcd.print(Pause,5);

merci de ta réponse, mais rien de mieux.

Je viens d'essayer avec le programme suivant (dérivé du tiens):

// Chaine de caractère stockée dans la mémoire FLASH.
char * const Niveau_Pause_myStrings2[] PROGMEM = {
  "0.001", "0.00125", "0.0015625", "0,002", ",0,0025", "0,003125",
  "0,004", "0,005", "0,00625", "0,008", "0,01", "0,0125", "0,0166666666666667", "0,02",
  "0,025", "0,0333333333333333", "0,04", "0,05", "0,0666666666666667", "0,0769230769230769",
  "0,1", "0,125", "0,1666666666666667", "0,2", "0,25", "0,3125", "0,4", "0,5", "0,625",
  "0,7692307692307692", "1", "1,3", "1,6", "2", "2,5",
  "3,2", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16",
  "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
  "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44",
  "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58",
  "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72",
  "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87",
  "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101",
  "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113",
  "114", "115", "116", "117", "118", "119", "120"
};


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  int Niveau_Pause=1;


  // Récupération de la variable Niveau_Pause_myStrings2 dans la mémoire Flash, en fonction de Niveau_Pause.
  char * PauseAffichage2 = (char *) pgm_read_word (&Niveau_Pause_myStrings2[Niveau_Pause]);
  //char buffer[20];

  //strcpy_P(buffer,PauseAffichage2);


  // Impression de la valeur à l'écran
  Serial.print("char * -> ");
  Serial.println(PauseAffichage2);

  // Stockage de la valeur issu de la chaine de caractère dans float Pause.
  float Pause = atof(PauseAffichage2);

  Serial.print("float -> ");
  Serial.println(Pause,5);

  //Calcul.....
  float Duree = Pause + 100;


}


void loop() {
  // put your main code here, to run repeatedly:
}

et j'ai le résultat suivant sur le moniteur série:

char * -> 0.00125 float -> 0.00125

Merci ça marche !

En faite c'est que j'avais mis "Atol" au lieu de "Atof" quand j'ai essayé de bricoler le code après avoir posté le message...Du coup quand j'ai remplaçé les virgules par des points, ça aurait du marcher. Mais comme jme suis gourré d'une lettre dans al fonction ça marchait plus ^^ Impeccable !