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 :

Besoin d'aide communication port serie


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Par défaut Besoin d'aide communication port serie
    Bonjour a tous.

    Je suis en un petit nouveau sur le forum mais aussi en développement.

    j'ai acheté un arduino récemment pour faire un petite station météo pour un projet futur d'observatoire astronomique.

    j'ai réussi a coder mon arduino pour qu'il récupère les données de la sonde et j'ai réussi a créer une petite interface en c#

    la voici:
    Nom : meteo.jpg
Affichages : 165
Taille : 57,1 Ko
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    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.Text.RegularExpressions;
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            SerialPort port;
     
     
     
            public Form1()
            {
                InitializeComponent();
     
            }
     
     
     
            private void button1_Click(object sender, EventArgs e)
            {
                if (button1.Text == "Connecter") 
                {
     
                    port = new SerialPort();
                    port.BaudRate = 9600;
                    port.DataBits = 8;
                    port.StopBits = StopBits.One;
                    port.Parity = Parity.None;
                    port.PortName = comboPort.SelectedItem.ToString();
                    port.ReadTimeout = 200;
                    port.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
                    port.Open(); 
                    button1.Text = "Deconnecter";
                }
                else 
                {
                   port.Close(); 
                   button1.Text = "Connecter";
                }
            }
     
            private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
     
                String texte = port.ReadExisting();
                SetText(texte);
            }
     
            delegate void SetTextCallback(string text);
            private void SetText(string text)
            {
     
                if (textBox4.InvokeRequired)
                {
     
     
                    SetTextCallback d = new SetTextCallback(SetText);               
                  textBox4.Invoke(d, new object[] {text});
     
                }
                else
                {
                    textBox4.Text += text;
     
                    string[] newData = textBox4.Text.Split(new char[] { });
                    textBox1.Text = newData[0] + " %";
                    textBox2.Text = newData[1] + " °C";
                    textBox3.Text = newData[2] + " °C";
     
     
                }
    le problème c'est que les données arrivent toutes les 2sec sur le port série et que la ce code ne s'actualise pas il me prend juste la première chaine arrivant et c'est tout.

    j'avais pensé a un timer mais je ne sais pas du tout comme le mettre en œuvre. ou est ce qu'il existe un fonction pour lire juste la dernière ligne de la textbox, si cela existe je n'ai rien trouver sur le net pouvant m'aider.

    cordialement

    Damien

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 257
    Par défaut
    astrodam89,


    Il faut peut être modifier les propiétés ReadBufferSize et ReceivedBytesThreshold pour recevoir toutes les données.
    Ou quelque chose de plus "tarabiscoté" comme fermer le port et le rouvrir à chaque fois vu que les données n'arrivent que toutes les 2s.

    Salutations.

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Normalement ça devrait fonctionner.
    Peut-être un problème de refresh ?
    Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    textBox4.Refresh();
    textBox1.Refresh();
    textBox2.Refresh();
    textBox3.Refresh();
    Le mieux c'est de mettre un point d'arrêt (F9) dans ta méthode DataReceived. Comme ça tu vois combien de fois tu y passes. Si tu ne passe qu'une fois ou bien les fois suivantes qu'est-ce qui diffère.

    Quoi qu'il en soit le Timer on oublie Il faut juste que tu réceptionnes trame par trame. A toi de définir quand la trame est complète et d'effectuer le traitement dessus (parsing et affichage)

  4. #4
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Par défaut
    j'ai essayé avec le Refresh mais ca ne marche pas

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Et le point d'arrêt ça donne quoi ?

  6. #6
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Par défaut
    Citation Envoyé par lead8209 Voir le message
    Et le point d'arrêt ça donne quoi ?
    j'ai mit le point d’arrêt sur le data received et il y pas bien plusieurs fois.

Discussions similaires

  1. Communication port serie en java
    Par rimas2009 dans le forum Général Java
    Réponses: 3
    Dernier message: 24/04/2009, 16h59
  2. Besoin d'aide sur port parallèle
    Par Crabe05 dans le forum C
    Réponses: 2
    Dernier message: 30/10/2008, 17h58
  3. communication port serie avec GTK+?
    Par cguignol dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 28/06/2007, 11h15
  4. Communication port serie avec un microcontrolleur
    Par crazydede8 dans le forum C
    Réponses: 4
    Dernier message: 29/07/2006, 14h49
  5. [communication] Port serie
    Par Mr bizzz dans le forum Flash
    Réponses: 8
    Dernier message: 07/06/2006, 01h38

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