Narizuke | 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.
Code :
- 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));
- }
- }
- }
|
Voilà ce que j'obtiens en héxa : 18 66 60 00 18 98 18 66 1E 06 7E 7E E6 80 Je vous remercie d'avance. |