Bonjour à tous,

Je rencontre un soucis au niveau de mon port série. Je suis en train de développer une petite application qui me permet de lire les données d'un chronomètre. Voici mon 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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
 
using System;
using System.Text;
using System.Drawing;
using System.IO.Ports;
using System.Windows.Forms;
using System.IO;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private SerialPort sp = new SerialPort();
        public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };
        private Color[] LogMsgTypeColor = { Color.Blue, Color.Green, Color.Black, Color.Orange, Color.Red };
 
        public Form1()
        {
            InitializeComponent();
 
            sp.BaudRate = 9600;
            sp.Parity = Parity.None;
            sp.StopBits = StopBits.One;
            sp.DataBits = 8;
            sp.RtsEnable = true;
            sp.Handshake = Handshake.None;
            sp.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            bool erreur = false;
 
            // Si le port est ouvert, il faut le fermer
            if (sp.IsOpen) sp.Close();
            else
            {
                // Réglage paramètre du port
                sp.PortName = cmbPortName.Text;
 
                try
                {
                    // Ouvrir le port
                    sp.Open();
                }
                catch (UnauthorizedAccessException) { erreur = true; }
                catch (IOException) { erreur = true; }
                catch (ArgumentException) { erreur = true; }
 
                if (erreur)
                    MessageBox.Show("Impossible d'ouvrir le port COM. Très probablement, il est déjà en cours d'utilisation, a été supprimé, ou n'est pas disponible.", "COM Port indisponible", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                else
                    MessageBox.Show("Connexion réussi", "Port disponible");
            }
        }
 
        // Connexion à la fenêtre du terminal
        private void Log(LogMsgType msgtype, string msg)
        {
            rtfTerminal.Invoke(new EventHandler(delegate
            {
                rtfTerminal.SelectedText = string.Empty;
                rtfTerminal.SelectionFont = new Font(rtfTerminal.SelectionFont, FontStyle.Bold);
                rtfTerminal.SelectionColor = LogMsgTypeColor[(int)msgtype];
                rtfTerminal.AppendText(msg);
                rtfTerminal.ScrollToCaret();
            }));
 
 
        }
 
        //Convertit un tableau d'octets en une chaîne formatée de chiffres hexadécimaux.
        private string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder();
            foreach (byte b in data)
                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
 
            return sb.ToString().ToUpper();
        }
 
        static public string ReverseString(string str)
        {
            char[] charArray = str.ToCharArray();
            Array.Reverse(charArray);
            return new string(charArray);
        }
 
        public static string Reverse(string text)
        {
            string retour = "";
            string[] str = text.Split(' ');
            for (int i = 0; i < str.Length; i++)
            {
                retour += ReverseString(str[i]);
                retour += " ";
            }
            return retour;
        }
 
 
 
        public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
 
            switch (e.EventType)
            {
                case SerialData.Chars:
                    {
                        // Si le port est ouvert, le fermer
                        if (!sp.IsOpen) return;
 
                        // Obtenir le nombre d'octets en attente dans le tampon du port
                        int bytes = sp.BytesToRead;
                        // Créez une zone tampon (tableau d'octets) pour stocker les données entrantes
                        byte[] buffer = new byte[bytes];
                        // Lire les données du port et de le stocker dans la mémoire tampon
                        sp.Read(buffer, 0, bytes);
 
                        // Montrer à l'utilisateur les données entrantes dans un format hexadécimal
                        Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
                        string s = Reverse(ByteArrayToHexString(buffer)).Substring(0, 1);
 
                        MessageBox.Show(s);
                        break;
                    }
                case SerialData.Eof:
                    {
                        sp.Close();
                        break;
                    }
            }
        }
 
    }
}
Voici un exemple de ce que je reçois : 60 00 50 00 53 51 80 00 51

Mon soucis,c'est que je reçois deux MessagesBox avec (si on reprends l'exemple), le 1er MessageBox qui affiche '6' et le second qui affiche '0'. Donc en gros ça me fait deux chaînes :
chaîne1 = 60 et chaîne2 = 00 50 00 53 51 80 00 51
Alors qu'en fait j'aimerais obtenir qu'une seule chaîne concaténant la chaîne1 et la chaîne2
Du coup, je comprends pas pourquoi j'obtiens ce résultat

Je vous remercie d'avance