Bonjour à tous,
Je viens vous solliciter parce que je rencontre un petit soucis. Je suis en train de développer une petite application qui me permet de lire les données d’un chronomètre. J’ai réussi à faire la lecture des données, mais comme c’est la première fois que je fais ça, j’aurais voulu savoir comment traduire en format texte ce qui ressort du chrono, c’est-à-dire comment obtenir le temps indiquer sur le chronomètre. Pour l’instant, je récupère mes données en héxa. Mais je bloque sur la conversion en chaîne.
Je vous mets le code que j’utilise pour la lecture du port série.
using System;
using System.Linq;
using System.Data;
using System.Text;
using System.Drawing;
using System.IO.Ports;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;
using System.Threading;
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.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(data.Length * 3);
            foreach (byte b in data)
                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
            return sb.ToString().ToUpper();
        }
        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            // 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));
        }
    }
}
Dois-je procéder différemment peut-être ?
Je vous remercie d’avance.