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

VB.NET Discussion :

Lecture Port Serie - Arduino


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut Lecture Port Serie - Arduino
    Bonjour, j'ai un problème au niveau de la lecture de "string" depuis mon arduino nano, en passant par le port serie COM6. Voici sur un terminal (CoolTerm) ce que mon Arduino envoie :
    Nom : XbIFt7G.png
Affichages : 1478
Taille : 96,1 Ko
    voici mon 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
    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
    Public Class Form1
        Dim InstantMoment1 As String = String.Empty
        Dim InstantMoment2 As String = String.Empty
        Dim returnStr As String = String.Empty
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            GetStatus()
        End Sub
     
        Private Sub ParametresToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ParametresToolStripMenuItem.Click
            Form2.Show()
        End Sub
     
        Private Sub ConnectionToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ConnectionToolStripMenuItem.Click
            Try
                SerialPort1.Open()
                InstantMoment1 = Format(Now, "hh:mm:ss")
                RichTextBox1.AppendText("--- Connecté au port " & SerialPort1.PortName & " à " & InstantMoment1 & ". ---" & vbNewLine)
     
            Catch
                If Err.Description.ToString.Contains("existe pas") Then
                    RichTextBox1.AppendText("--- Le port " & SerialPort1.PortName & " n'es pas disponible. ---" & vbNewLine)
                Else
                    RichTextBox1.AppendText("--- " & Err.Description.ToString & " ---" & vbNewLine)
                End If
            End Try
            GetStatus()
        End Sub
        Function GetStatus()
            If SerialPort1.IsOpen = True Then
                ToolStripStatusLabel2.Text = "Connecté."
            Else
                ToolStripStatusLabel2.Text = "IDLE."
            End If
            Return Nothing
        End Function
     
        Private Sub DeconnexionToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DeconnexionToolStripMenuItem.Click
            SerialPort1.Close()
            InstantMoment2 = Format(Now, "hh:mm:ss")
            RichTextBox1.AppendText("--- Déconnecté du port " & SerialPort1.PortName & " à " & InstantMoment2 & ". ---" & vbNewLine)
     
            GetStatus()
        End Sub
     
        Private Sub ClearToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClearToolStripMenuItem.Click
            RichTextBox1.Clear()
        End Sub
     
     
        Private Sub DebugModeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DebugModeToolStripMenuItem.Click
     
        End Sub
    End Class
    Voila, je ne sais pas comment afficher les 2 phrases dans ma richtextbox (terminal).
    Merci de votre aide.

    Cordialement,
    Juaaah.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    il faut t'abonner à l'evènement de réception de données sur le serialport puis y lire les données pour le mettre dans le textbox (un richttextbox n'est utile que pour du formatage de texte)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut
    Je n'es pas très bien compris votre réponse, le mot "abonner" m'as perturbé, est-il possible de m'éclairer ? En tout cas, merci Pol63 d'avoir toujours répondu a mes problèmes, personne très compétente

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    il faudrait voir où est déclaré ton serialport
    s'il est déclaré avec withevents tu le verras apparaitre dans le combobox en haut à gauche du code
    une fois sélectionné tu vois les évènements possibles dans le combobox de droite
    par contre si ton serialport est déclaré dans une autre classe tu ne le verras pas

    par contre s'il est publique tu peux faire l'abonnement manuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addhandler instance.evenement, addressof lasubàappeler
    ce qui équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private lasubàappeler (...) handles instance.evenement
    il y a déjà des handles dans ton code sur certaines sub
    le handles est possible si la variable est déclarée withevents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private withevents variable as new button
    quand on pose un controle sur un form dans visual studio ce n'est en fait que du code vb.net qui est généré et exécuté, et donc par défaut le withevents y est

    ceci c'est s'abonner à un évènement
    quand l'instance lève l'évènement, toutes les sub attachées sont appelées

    et donc il doit y avoir un évènement DataReceived sur le SerialPort
    par contre je sens bien qu'il va être levé sur un autre thread, auquel cas tu reviens ici pour avoir les explications (rien n'empeche de chercher sur google aussi)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut
    Ah d'accord je viens de comprendre "l'abonnement", alors effectivement il était déclaré, enfin je veut dire par là qu'il était disponible dans la combobox en haut a gauche, j'ai fait apparaitre le datareceived, mais maintenant je suis complètement désorienté, que-faire ? Désolé de vous déranger par mes problèmes

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,
    La solution du serialport a été déjà évoquée dans le forum .
    C'est d'utiliser plus simplement l'événement DataReceived du serialport et BeginInvoke dans le thread du serialport comme dit dans la doc msdn .
    un exemple 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Imports System
    Imports System.IO.Ports
    Public Class frmDataReceveid
        Private Delegate Sub SetLabelDelegate(ByVal text As String)
        Private objDelegate As SetLabelDelegate
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            objDelegate = New SetLabelDelegate(AddressOf setLabel)
     
            SerialPortCOM1.BaudRate = 9600
            SerialPortCOM1.Parity = Parity.None
            SerialPortCOM1.StopBits = StopBits.One
            SerialPortCOM1.DataBits = 8
            SerialPortCOM1.Handshake = Handshake.None
            SerialPortCOM1.Open()
        End Sub
        'Il faut passer par Control.BeginInvoke car le thread du serial port
        'n'est pas le meme que celui de l'interface(thread principal)
        Private Sub SerialPortCOM1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPortCOM1.DataReceived
            Dim sp As SerialPort = CType(sender, SerialPort)
            sp.Write("!11,f" & ControlChars.CrLf)
            's'il y a des data à lire 
            If sp.BytesToRead > 0 Then
                Dim InData As String = sp.ReadExisting()
     
                Me.BeginInvoke(objDelegate, New Object() {InData})
                'ou delai d'attente depasse 
            ElseIf sp.ReadTimeout > 1000 Then
                Dim InData As String = "pas de donnees...."
                Me.BeginInvoke(objDelegate, New Object() {InData})
            End If
        End Sub
        Private Sub setLabel(ByVal text As String)
            Me.Label13.Text = text.Substring(4)
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            SerialPortCOM1.Close()
        End Sub
    End Class
    MABROUKI 2011

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture port serie
    Par asp2014 dans le forum C#
    Réponses: 5
    Dernier message: 18/07/2014, 07h41
  2. Lecture port serie
    Par benaye dans le forum Général Java
    Réponses: 1
    Dernier message: 27/05/2011, 17h46
  3. Lecture port serie / Synchro web
    Par Marcus1981 dans le forum Langage
    Réponses: 3
    Dernier message: 28/04/2011, 16h20
  4. Acces et lecture Port serie avec Windows Seven
    Par Naklov dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/12/2009, 19h40
  5. lecture port serie tcomport
    Par STEPH42160 dans le forum C++Builder
    Réponses: 30
    Dernier message: 22/02/2007, 00h19

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