Problemi ricezione porta serial con vb 2010 express e Arduino

giovedì 09 febbraio 2012 - 19.24
Tag Elenco Tags  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  Internet explorer 8.0  |  Firefox

essereumano Profilo | Newbie

Salve a tutti, una decina di anni fa avevo imparato abbastanza bene visual basic 6 ma in questi anni mi sono dedicato più alle riparazioni che alla programmazione, da qualche mese ho acquistato Arduino e mi sono messo a smanettarci, ho ripreso in mano visual basic, che intanto è arrivato alla versione 2010 e ho cominciato a sperimentare.
Ho creato un semplice programma che visualizza cio che viene ricevuto dalla porta seriale e che invia una stringa sempre via seriale ad Arduino,l'invio di dati ad Arduino0 funziona bene ma il problema è nella ricezione da Arduino, sul suo serial monitor riesco a vedere i caratteri inviati ma quando uso vb e cerco di visualizzare in una label ciò che ricevo dalla seriale non ho risposta fino a che non ricevo il timeout, ricevendo sulla label la stringa del timeout correttamente ho iniziato a pensare che il problema sia nell'acquisizione dei dati.
Vi posto il codice completo creato con visualbasic 2010 express:

Public Class Form1
'questo programma invia e riceve dati alla seriale selezionata, base per partire con comunicazione arduino
Dim comselect As String
Sub GetSerialPortNames()
' Show all available COM ports.
cbxcomsel.Items.Clear()
For Each sp As String In My.Computer.Ports.SerialPortNames
cbxcomsel.Items.Add(sp)
Next
End Sub
Function ReceiveSerialData() As String
' Receive strings from a serial port.
Dim returnStr As String = ""

Dim com1 As IO.Ports.SerialPort = Nothing
Try
com1 = My.Computer.Ports.OpenSerialPort(comselect)
com1.BaudRate = 9600
com1.ReadTimeout = 10000
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
tmrrec.Stop() 'blocca il timer per la ricezione altrimenti manda in blocco l'app
Finally
If com1 IsNot Nothing Then com1.Close()
End Try

Return returnStr
End Function

Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort =
My.Computer.Ports.OpenSerialPort(comselect)
com1.WriteLine(data)
End Using
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GetSerialPortNames()
End Sub

Private Sub cmdserialupd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdserialupd.Click
GetSerialPortNames()
End Sub

Private Sub cbxcomsel_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbxcomsel.SelectedIndexChanged
comselect = cbxcomsel.SelectedItem
End Sub

Private Sub cmdsnddata_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsnddata.Click
SendSerialData(txtsenddata.Text)
End Sub

Private Sub tmrrec_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrrec.Tick
lbldatareceive.Text = ReceiveSerialData()
End Sub

Private Sub cmdactrec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdactrec.Click
tmrrec.Start()
End Sub

Private Sub cmdstoprec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdstoprec.Click
tmrrec.Stop()
End Sub

End Class


Praticamene quando premo il tasto cmdactrec avvio il timer, impostato a 5 secondi che copia il valore restituito da ReceiveSerialdata() sulla label lbldatareceive

Se seve posso allergare il file del progetto, grazie in anticipo per l'aiuto

luigidibiasi Profilo | Guru

cioè ricevi correttamente i dati che ti vengono inviati da arduino solo dopo che è scattata l'eccezione timeout?
o non ti arriva proprio nulla?


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -

essereumano Profilo | Newbie

Non non visualizzo i dati, finché non arriva il timeout e quello mi viene visualizzato , quindi credo dinon riceverli ma riesco a inviarli tranquillamente. Credo che il problema sia nella funzione get serial data management non capisco dove.

essereumano Profilo | Newbie

Nessuno sa suggerirmi qualcosa?

luigidibiasi Profilo | Guru

se non ricevi dati è probabile che
* la porta non sia configurata correttamente (baudrate etc)
* prima di ricevere devi inviare un segnale per 'svegliare' l'apparato...
* la ricezione deve seguire un protocollo particolare... (prima apparato invia un sYN, tu invii un ACK, apparato ti invia i dati)

non mi viene in mente altro... se è una seriale stai proprio a basso livello e quindi non hai software davanti che potrebbe darti fastidio
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -

essereumano Profilo | Newbie

Grazie intanto della risposta, anche io stavo pensando ad un problema di configurazione, stranamente con la solita configurazione riesco ad inviare un carattere ad arduino ma una volta programmato arduino per inviare in seriale la stringa away non lo visualizzo su vb ma lo visualizzo sull'ide di arduino. Cercherò qualche specifica in più.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5