Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. Visual Studio 6.0
Problemi ricezione porta serial con vb 2010 express e Arduino
giovedì 09 febbraio 2012 - 19.24
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
.NET 4.0
|
Windows XP
|
Visual Studio Express
|
Internet explorer 8.0
|
Firefox
essereumano
Profilo
| Newbie
4
messaggi | Data Invio:
gio 9 feb 2012 - 19:24
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
1.077
messaggi | Data Invio:
ven 10 feb 2012 - 11:37
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
4
messaggi | Data Invio:
sab 11 feb 2012 - 21:07
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
4
messaggi | Data Invio:
mer 15 feb 2012 - 16:48
Nessuno sa suggerirmi qualcosa?
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
mar 21 feb 2012 - 11:13
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
4
messaggi | Data Invio:
mar 21 feb 2012 - 14:52
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ù.
Torna su
Stanze Forum
Elenco Threads
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 !