Lecture du port série

taf06 Messages postés 18 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 février 2011 - 27 mai 2009 à 15:33
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Derniè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!

8 réponses

lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Derniè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.

Bonne Prog
0
taf06 Messages postés 18 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 février 2011
27 mai 2009 à 16:21
ok, je récupère des doubles
0
taf06 Messages postés 18 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 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.
0
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Derniè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

                Return Reel
            Else
                mantisse IIf(exposant 0, mantisse / (2 ^ 23), (mantisse / (2 ^ 23)) + 1)

                exposant -= 127

                If exposant = 128 Then
                    Reel = Single.NaN
                    Return Reel
                Else
                    Reel = signe * (mantisse * (2 ^ exposant))
                    Return Reel
                End If

            End If
        End If
    End Function

Disponible à l'adresse suivante sur Codyx : http://www.codyx.org/snippet_byte-to-single_786.aspx

Inspiré de l'explication présente à cette page :http://www.arcanapercipio.com/lessons/codage_binaire_des_nombres/codage_binaire_des_nombres.html
J'espère ne pas avoir fait d'erreur.

Bonne Prog
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Derniè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

Bonne Prog
0
taf06 Messages postés 18 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 février 2011
28 mai 2009 à 14:41
ok, je m'en vais tester ton code.
merci.
0
taf06 Messages postés 18 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 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?
0
lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Derniè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.

Bonne Prog
0
Rejoignez-nous