taf06
Messages postés18Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention15 février 2011
-
27 mai 2009 à 15:33
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020
-
4 juin 2009 à 12:03
bonjour,
je travail sur une application qui m'affiche la température ambiante par exemple, grace à un composant sur carte éléctronique relièe au PC par le port série.
Je lis sur le port série comme suit
TextBox5.Text &=
SerialPort1.ReadByte
Mais au fur et mesure que je test , je me rend compte que je n'arrive pas à afficher les chiffres à virgules, apparemment ReadByte retourne un entier et j'essaie de transformer cela en réel.
Auriez vous une idée svp!
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 27 mai 2009 à 16:02
Bonjour,
ReadByte lit octet par octet, vu que le codage de nombres réels est particulier et se fait sur plusieurs octet, tu ne pourras pas récupérer de nombre a virgule avec cette fonction.
Pour info : codage de réel en binaire
Tes réels sont il codés sur 4,8 ou 16 octets? (correspondant respectivement à single, double, decimal)
Si tu pouvais donner le format de la trame que tu reçoit sur ton port série, je pourrait peut être t'aider un peu plus.
taf06
Messages postés18Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention15 février 2011 28 mai 2009 à 11:29
bonjour,
je me suis penchée sur ce que tu disais à propos des codages lesdis, mais je ne trouv tjrs pas de solution! certaines transformations sont elles possibles pour obtenir un réel?
merci d'avance.
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 28 mai 2009 à 13:53
Bonjour,
Voici une fonction permettant de convertir un tableau d'octet en Single suivant la norme IEEE-754 :
Private Function ByteToSingle(ByVal tab() As Byte) As Single
Dim Reel As Single = 0
Dim signe As SByte IIf((tab(0) >> 7) 1, -1, 1)
Dim exposant As Integer = (((tab(0) << 1) >> 1) * 2) + (tab(1) >> 7)
Dim mantisse As Single = ((((tab(1) << 1) >> 1)) * 65536) + (tab(2) * 256) + tab(3)
If mantisse 0 And exposant 0 Then
Reel = 0
Return Reel
Else
If mantisse = 0 Then
If signe = 1 Then
Reel = Single.PositiveInfinity
Else
Reel = Single.NegativeInfinity
End If
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 28 mai 2009 à 13:57
Pour ce qui est des doubles, il y a quelques petites modifications a faire.
Mantisse codé sur 52 octets pour un double contre 23 pour un single
Exposant codé sur 11 octets pour un double contre 8 pour un single
Le Biais vaut 1023 pour un double contre 127 pour un single
taf06
Messages postés18Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention15 février 2011 29 mai 2009 à 14:56
slt,
j'avais un souci, mais je vois d'ou ça peut venir: comment puis-je faire pour maintenant lire les bits arrivant sur le port série un à un et les stocker dans un tableau?
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 4 juin 2009 à 12:03
Bonjour,
Désolé de ma réponse tardive, mais je n'avais pas vu ton dernier message.
Pour lire le buffer de ton port série, tu as plusieurs méthode existante dans l'objet serialport.
- Si tu veux lire bit par bit ton buffer, tu peux utiliser la méthode ReadByte
- Pour lire plusieurs bit et les insérer dans un tableau, tu peux utiliser la méthode Read en lui passant un tableau de byte en argument. (ne pas oublier de l'initialiser avant!)
Pour connaitre le nombre de bit présent dans le buffer, la méthode ReadToByte pourra t'aider.