IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Passer d'hexadecimal à décimal


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut Passer d'hexadecimal à décimal
    Bonjour,

    je reçois un ensemble de bytes sur mon port COM. J'aimerais afficher ces bytes en décimal dans une textbox :
    si je reçois 1F, qu'il affiche 31 dans la textbox.

    Pouvez-vous m'aider?

    Merci à vous ;-)

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Si tu as un tableau de bytes alors j'ai remarqué que ToString te renvoi la valeur décimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    byte[] bi = new byte[] {0x1F};	
    foreach (Byte b in bi)				
    	Console.WriteLine(b.ToString());

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    voila,

    j'ai un tableau de bytes, que je sépare par la suite pour les mettre dans une textbox.
    J'affiche donc chaque cracatères à l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    string Temp_Interieur = msg.Substring(0, longueur_lue);        // donnée isolée de la 0 en prenant 1 donnée (1 byte)
                    string Temp_Exterieur = msg.Substring(1, longueur_lue);        // donnée isolée de la 1 en prenant 1 donnée (1 byte)
                    string Lum_Interieur = msg.Substring(2, longueur_lue);         // donnée isolée de la 2 en prenant 1 donnée (1 byte)
                    string Lum_Exterieur = msg.Substring(3, longueur_lue);         // donnée isolée de la 3 en prenant 1 donnée (1 byte)
                    string Valeur_Battery = msg.Substring(4, longueur_lue);        // donnée isolée de la 4 en prenant 1 donnée
                    string Valeur_Signal = msg.Substring(5, longueur_lue);         // donnée isolée de la 5 en prenant 1 donnée
    longueur_lue = 1.

    Donc pour les convertir en valeur décimale, je dois les encoder les bytes reçus sur port com dans un tableau de byte, et pas un tableau de string...c'est ça?

    Voila, comment je recevais mes données précédement sur mon port COM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                while (serialPort1.BytesToRead > 0 && serialPort1.BytesToRead < 6)
                {
                    char[] buffer = new char[6];
                    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
                    string value = new string(buffer);
                    safeInput(value);
                }
                serialPort1.DiscardInBuffer();
            }
    comment transformer la valeur "value" en byte? Quand je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte value = new byte(buffer);
    on me dit que l'on ne peut convertir un tableau en variable...

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    La méthode Read de la class SerialPort est surchargée, tu peux l'utiliser en lui passant en paramètre un taleau de byte plutôt qu'un tableau de char et éviter une conversion de type

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    merci....mais....heu....je découvre le c#...aussi

    faire comme ceci ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                while (serialPort1.BytesToRead > 0 && serialPort1.BytesToRead < 6)
                {
                    char[] buffer = new char[6];
                    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
                    byte value = new byte(buffer);
                    safeInput(value);
                }
                serialPort1.DiscardInBuffer();
            }
    tu ferais comment?

    'byte' does not contain a constructor thats takes 1 arguments
    pige pas

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    je pensais à changer le type du buffer en utilisant un byte[] plutôt qu'un char[]



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    byte[] buffer = new byte[serialPort1.BytesToRead];
    int bytes_read = serialPort1.Read(buffer, 0, serialPort1.BytesToRead);
     
    foreach(Byte b in buffer)
      safeInput(b);
    Sinon en gardant ton code pour transformer ton char[] en Byte tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToByte(buffer);

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    salut et merci.

    Cependant j'ai encore un souci.

    Je m'explique. Dans mon application, je reçois des données regroupées sous forme de 6 bytes.

    Mon programme donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
       private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                while (serialPort1.BytesToRead > 0 && serialPort1.BytesToRead < 6)
                {
                    byte[] buffer = new byte[serialPort1.BytesToRead];
                    int bytes_read = serialPort1.Read(buffer, 0, serialPort1.BytesToRead);
     
                    foreach (Byte b in buffer)
                        safeInput(b);
     
     
     
                    //char[] buffer = new char[6];
                    //int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
                    //byte value = Convert.ToByte(buffer);
                    //safeInput(value);
                }
                serialPort1.DiscardInBuffer();
            }
     
            // insertion des dernières valeur reçues dans la base de données 
            // affichage des dernières valeur reçues dans les textbox et progressbar
            private void safeInput(byte msg)
            {
     
                textBox1.Invoke(new EventHandler(delegate
                {
                    //// test d'affichage des données reçues dans latextbox1 
                    //textBox1.SelectedText = string.Empty;
                    //this.textBox1.Text = "";
                    //textBox1.AppendText(String.Format(msg));
                    //textBox1.Text = msg.ToString();
     
                    int longueur_lue = 1;
     
                    // on efface ce qu'il y a dans les textbox's
                    textBox1.SelectedText = string.Empty;
                    this.textBox1.Text = "";
                    textBox2.SelectedText = string.Empty;
                    this.textBox2.Text = "";
                    textBox3.SelectedText = string.Empty;
                    this.textBox3.Text = "";
                    textBox4.SelectedText = string.Empty;
                    this.textBox4.Text = "";
     
     
                    // séparation des 6 données
                    string new_msg = msg.ToString();
     
                    string Temp_Interieur = new_msg.Substring(0, longueur_lue);        // donnée isolée de la 0 en prenant 1 donnée (1 byte)
                    string Temp_Exterieur = new_msg.Substring(1, longueur_lue);        // donnée isolée de la 1 en prenant 1 donnée (1 byte)
                    string Lum_Interieur  = new_msg.Substring(2, longueur_lue);         // donnée isolée de la 2 en prenant 1 donnée (1 byte)
                    string Lum_Exterieur  = new_msg.Substring(3, longueur_lue);         // donnée isolée de la 3 en prenant 1 donnée (1 byte)
                    string Valeur_Battery = new_msg.Substring(4, longueur_lue);        // donnée isolée de la 4 en prenant 1 donnée
                    string Valeur_Signal  = new_msg.Substring(5, longueur_lue);         // donnée isolée de la 5 en prenant 1 donnée
     
                    //// mise en textbox approprié des valeur inscrite dans le tableau!
                    textBox1.Text = Temp_Interieur.ToString();//tableau_valeur[0];
                    textBox2.Text = Temp_Exterieur.ToString();//tableau_valeur[1];
                    textBox3.Text = Lum_Interieur.ToString();// tableau_valeur[2];
                    textBox4.Text = Lum_Exterieur.ToString();//tableau_valeur[3];
    en montrant ces lignes ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    string Temp_Interieur = new_msg.Substring(0, longueur_lue);        // donnée isolée de la 0 en prenant 1 donnée (1 byte)
                    string Temp_Exterieur = new_msg.Substring(1, longueur_lue);        // donnée isolée de la 1 en prenant 1 donnée (1 byte)
                    string Lum_Interieur  = new_msg.Substring(2, longueur_lue);         // donnée isolée de la 2 en prenant 1 donnée (1 byte)
                    string Lum_Exterieur  = new_msg.Substring(3, longueur_lue);         // donnée isolée de la 3 en prenant 1 donnée (1 byte)
                    string Valeur_Battery = new_msg.Substring(4, longueur_lue);        // donnée isolée de la 4 en prenant 1 donnée
                    string Valeur_Signal  = new_msg.Substring(5, longueur_lue);         // donnée isolée de la 5 en prenant 1 donnée
    on me dit que :

    L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
    Nom du paramètre : length

    avant ça marchait bien pourtant.
    Bon, c'est vrais qu'avant de mettre new_msg, il y avait simplement msg, soit le tableau passé d'une méthode à l'autre.

    Peut-on me direiger svp?

    Merci

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut
    Ne serait-ce pas que le tableau de bytes que tu reçois ne contient plus que 5 bytes au lieu de 6 pour une raison ou une autre ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    non, j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (serialPort1.BytesToRead > 0 && serialPort1.BytesToRead < 6)
    mais c'est vrais qu'il fallait ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte[] buffer = new byte[6];
    mais j'ai tjs le même message d'erreur...

    j'ai testé en m'envoyant (0x35, 0x32, 0x33, x034, 0x35, 0x36) en ne demandant que d'afficher la première valeur (soit 5), et ça affiche 0!

    Si je demande d'afficher les deux premières valeurs ça affiche 5 et 2, mais ça plante en indiquant toujours le message d'erreur en spécifiant le message d'erreur à la fin de cette ligne ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string Temp_Exterieur = new_msg.Substring(1, longueur_lue);
    L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
    Nom du paramètre : length

    est-ce ceci qui ne transmet pas bien le tableau?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (Byte b in buffer)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut
    T'as essayé de regarder ce qu'il y a à l'intérieur de ton new_msg après avoir fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string new_msg = msg.ToString();
    Parce que pour moi quand tu fais un ToString() sur un tableau de bytes, ça te donne : System.Byte[] et non pas les valeurs contenues dans ton tableau...

  12. #12
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    oui, safeInput a besoin d'un tableau de byte puisque tu fais le décodage entièrement sur 6 bytes dedans c'est donc normal que cela plante sur ta deuxième ligne où tu fais appel à substring car ce n'est pas possible d'accèder à l'octet 2 ou 3 d'un byte qui ne devrait faire que 1 octet minimum.

    Donc tu as raison il ne faut pas faire un foreach et remplacer par


    Puis dans safeInput
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private void safeInput(Byte []msg)
             {			
     
                 string Temp_Interieur = msg[0].ToString();
                 string Temp_Exterieur = msg[1].ToString();
                 string Lum_Interieur  = msg[2].ToString();
                 string Lum_Exterieur  = msg[3].ToString();
                 string Valeur_Battery = msg[4].ToString();
                 string Valeur_Signal  = msg[5].ToString();
     
    Console.WriteLine(Temp_Interieur + ","+Temp_Exterieur+","+Lum_Interieur+","+
                                   Lum_Exterieur+","+Valeur_Battery+","+Valeur_Signal);
     
    }
    Par contre

    J'ai testé en m'envoyant (0x35, 0x32, 0x33, x034, 0x35, 0x36) en ne demandant que d'afficher la première valeur (soit 5), et ça affiche 0!
    Il y a une erreur x034 ne devrait pas compiler.

    Sinon avec ce tableau de byte j'obtiens comme résultat : 53, 50, 51, 52, 53, 54 à l'affichage

    je ne comprends pas pourquoi tu dis attendre 5 comme première valeur pour TempInterieur qui est sensé avoir la valeur 0x35 en hexa

    Citation Envoyé par ThistleDub Voir le message
    T'as essayé de regarder ce qu'il y a à l'intérieur de ton new_msg après avoir fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string new_msg = msg.ToString();
    Parce que pour moi quand tu fais un ToString() sur un tableau de bytes, ça te donne : System.Byte[] et non pas les valeurs contenues dans ton tableau...
    Le ToString de msg dans son code s'applique sur le paramètre de safeInput qui est un Byte et non pas un tableau de Byte.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    super, merci, ç a a l'aire de fonctionner ;-)

    mais j'ai un problème :

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
            private void safeInput(Byte[] msg)
            {
     
                    textBox1.Invoke(new EventHandler(delegate
                    {
                //        // on efface ce qu'il y a dans les textbox's
                textBox1.SelectedText = string.Empty;
                this.textBox1.Text = "";
                textBox2.SelectedText = string.Empty;
                this.textBox2.Text = "";
                textBox3.SelectedText = string.Empty;
                this.textBox3.Text = "";
                textBox4.SelectedText = string.Empty;
                this.textBox4.Text = "";
     
                string Temp_Interieur = msg[0].ToString();
                string Temp_Exterieur = msg[1].ToString();
                string Lum_Interieur  = msg[2].ToString();
                string Lum_Exterieur  = msg[3].ToString();
                string Valeur_Battery = msg[4].ToString();
                string Valeur_Signal  = msg[5].ToString();
     
                textBox1.Text = Temp_Interieur;
                textBox2.Text = Temp_Exterieur;
                textBox3.Text = Lum_Interieur;
                textBox4.Text = Lum_Exterieur;
                   }));
            }
    J'affiche bien 56 ou 55 dans la textbox 1 mais rien dans les autres....

    Voici mon code du microcontrôleur qui m'envois des données sur pc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    void main()
    {
        UART1_Init(9600);
     
        Delay_ms(1000);
        UART1_Write(0x38);
        UART1_Write(0x32);
        UART1_Write(0x33);
        UART1_Write(0x34);
        UART1_Write(0x35);
        UART1_Write(0x36);
     
            Delay_ms(1000);
        UART1_Write(0x35);
        UART1_Write(0x36);
        UART1_Write(0x37);
        UART1_Write(0x38);
         UART1_Write(0x39);
        UART1_Write(0x40);
     
        Delay_ms(1000);
        UART1_Write(0x39);
        UART1_Write(0x3A);
        UART1_Write(0x3B);
        UART1_Write(0x3C);
        UART1_Write(0x39);
        UART1_Write(0x3A);
    }
    Dites, si je reçois 0xFF, j'afficherai 255?

    pouvez-vous m'aider encore un peu?

    Merci, vraiment

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 33
    Par défaut
    Citation Envoyé par hegros Voir le message
    Le ToString de msg dans son code s'applique sur le paramètre de safeInput qui est un Byte et non pas un tableau de Byte.
    Exact ! Autant pour moi !

  15. #15
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par moustiqu3 Voir le message
    Dites, si je reçois 0xFF, j'afficherai 255?
    oui.

    Par contre pour la textbox je ne sais pas trop..

    Est-ce que tu arrives à voir dans le debug la valeur de Temp_Exterieur,Lum_Interieur ,Lum_Exterieur avant affectation à la propriété text des textboxs ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    c'est affiché "0"...et les valeurs dans Temp_Exterieur,Lum_Interieur ,Lum_Exterieur sont nulle...

    étonnant...

    voila le code entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                while (serialPort1.BytesToRead > 0 && serialPort1.BytesToRead < 6)
                {
                    byte[] buffer = new byte[6];
                    int bytes_read = serialPort1.Read(buffer, 0, serialPort1.BytesToRead);
     
                    safeInput(buffer);
                    //safeInput(buffer);
     
     
     
                    //char[] buffer = new char[6];
                    //int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
                    //byte value = Convert.ToByte(buffer);
                    //safeInput(value);
                }
                serialPort1.DiscardInBuffer();
            }
     
            private void safeInput(Byte[] msg)
            {
     
                    textBox1.Invoke(new EventHandler(delegate
                    {
                //        // on efface ce qu'il y a dans les textbox's
                textBox1.SelectedText = string.Empty;
                this.textBox1.Text = "";
                textBox2.SelectedText = string.Empty;
                this.textBox2.Text = "";
                textBox3.SelectedText = string.Empty;
                this.textBox3.Text = "";
                textBox4.SelectedText = string.Empty;
                this.textBox4.Text = "";
     
                string Temp_Interieur = msg[0].ToString();
                string Temp_Exterieur = msg[1].ToString();
                string Lum_Interieur  = msg[2].ToString();
                string Lum_Exterieur  = msg[3].ToString();
                string Valeur_Battery = msg[4].ToString();
                string Valeur_Signal  = msg[5].ToString();
     
                textBox1.Text = Temp_Interieur;
                textBox2.Text = Temp_Exterieur;
                textBox3.Text = Lum_Interieur;
                textBox4.Text = Lum_Exterieur;
                   }));
                serialPort1.DiscardInBuffer();
            }
    en regardant ce qu'il y avait dans "buffer", j'ai vu que toutes les places du tableau ne sont pas remplies...
    Certaines le sont, mais pas toutes.

    sinon, je ne vois pas pq les valeurs ne s'affichent pas partout...est-ce dû à ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    textBox1.Invoke(new EventHandler(delegate
                    {
    il faut bien récolter les données quelque part avant de les séparées...

  17. #17
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par moustiqu3 Voir le message
    c'est affiché "0"...et les valeurs dans Temp_Exterieur,Lum_Interieur ,Lum_Exterieur sont nulle...

    étonnant...

    en regardant ce qu'il y avait dans "buffer", j'ai vu que toutes les places du tableau ne sont pas remplies...
    Certaines le sont, mais pas toutes.
    Je suppose que lorsque l'événement datareceived est enclenché alors il n'y a pas toujours 6 bytes à lire...

    Tu peux le contrôler en regardant ce qu'il y a comme valeur dans la variable bytes_read que retourne la méthode Read et tu auras une réponse

    Le while aussi n'est peut-être pas bon ne faudrait-il pas écrire plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    const int NbByteToRead = 6 ;
     
    if(serialPort1.ByteToread == NbByteToRead)
    {
     byte[] buffer = new byte[NbByteToRead];
    int bytes_read = serialPort1.Read(buffer, 0, NbByteToRead);
     
     if (bytes_read == NbByteToRead)
        safeInput(buffer);
     
    }

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    Salut,

    je te remercie, tu es un gars qui explique bien les choses...à croire que tu enseignes.

    Merciiiiiiii

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2014, 14h33
  2. Réponses: 2
    Dernier message: 12/09/2011, 08h26
  3. [XL-2007] Passer en nombre sans décimal avec VBA possible ?
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2011, 10h49
  4. Passer du Pascal à Delphi
    Par poppels dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2002, 21h07
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo