IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

lecture port série


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut lecture port série
    Bonjour,

    je n'arrive pas à recevoir de données en série via mon port com. Pourtant je m'y accroche mais rien.
    Pouvez-vous m'aider plz?
    Voici mon premier code qui marche nickel : je choisi le port com où il y a un truc de connecté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBox1.DataSource = SerialPort.GetPortNames();
    J'ai ensuite un bouton qui me permet de me connecter à mon port com et j'aimerais qu'il permette aussi de recevoir les info et les afficher dans une textbox.
    Perso, ici je test avec un byte mais plus tard je vais travailler avec 5 bytes à afficher dans 5 textbox différents. Là je sens que je serai un peu perdu.

    Mais commençons par recevoir 1 byte et l'afficher :

    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
            private void timer1_Tick(object sender, EventArgs e)
            {
                label1.Text = DateTime.Now.ToString("dd-MM-yyyy");
                label2.Text = DateTime.Now.ToString("hh:mm:ss ");
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                if (comboBox1.Visible == true)
                {
                    MessageBox.Show("Veuillez choisir le port COM spécifique et appuyer sur OK pour continuer!", "Mauvaise procédure", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                else
                {
     
                    if (buttonConnectDeconnect.Text == "Connecté")
                    {
                        buttonConnectDeconnect.Text = "Déconnecté";
                        label11.ForeColor = Color.Red;
                        buttonConnectDeconnect.BackColor = Color.Red;
     
                        if (SerialPort1.IsOpen)
                        {
                            SerialPort1.Close();
                            if (SerialPort1.IsOpen == false)
                                label11.Text = "Port " + comboBox1.Text + " Fermé";
                            else
                                label11.Text = "Port " + comboBox1.Text + " Ouvert";
                        }
     
                    }
                    else
                    {
                        buttonConnectDeconnect.Text = "Connecté";
                        label11.ForeColor = Color.Green;
                        buttonConnectDeconnect.BackColor = Color.Green;
     
                        //Serial source
                        SerialPort port = new SerialPort(comboBox1.DataSource.ToString(), 9600, Parity.None, 8, StopBits.One);
     
                        //Ouverture du port
                        if (SerialPort1.IsOpen == false)
                        {
                            SerialPort1.Open();
                            if (SerialPort1.IsOpen == true)
                            {
                                label11.Text = "Port " + comboBox1.Text + " Ouvert";
                            }
                            int recivedData = SerialPort1.ReadByte();
                            textBox2.Text = recivedData.ToString();
                        }
                    }
                }
            }
    9a ne marche pas des masses.

    Pouvez-vous m'aider svp...j'ai déjà rechercher sur le net mais ils disent tous des choses différentes et il n'y a pas bcp d'exemple dans la littérature!

    Merci à vous

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Hello,

    Suis pas tout à fait d'accord avec toi. Il y a des exemples sur le web...

    Je pense qu'il faut que tu te penches sur l'évènepment DataReceived.

    Comment fais-tu pour tester? Y-at-il effectivement qque chose qui arrive physiquement sur le "fil"? Parce que le Read() que tu fais est bloquant avec timeout apparemment...

    Christophe

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Quand tu as une erreur dans ton code, indique le message d'erreur obtenu : on est pas devins...

    Sinon y a pas mal de problèmes dans ton code...

    - Tu déclares et initialises une variable port, mais partout ailleurs c'est SerialPort1 que tu utilises, donc en fait l'instance de SerialPort que tu as créée n'est jamais utilisée

    - "comboBox1.DataSource.ToString()" va te renvoyer "System.String[]", puisque la DataSource est un tableau de chaines de caractères. Si tu veux le nom du port sélectionné, essaie plutôt "(string)comboBox1.SelectedItem"

    - N'utilise jamais les textes des contrôles dans la logique de ton code : si un jour tu changes le texte de ces contrôles, tu risques d'oublier de modifier le code qui en dépend, et tu introduis des bugs. Utilise plutôt des variables de type bool (ou autre, selon les cas) pour gérer l'état de ton application

    Sinon, pour changer de port, tu n'as pas besoin de créer une nouvelle instance de SerialPort : il suffit de modifier la propriété PortName de SerialPort1

    Et puis donne des vrais noms à tes contrôles, parce que "comboBox1", c'est pas super expressif... on comprend ce que c'est en voyant comment il est utilisé, mais quand tu commences à avoir beaucoup de contrôles ça devient vite compliqué si tu n'as que des numéros pour les identifier !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Merci pour celui bien expliqué...il me dirigera.

    Sinon, je suis débutant : moi commencer avec tuto de développez.com...moi apprendre pour moi...
    Je sais que tu n'es pas devin, mais je débute...Mais je prend bien note de tes remarques. Je vous tiens au courant.

    Oui, j'ai un port série relié à un microcontrôleur et je m'envois des bytes...je peux donc savoir quels sont les bytes que je dois recevoir.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Salut,

    j'ai testé avec toutes les remarques, mais je n'ai rien qui arrivent sur la textbox2 comme demandé. Pourtant sur mon terminal je vois des choses arriver.
    Comment puis-je vous passer mon code entier pour que vous puissiez éventuellement regarder?

    Merci à vous.

  6. #6
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut S'en sortir avec les serial port en c#
    Voici en resumé comment s'en sortir avec les serial port en c# (c pas evident)

    tout dabord il faudrai declarer une nouvelle instance de ton serial port en static au debut de ton programme lorsque tu declare tes variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public partial class TonAppliSerialPort: Form
        {
            static SerialPort serialPort1;
    ensuite lorsque tu initialise ta form juste apres InitializeComponent();
    tu crée une nouvelle instance de ton serial port et un SerialDataReceived Event Handler comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public FrmIselControl()
            {
                //Initialise the form (labels, textBox, buttons)
                InitializeComponent();
     
                //Creates a new instance of the serialPort class
                serialPort1 = new SerialPort();
     
                //Sets the SERIAL PORT ENCODING 
                serialPort1.Encoding = Encoding.Default;
     
                //Recupere les données en entrée du port serie 
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            }
    ensuite tu ouvre ton port serie (un petit try catch, si jamais il y a un pepin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     private void FrmIselControl_Load(object sender, EventArgs e)
            {
                try
                {
                    //Opening the serial port
                    serialPort1.Open();
     
                }
                catch (Exception ex)
                {
                    messageBox.Show(ex.Message);
                }
            }
    ensuite tu peux ecrire sur ton port serie, voila un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void ecrirtureSurPort()
            {
                try
                {
                    string msg = "salut Monsieur le port serie";
                    serialPort1.Write(msg);
                }
                catch (Exception ex)
                {
                    messageBox.Show(ex.Message);
                }
            }
    Ensuite pour lire sur ton port serie, tu devra faire ceci:
    -1)créer une methode datareceived qui prend en parametre le SerialDataReceivedEventArgs que tu as instancié au tout debut de ton 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
           private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
    //string vide
                string value = "";                
    //tant qu'il y a des données entrée on continue
                while (serialPort1.BytesToRead > 0)
                {
    // on crée un char de 255 caractere
                    char[] buffer = new char[255];
    //lecture du buffer jusqu'a sa longeur buffer.Length
                    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
    //on remplit notre string value
                    for (int i = 0; i < bytes_read; i++)
                    {
                        value += buffer[i];
                    }
                }
                safeInput(value.ToString());
            }
    -2)créer une methode pour pouvoir ecrire sur les controle(c'est ce qui t'interresse) le port serie utilse un thread(fil d'execution) different du thread utilisé pour ecrire sur des controles, textbox..
    c'est pour cela que tu devra invoker un delegate qui prend en parametre le message que tu lis du port serie. comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            private void safeInput(string msg)
            {
                InputTextBox.Invoke(new EventHandler(delegate
                {
                        InputTextBox.SelectedText = string.Empty;
                        InputTextBox.AppendText(msg.ToString());
                        InputTextBox.ScrollToCaret();
                    }                
                }));
            }
    REMARQUE IMPORTANTE:
    il se peut que les message envoyé ne soient pas interpretés par la machine avec laquelle vous communiquer, si cela arrive penser a mettre un carriage return \r ou une nouvelle ligne \n ou les deux \r\n, tout depend de la machine.
    vous pouvez aussi utiliser readto et readexisting, (se renseigner sur msdn)

    voila j'espere que ce message aidera nombreux d'entre vous.
    bon courage.
    Lasrevinu

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    merci de ta réponse super

    Cependant bien n'ayant pas encore testé, je ne comprend pas la dernière instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            private void safeInput(string msg)
            {
                InputTextBox.Invoke(new EventHandler(delegate
                {
                        InputTextBox.SelectedText = string.Empty;
                        InputTextBox.AppendText(msgOutput.ToString());
                        InputTextBox.ScrollToCaret();
                    }                
                }));
            }
    Je ne vois pas où on vient lire le buffer de réception du port série.

    Peut-être ais-je mal compris?

    Bien à toi

  8. #8
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Oui c normal, je me suis trompé
    au lieu de mettre msgOutput tu le remplace par msg
    si le port serie te renvoie par exemple une chaine de charactere: "bienvenu"
    elle sera contenu dans value et sera accepté comme parametre dans ta methode safeInput.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    safeInput(value.ToString());
    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //pour vider le textbox
    InputTextBox.SelectedText = string.Empty;
    //pour ajouter ton message a la textbox
    InputTextBox.AppendText(msg.ToString());
    //pour être sûr que le point d'entrée du texte en cours se trouve dans la
    // région visible du contrôle textbox
    InputTextBox.ScrollToCaret();
    tu verra sur ton textbox s'afficher bienvenu
    voila

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Merci c'est beaucoup plus claire.
    J'ai tappé ton code dans le mien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    safeInput(SafeMsgType.Incoming, value.ToString());
    Dan ce code, SafeMsgType n'est pas reconnu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //pour vider le textbox
    InputTextBox.SelectedText = string.Empty;
    //pour ajouter ton message a la textbox
    InputTextBox.AppendText(msg.ToString());
    //pour être sûr que le point d'entrée du texte en cours se trouve dans la
    // région visible du contrôle textbox
    InputTextBox.ScrollToCaret();
    Ici, InputTextBox n'est pas reconnu...!!!

    Dsl, je suis un vrais débutant de 2 semaines...^^

    Merci pour ta compréhension

  10. #10
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    encore un mauvais copier-coller.
    SafeMsgType est une enumeration que j'utilise pour la forme,
    tu n'a qu'a l'enlever, tu en a pas besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    safeInput(value.ToString());
    tu aura compris pourquoi elle est pas reconnue

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    salut,

    voila je me rattaque au fameux réception de données du port COM avec pas mal de recul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
    me permettra de faire quoi? Où se trouve mes données(dans quelle variable)???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    for (int i = 0; i < bytes_read; i++)
                    {
                        value += buffer[i];
                    }
    je comprend pas à quoi ça sert, dsl ^^ On fait une addition de quoi et pourquoi?



    Mon but est de recevoir 6 données du port com.
    Ensuite afficher les 6 données dans une textbox différent! (chaque données à sa propre textbox et écrase la valeur précédente!)

    Mes questions sont peut-être basique, mais je veux comprendre...

    Merci de ta patience

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par moustiqu3 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
    me permettra de faire quoi? Où se trouve mes données(dans quelle variable)???
    Les octets lus se trouvent dans le tableau buffer
    La variable bytes_read contient le nombre d'octets lus

    Citation Envoyé par moustiqu3 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    for (int i = 0; i < bytes_read; i++)
                    {
                        value += buffer[i];
                    }
    je comprend pas à quoi ça sert, dsl ^^ On fait une addition de quoi et pourquoi?
    On additionne les octets reçus qui se trouvent dans le buffer... Pour répondre à la question "pourquoi", il faudrait demander à lasrevinu qui a écrit ce code... mais j'ai pas l'impression que ça ait vraiment de rapport avec ce que tu veux faire.

    Citation Envoyé par moustiqu3 Voir le message
    Mon but est de recevoir 6 données du port com.
    Ca veut dire quoi "6 données" ? Le mot "données" n'est pas dénombrable...
    Tu veux dire 6 octets ? Six messages ? dans ce cas comment sont définis les messages ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Bonsoir et merci pour tes réponses.

    Je reçois 6 octets (toutes les minutes) et j'aimerais les recevoir via le port COM.
    Je voudrais que chaque octet soit affiché dans une textbox différent.
    octet1 -> textbox1
    ...
    octet6-> textbox6

    La minute d'après, on écrase la valeur des textbox
    octet1 -> textbox1
    ...
    octet6-> textbox6

    voila...j'espère que c'est plus compréhensible

    Merci ;-)

  14. #14
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Juste avant d'aller plus loin,
    précise nous ton problème,
    tu dialogue avec quel sorte de machine ?
    As-tu un manuel d'utilisation, spécification..?
    si oui, connais-tu les commandes a envoyer pour dialoguer avec ta machine.
    la machine renvoie quoi? des characteres, des bytes,
    quel est l'encodage utilisé? AscII, unicode, utf8...
    la machine te renvoie un charactere de terminaison, CR LF (carriage return, line feed?)
    as-tu essayé de dialoguer via l'hyperTerminal windows,
    une fois que tu auras eclairci toutes ses questions, tu pourra avancer plus vite
    bon courage

  15. #15
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Je viens de lire le message que tu as ecris presque en meme temps que moi
    le code que je t'ai conseillé fonctionne correctement,

    voici quelques explications supplémentaires:

    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
     private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
    //string vide
                string value = "";                
    //tant qu'il y a des données entrée on continue
                while (serialPort1.BytesToRead > 0)
                {
    // on crée un char de 255 caractere
                    char[] buffer = new char[255];
    //lecture du buffer jusqu'a sa longeur buffer.Length
                    int bytes_read = serialPort1.Read(buffer, 0, buffer.Length);
    //tes characteres sont contenus dans buffer.
    //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
                    for (int i = 0; i < bytes_read; i++)
                    {
                        value += buffer[i];
                    }
                }
    //la methode toString passe tes bytes en characteres lisibles.
                safeInput(value.ToString());
            }
    voila

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    ok, super

    Mais que faut-il mettre dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    safeInput(value.ToString());
    ?
    Parce que j'ai mes 6 bytes dans buffer[0]->buffer[5] si j'ai bien pigé
    Je veux les mettre en string pour pouvoir les afficher (si j'ai bien pigé!)

    Quel est le code à mettre dans safeinput?

    Merci de ton aide et vraiment, dsl d'être niais ^^

  17. #17
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Oui c'est bien ca,
    tout ce que tu as as dit est juste,
    il n'y a pas de code a mettre dans safeinput, le code y est.
    safeinput ecrit dans le textbox!

    maintenant reste a....
    ..ba reste a afficher tes données
    crée un textBox que tu appelera InputTextBox

    si tu te rappele, on a creé un delegate pour pouvoir acceder au thread d'ecriture dans le textBox, c'est le but de la methode safeInput
    (la lecture du port serie etant dans un autre thread..)

    et lance ton programme
    bon courage

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    ^^ tu me fais rire...moi nouveau dans c#, moi pas tout comprendre ce que tu dis...
    Tread, moi comprendre ^^
    Mais tu n'a pas un bête exemple de mise des tableau dans les textbox (si j'ai bien pigé)
    Tu peux me dirigé par un petit exemple, petit bout de code?

    Merci de ton aide

  19. #19
    Membre habitué Avatar de lasrevinu
    Inscrit en
    Février 2010
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 215
    Points : 134
    Points
    134
    Par défaut
    Hm...
    attend je vais voir...

    non t'inquiete, on est là pour ca!

    ce que tu fait,
    va dans ta forme principale,
    dans la toolbox à gauche,
    glisse un control textbox
    en bas à droite tu vois les proprieté de ton textbox,
    renome le en InputTextBox
    et ensuite....
    ..non c'est tout,
    sinon,
    il y a plein de tutoriel sur le net,
    je te recommande d'en regarder quelques uns.
    la refrence etent celui de serge tahé
    il y a tout dedans, sauf les ports serie
    amuse toi bien

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    je n'ai pas encore utilisé le code est-ce correct?

    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
            private void button1_Click(object sender, EventArgs e)
            {
                if (comboBox1.Visible == true)
                {
                    MessageBox.Show("Veuillez choisir le port COM spécifique et appuyer sur OK pour continuer!", "Mauvaise procédure", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                else
                {
     
                    if (buttonConnectDeconnect.Text == "Connecté")
                    {
                        buttonConnectDeconnect.Text = "Déconnecté";
                        label11.ForeColor = Color.Red;
                        buttonConnectDeconnect.BackColor = Color.Red;
     
                        if (SerialPort1.IsOpen)
                        {
                            SerialPort1.Close();
                            label11.Text = "Port " + comboBox1.Text + " Fermé";
                        }
     
                    }
                    else
                    {
                        buttonConnectDeconnect.Text = "Connecté";
                        label11.ForeColor = Color.Green;
                        buttonConnectDeconnect.BackColor = Color.Green;
     
                        //Serial source
                        _serialPort = new SerialPort(comboBox1.DataSource.ToString(), 9600, Parity.None, 8, StopBits.One);
     
                        _serialPort.DtrEnable = true;
                        _serialPort.RtsEnable = true;
                        _serialPort.ReadTimeout = 500;
     
                        //Ouverture du port
                        if (!SerialPort1.IsOpen)
                        {
                            SerialPort1.Open();
                            //Recupere les données en entrée du port serie 
                            SerialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
                        }
                    }
                }
            }
    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
            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                //string vide
                string value = "";
                //tant qu'il y a des données entrée on continue
                while (SerialPort1.BytesToRead > 0)
                {
                    // on crée un char de 255 caractere
                    char[] buffer = new char[255];
                    //lecture du buffer jusqu'a sa longeur buffer.Length
                    int longueur_bytes_read = SerialPort1.Read(buffer, 0, buffer.Length);
                    //tes characteres sont contenus dans buffer.
                    //on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
                    for (int i = 0; i < longueur_bytes_read; i++)
                    {
                        value += buffer[i];
                    }
                }
                //la methode toString passe tes bytes en characteres lisibles.
                safeInput(value.ToString());
            }
     
               private void safeInput(string msg)
             {
                {
                        // on efface la textbox
                        textBox1.SelectedText = string.Empty;
                        textBox2.SelectedText = string.Empty;
                        textBox3.SelectedText = string.Empty;
                        textBox4.SelectedText = string.Empty;
     
                       // on met les données dedans en string (conversion  char->string)
                        textBox1.AppendText(msg[0].ToString());
                        textBox2.AppendText(msg[1].ToString());
                        textBox3.AppendText(msg[2].ToString());
                        textBox4.AppendText(msg[3].ToString());
                  }
    Merci de ta réponse fort sympathique d'ailleurs, j'ai vraiment apprécié ton explication

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lecture port série
    Par mickael.be dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/07/2008, 09h49
  2. lecture port série
    Par biscot19 dans le forum C
    Réponses: 6
    Dernier message: 13/07/2007, 08h54
  3. lecture port série
    Par alex2395 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/03/2007, 15h59
  4. [API Win32 sans MFC] Lecture port série: thread bloqué
    Par dacid dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 24/05/2006, 13h34
  5. Pb de lecture port série
    Par amalis dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 18/03/2006, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo