non ca semble fonctionner mais ce qui semble n'est pas forcement ce qui se passe et ta méthode ne fonctionne absolument pas
je vais t'expliquer pourquoi et comment faire ca te servira pour la suite j'en suis sur ^^
dans la RFC il est indiqué que ta commande renvoi un nombre sur 16 bits 1 bit de poids fort puis un bit de poids faible.
ce qui sous entend quee ton compteur renvoi des valeurs entre 0 et 65535 (maximum) ou en tout cas plus grandes que 255.
Code : Tout sélectionner
; explication octet de poids fort et octet de poids faible.
; pour comprendre il faut se representer la memoire de l'ordinateur
; un octet contien 8 bit qui peuvent n'avoir qu'une valeur de 0 ou de 1
; si je veux representer le nombre 1 soit en binaire 00000001 je remplis la case la plus a gauche avec un 1
;
; +-+-+-+-+-+-+-+-+
; |0|0|0|0|0|0|0|1|
; +-+-+-+-+-+-+-+-+
; si je veux une valeur de 255 11111111 je vais tout remplir avec des 1
;
; +-+-+-+-+-+-+-+-+
; |1|1|1|1|1|1|1|1|
; +-+-+-+-+-+-+-+-+
; mais si je veux une valeur plus grande que 255 je ne peux pas avec un octet
; c'est la qu'apparait les bits de poids fort et les bits de poids faible
; on prend 2 octets un qui aura les bits de poids faible qui permettent de compter jusqu'a 255
;
; et un autre qui aura des bits de poids forts chacun des bits aura une valeur 2 fois plus importante que le precedente le premier bit valant 256
; soit en binaire 100000000
; FORT FAIBLE
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
; |0|0|0|0|0|0|0|1| |0|0|0|0|0|0|0|0|
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
;
; si je veux ecrire une valeur de 512
;
; FORT FAIBLE
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
; |0|0|0|0|0|0|1|0| |0|0|0|0|0|0|0|0|
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
;
; jusqua un maximum de 65535 1111111111111111
;
; FORT FAIBLE
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
; |1|1|1|1|1|1|1|1| |1|1|1|1|1|1|1|1|
; +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
dans ton code tu lis ton interface serie tant qu'il y a des octets en attente un seul octet a la foi.
et tu ecrit le resultat au meme endroit (@buffer)
donc ton nombre sur 2 octets (16bit) sera lu en 2 fois.
donc tu lira 2 valeurs avec 255 en max a chaque fois.
et lorsque tu aura tout lu ce qu'il y a sur le port serie , normalement 2 octets tu n'aura recupere que l'octet de poids faible.
ensuite cette commande
converti en string la valeur de buffer mais pas le contenu de buffer
or la valeur de buffer dépend de ce que c'est. dans tout les cas tu n'aura pas la donnée que tu recherche.
lorsque tu converti ensuite en utilisant val()
tu n’aura pas non plus la valeur que tu recherche voici pourquoi
même si on part du principe que ta string contiens bien les 2 octets renvoyés ce qui n'est pas du tout le cas comme explique plus haut
la commande val() converti un "caractère" en valeur numérique ce qui signifie que seul les valeurs de 48 a 57 seront converties en chiffres
en gros val prend par exemple "2"+"0" et converti cela en 20 mais "2" c'est la valeur 49 et "0" la valeur 48 dans la table des caractères.