Bonjour a tous,
Pour transmettre une valeur analogique j'utilise un shield wifi RedFly,
j' ai besoin d' un array de type "uint8_t".
En partant d'un "float" je parviens a array de type "char" et après je bloque :0
Impossible ... je n'y parviens pas!!
char buf_tampon_2[14];//le tableau a transmettre (c'est lui que je doit convertir en "uint8_t")
char buf_tampon[10];//pour la fonction itoa
int A4_int = val_A4*100;//je transforme un "float" en "int"
String A4_val = itoa(A4_int,buf_tampon,10);
String bat_1 = ("bat_duino=" + A4_val);//je rajoute un identifan a la chaine (pour le traitement a l'arrivée)
bat_1.toCharArray(buf_tampon_2, 14);
La méthode est-elle bonne ?
peut être existe il plus simple ?
Pouvez vous m'aider a finir ma fonction , a transformer "char buf_tampon_2[14]" en "uint8_t buf_tampon_2[14]"
tu peux ensuite envoyer en faisant un cast : (uint8_t*)buf_tampon
Si tu as besoin de la longueur : strlen(buf_tampon)+1 pour être sur de transmettre le marqueur de fin
Ou bien sizeof( buf_tampon) mais tu transmet plus que nécessaire.
merci pour ta réponse.
le float en int car je connaissais un la fonction itoa, pour me rapprocher du format désiré...
Mais si je reste en float c'est encore mieux!
Je teste le cast ce soir et je te tient au courant.
Merci.
Petite remarque quand même :
char = valeur signé
byte = uint8_t = unsigned char = valeur non signé.
Dans ton cas le cas signé -> non signé ne pose pas de probléme (un caractére ascii est codé sur une plage 0~127), mais ne pas confondre les deux
Pour décortiquer la convention de nommage de <stdint.h> c'est hyper simple, exemple uint8_t :
u = unsigned (non signé) (signé = rien, exemple int8_t)
int = valeur décimal
8 = sur 8 bits
_t = type
-> Type de valeur décimal non signé sur 8 bits
C'est ma faute
Apparemment par défaut la fonction sprintf() sur AVR ne supporte pas "%f"
C'est possible a ajouter mais un peu compliqué quand l'environnement Arduino