Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture des données d'une clé USB en c#

Sujet résolu
    16 janvier 2018 à 16:58:11

    Bonjour,

    J'ai pour projet d'écrire un programme d'acquisition des données envoyé par un capteur de température et reçus par un dongle USB Enocean, le tout devra être affiché dans une zone de texte d'une interface graphique.

    Jusqu'à présent je n'ai fait que des programmes en C sur console, mes notions en C# sont donc assez limité.

    Je sais pas si je dois utiliser la classe SerialPort étant donné que le port USB semble être reconnu comme un port série, si vous pouvez m'aiguillez ça serait cool.

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      22 janvier 2018 à 14:41:26

      Il n'y a pas d'exemples dans le SDK ou la documentation du dongle USB Enocean ?
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        26 janvier 2018 à 16:22:10

        Bonjour merci pour votre réponse, j'ai fini par réussir à lire les données reçues sur ma clé, il fallait en effet que j'utilise la classe SerialPort.

        J'ai maintenant un nouveau problème, mon programme me permet donc d'afficher les trames(constitué de 24 octets) que je reçois sur une textbox, mon soucis c'est que je cherche à afficher uniquement le dixième octet de chaque trame et le stocker dans une variable.

        Voici mon code actuel :

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using System.Windows.Forms;
        using System.IO.Ports;
        using System.IO;
        
        
        namespace Test2
        {
            public partial class Form1 : Form
            {
        
                static SerialPort EnOceanPort;
        
                public Form1()
                {
                    EnOceanPort = new SerialPort("COM3", 57600, Parity.None, 8, StopBits.One); // Instance de la classe SerialPort
                    InitializeComponent();
                    
                    EnOceanPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                }
        
                
                private void button1_Click(object sender, EventArgs e)
                {
                    bool erreur = false;
        
                    if (EnOceanPort.IsOpen)
                    {
                        EnOceanPort.Close();
                    }
                    else
                    {
                        try
                        {
                            // Ouvrir le port
                            EnOceanPort.Open();
                            button2.Text="Fermer le port";
                        }
                        catch (UnauthorizedAccessException) { erreur = true; }
                        catch (IOException) { erreur = true; }
                        catch (ArgumentException) { erreur = true; }
        
                        if (erreur)
                            MessageBox.Show("Impossible d'ouvrir le port COM");
                        else
                            MessageBox.Show("Connexion réussi");
                        button1.Text = "Port ouvert";
                    }
                }
                private void button2_Click(object sender, EventArgs e)
                {
                    EnOceanPort.Close();
                    button1.Text = "Ouvrir le port";
                    MessageBox.Show("Le port a été fermé");
                }
                private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
                {
                    int bytes = EnOceanPort.BytesToRead;
        
                    byte[] buffer = new byte[bytes];
        
                    EnOceanPort.Read(buffer, 0, bytes);
        
                    safeInput(ByteArrayToHexString(buffer));
                }
        
                //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 safeInput(string msg)
                {
                    textBox1.Invoke(new EventHandler(delegate
                    {
                        textBox1.SelectedText = string.Empty;
                        textBox1.AppendText(msg);
                        textBox1.ScrollToCaret();
                    }));
                }
        
            }
        }



        • Partager sur Facebook
        • Partager sur Twitter
          26 janvier 2018 à 16:54:13

           private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
                  {
                      int bytes = EnOceanPort.BytesToRead;
           
                      byte[] buffer = new byte[bytes];
           
                      EnOceanPort.Read(buffer, 0, bytes);
           
                      safeInput(ByteArrayToHexString(buffer[9]));
                  }
           
                  //Convertit un octets en une chaîne formatée de chiffres hexadécimaux.
                  private string ByteArrayToHexString(byte data)
                  {
                      StringBuilder sb = new StringBuilder(3);
                      sb.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));
                      return sb.ToString().ToUpper();
                  }

          -
          Edité par bacelar 26 janvier 2018 à 16:54:35

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            26 janvier 2018 à 17:11:09

            Merci pour votre réponse, j'avais déjà testé mais ça ne fonctionne pas, je reçois ce message d'erreur :


            Erreur    CS1503    Argument 1 : conversion impossible de 'byte' en 'byte[]'   

            • Partager sur Facebook
            • Partager sur Twitter
              26 janvier 2018 à 17:15:21

              "Typo"

              private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
                     {
                         int bytes = EnOceanPort.BytesToRead;
               
                         byte[] buffer = new byte[bytes];
               
                         EnOceanPort.Read(buffer, 0, bytes);
               
                         safeInput(ByteToHexString(buffer[9]));
                     }
               
                     //Convertit un octets en une chaîne formatée de chiffres hexadécimaux.
                     private string ByteToHexString(byte data)
                     {
                         StringBuilder sb = new StringBuilder(3);
                         sb.Append(Convert.ToString(data, 16).PadLeft(2, '0').PadRight(3, ' '));
                         return sb.ToString().ToUpper();
                     }



              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

              Lecture des données d'une clé USB en c#

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown