Conversion ASCII

Bonjour,

Dans le cadre d'un projet, j'ai besoin de lire des valeurs sur une carte SD. Le problème c'est que, avec la fonction file.read() les données sont récupérés en ASCII Dec (Un "1" dans mon fichier texte va devenir un "49"...). En utilisant la fonction Serial.write j'ai bien le "1" qui s'affiche.

Mais je voudrais faire des opération avec des nombres, et je ne trouve aucune fonction qui permet de convertir le "49" en "1" pour l'utiliser dans mon code. En fait je voudrais quelque chose qui fasse la même chose que Serial.write, mais dont je puisse stocker le résultat dans une variable.

Pouvez-vous m'aider SVP ?

Merci

Regarde atoi() ;)

Normalement il suffit de faire -'0' à ta valeur. le zero entre apostrophe dans arduino inique que c'est un char qui a une valeur décimal de 48 dans la table ascii.

Bonjour,

Tu n’as manifestement pas compris qu’en informatique un chiffre c’est une série de bits 0/1 et rien de plus.
La notation décimal, hexadécimal, octal, … ou ASCII c’est juste une interprétation humaine de ces chiffres.
L’ordinateur / microcontrôleur ne travaille qu’avec des chiffres qui sont des séries de 0/1 et rien d’autre.

papeyeku:
Dans le cadre d’un projet, j’ai besoin de lire des valeurs sur une carte SD. Le problème c’est que, avec la fonction file.read() les données sont récupérés en ASCII en binaire (= 1 octet) Dec (Un “1” ‘1’ dans mon fichier texte va devenir un “49” 49 (code ASCII en décimal) …).
En utilisant la fonction Serial.write j’ai bien le “1” ‘1’ qui s’affiche dans ton terminal série qui travaille en mode texte (affichage ASCII).

Utilise les bons terme, tu verras que déjà c’est plus clair :wink:

papeyeku:
Mais je voudrais faire des opération avec des nombres, et je ne trouve aucune fonction qui permet de convertir le “49” en “1” pour l’utiliser dans mon code. En fait je voudrais quelque chose qui fasse la même chose que Serial.write, mais dont je puisse stocker le résultat dans une variable.

Un peu de logique ça fait pas de mal :wink:

‘1’ = 49 (code ASCII en décimal).
Soit “c” la variable qui stock ton octet lu et “v” la valeur du chiffre qui lui correspond (on par du principe que ‘0’ <= c <= ‘9’) .

v = c - '0';

‘0’ est un code ASCII, mais c’est aussi un nombre (qu’on interprète comme un caractère mais qui reste de base un nombre), tu peut donc faire des calculs avec.

papeyeku: Dans le cadre d'un projet, j'ai besoin de lire des valeurs sur une carte SD. Le problème c'est que, avec la fonction file.read() les données sont récupérés en ASCII Dec (Un "1" dans mon fichier texte va devenir un "49"...). En utilisant la fonction Serial.write j'ai bien le "1" qui s'affiche.

Pour compléter les propos de skywodd: Les méthodes .read() et .write ne modifient pas les valeurs qu'elles manipulent, elle ne rajoutent pas non plus de caractères de séparation. C'est d'ailleurs leur raison d'être, manipuler des octets sans se préoccuper de ce qu'ils représentent. Ainsi: - Si write "écrit" 1 (la valeur numérique) alors read "lira" 1(la valeur numérique). Pour rappel, 0b00000001 ou 0x01 ou 1 c'est pareil. - Si write "écrit" '1' (le caractère codé ASCII) alors read "lira" '1'(le caractère codé ASCII). Pour rappel, 0b00111001 ou 0x31 ou 49 ou '1' c'est pareil.

Il faut faire très attention au type des données que l'on manipulent. Si file.read() lit "1" alors c'est que tu avais écrit "1" dans ton fichier et non pas 1. Maintenant, il y a des fonctions qui permettent de passer d'un type à l'autre. Ainsi atoi() permet de convertir une chaine de caractères en entier.

int toto = atoi("123");

ce code convertira la chaîne "123" et placera dans toto la valeur 123.

Bonjour,

Merci pour vos réponses, et désolé du temps que j'ai mis à réagir (j'étais à l'étranger).

Tout est beaucoup plus claire maintenant, même si ce n'est pas encore "automatique" dans mon cerveau !

Merci encore, Bonne journée !