dukone:
non capisco da il carattere mostrato dopo il 66...
é il carattere di LineFeed, se non vuoi visualizzarlo trimmalo.
Mi pare che la Serial usi come terminatore 0x10 o 0x13, se verifichi nel debugger cosa transita te ne accorgi subito .
P.S. che metodo hai usato del framework per leggere la seriale? ReadLine o ReadExistings?
ho usato Rxdata = SerialPort1.ReadLine ora uso Rxdata = SerialPort1.ReadLine.Trim
Mi manca da risolvere un ultimo problema e ho finito...
quando chiudo la porta per stoppare Rxdata mi va tutto in errore...
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button1.Enabled = True
ComboBox1.Enabled = True
ComboBox2.Enabled = True
SerialPort1.Close()
ToolStripStatusLabel1.Text = "Nessuna Porta Connessa "
End Sub
e l'errore mi si presenta su Rxdata = SerialPort1.ReadLine.Trim
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Rxdata = SerialPort1.ReadLine.Trim
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Enabled = False
Button2.Enabled = False
SerialPort1.Close()
Dim porte As String()
porte = SerialPort1.GetPortNames()
For i = 0 To porte.Length - 1
ComboBox1.Items.Add(porte(i))
Next i
ComboBox2.Items.Add("9600")
ToolStripStatusLabel1.Text = "Nessuna Porta Connessa "
Timer1.Enabled = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Enabled = False
ComboBox1.Enabled = False
ComboBox2.Enabled = False
Button2.Enabled = True
'....................................................... apri la porta COM
SerialPort1.Close()
SerialPort1.PortName = ComboBox1.Text
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.Open()
SerialPort1.DiscardInBuffer()
'.........................................................
ToolStripStatusLabel1.Text = "Porta Connessa " & ComboBox1.Text
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button1.Enabled = True
ComboBox1.Enabled = True
ComboBox2.Enabled = True
SerialPort1.Close()
ToolStripStatusLabel1.Text = "Nessuna Porta Connessa "
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
GroupBox1.Text = "Interval Times " & TrackBar1.Value / 1000 & " seconds"
Timer1.Interval = TrackBar1.Value
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Rxdata = SerialPort1.ReadLine.Trim
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox1.Text = TextBox1.Text & Rxdata & " "
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
Button1.Enabled = True
End Sub
End Class
Non è la stessa cosa, e così come il sorgente del programma (che hai postato) non ha niente a che vedere con lo stack trace che ti avevo chiesto.
Poca cosa, almeno ho capito che ti devo dare indicazioni un pò più 'base'.
Dove hai messo Trim hai omesso le parentesi,
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Rxdata = SerialPort1.ReadLine().Trim()
End Sub
Ma con questo non risolvi comunque il tuo problema perchè Trim rimuove gli spazi bianchi e quello non è uno spazio bianco ma un carattere di A CAPO .
Devi innanzitutto capire di che tipo è il carattere di A CAPO che ti manda arduino, una volta capito lo imposti nella proprietà NewLine dell'oggetto SerialPort1.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.NewLine =CARATTERE DI FINE RIGA RITORNATO DA ARDUINO
Button1.Enabled = False
Button2.Enabled = False
SerialPort1.Close()
Dim porte As String()
porte = SerialPort1.GetPortNames()
For i = 0 To porte.Length - 1
ComboBox1.Items.Add(porte(i))
Next i
ComboBox2.Items.Add("9600")
ToolStripStatusLabel1.Text = "Nessuna Porta Connessa "
Timer1.Enabled = True
End Sub
Fatto questo non avrai bisogno di trimmare niente perchè SerialPort1.ReadLine() ti ritornerà direttamente il buffer inviato da arduino fino al carattere di A CAPO.
A questo punto però c'è un altra cosa che non va bene, è lo sketch di arduino!!
Si perchè tu il carattere di A CAPO lo invii solo dopo il valore numerico
Visto che devi imparare perchè non parti direttamente da C# ? (è anche più pratico per il copia incolla )
SerialPort1.NewLine = Chr(10)
Da notare che il codice scritto sopra potrebbe non funzionare, non posso provarlo perchè ringraziando il cielo almeno VisualBasic ultimamente posso non usarlo più !
potrebbe essere un qualcosa tipo :
SerialPort1.NewLine = DirectCast(Chr(10), String)
Prova mbò...
Per essere quanto più comprensibili possibile si può dire che lo stack trace è l'insieme delle operazioni che ha preceduto l'eccezione (errore).
N.B. questo è una stack di errore di una applicazione Console, se l'appricazione è WinForm appare in una finestra modale.
Poi c'è lo stack di chiamate, che può essere visualizzato non necessariamente a seguito di un errore.
in sostanza è l'equivalente di chr(13) +chr(10)
Ergo cosi facendo con l'istruzione ReadLine SerialPort non ti ritornerà mai nulla.
In caso prova a mettere vbLf ...