Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1221 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Lire port série C# et convertir en texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lire port série C# et convertir en texte

n°2138724
Narizuke
Posté le 24-04-2012 à 15:40:05  profilanswer
 

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 :
  1. using System;
  2. using System.Linq;
  3. using System.Data;
  4. using System.Text;
  5. using System.Drawing;
  6. using System.IO.Ports;
  7. using System.Windows.Forms;
  8. using System.ComponentModel;
  9. using System.Collections.Generic;
  10. using System.Threading;
  11. using System.IO;
  12. namespace WindowsFormsApplication1
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         private SerialPort sp = new SerialPort();
  17.         public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };
  18.         private Color[] LogMsgTypeColor = { Color.Blue, Color.Green, Color.Black, Color.Orange, Color.Red };
  19.         public Form1()
  20.         {
  21.             InitializeComponent();
  22.             sp.BaudRate = 9600;
  23.             sp.Parity = Parity.None;
  24.             sp.StopBits = StopBits.One;
  25.             sp.DataBits = 8;
  26.             sp.Handshake = Handshake.None;
  27.             sp.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
  28.         }
  29.         private void button1_Click(object sender, EventArgs e)
  30.         {
  31.             bool erreur = false;
  32.             // Si le port est ouvert, il faut le fermer
  33.             if (sp.IsOpen) sp.Close();
  34.             else
  35.             {
  36.                 // Réglage paramètre du port
  37.                 sp.PortName = cmbPortName.Text;
  38.                 try
  39.                 {
  40.                     // Ouvrir le port
  41.                     sp.Open();
  42.                 }
  43.                 catch (UnauthorizedAccessException) { erreur = true; }
  44.                 catch (IOException) { erreur = true; }
  45.                 catch (ArgumentException) { erreur = true; }
  46.                 if (erreur)
  47.                     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);
  48.                 else
  49.                     MessageBox.Show("Connexion réussi","Port disponible" );
  50.             }
  51.         }
  52.         // Connexion à la fenêtre du terminal
  53.         private void Log(LogMsgType msgtype, string msg)
  54.         {
  55.             rtfTerminal.Invoke(new EventHandler(delegate
  56.             {
  57.                 rtfTerminal.SelectedText = string.Empty;
  58.                 rtfTerminal.SelectionFont = new Font(rtfTerminal.SelectionFont, FontStyle.Bold);
  59.                 rtfTerminal.SelectionColor = LogMsgTypeColor[(int)msgtype];
  60.                 rtfTerminal.AppendText(msg);
  61.                 rtfTerminal.ScrollToCaret();
  62.             }));
  63.         }
  64.         //Convertit un tableau d'octets en une chaîne formatée de chiffres hexadécimaux.
  65.         private string ByteArrayToHexString(byte[] data)
  66.         {
  67.             StringBuilder sb = new StringBuilder(data.Length * 3);
  68.             foreach (byte b in data)
  69.                 sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
  70.             return sb.ToString().ToUpper();
  71.         }
  72.         private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
  73.         {
  74.             // Si le port est ouvert, le fermer
  75.             if (!sp.IsOpen) return;
  76.             // Obtenir le nombre d'octets en attente dans le tampon du port
  77.             int bytes = sp.BytesToRead;
  78.             // Créez une zone tampon (tableau d'octets) pour stocker les données entrantes
  79.             byte[] buffer = new byte[bytes];
  80.             // Lire les données du port et de le stocker dans la mémoire tampon
  81.             sp.Read(buffer, 0, bytes);
  82.             // Montrer à l'utilisateur les données entrantes dans un format hexadécimal
  83.             Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
  84.         }
  85.     }
  86. }


 
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.

mood
Publicité
Posté le 24-04-2012 à 15:40:05  profilanswer
 

n°2143111
TotalRecal​l
Posté le 20-05-2012 à 21:06:43  profilanswer
 

Il y a quoi dans le byte[] ??
Tu dois certainement pouvoir initialiser un Timespan avec, encore faut il savoir comment sont encodées les données reçues et si il y a une transformation arithmétique à y appliquer...


---------------
Topic .Net - C# @ Prog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Lire port série C# et convertir en texte

 

Sujets relatifs
Modifier une zone de texte SVG en JavaScript [infobulle]Le C est-il mieux que le C# ?
[C#] Remplacer le symbole € par valeur hexadecimale [Résolu]pacman en C
[C] débutant a=b différent de b=a ?analyseur lexical en C
Compilateur C++ en javaLANCER C++ A PARTIR DE JAVA
problème de passage de C au C++Triac et µC
Plus de sujets relatifs à : Lire port série C# et convertir en texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR