02/04 10:02
Carlo
Dalle foto che hai mandato si capisce che non è la strada per andare a Roma.
Tornerei al timer2 con interval 1000, e su arduino delay(200 o 300) non ricordo.
La situazione in cui ricevevi con la foto che avevi allegato, la riallego.
Quando hai ripristinato la situazione della foto, metti dentro al timer il codice che filtra e sceglie i dati:
nella listbox1 varie info.
modificare il delay per ottimizzare è consigliato.
per il volume che va a zero non so.
Tornerei al timer2 con interval 1000, e su arduino delay(200 o 300) non ricordo.
La situazione in cui ricevevi con la foto che avevi allegato, la riallego.
Quando hai ripristinato la situazione della foto, metti dentro al timer il codice che filtra e sceglie i dati:
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick Dim str As String = str = RiceviDati() ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str.Replace(vbCrLf, "\n")) ListBox1.TopIndex = ListBox1.Items.Count - 1 ListBox1.HorizontalScrollbar = True Dim righe() = str.Split(vbCrLf) Dim uso = 0 ' la prima riga If righe.Length = 0 Then Return If righe.Length > 1 Then uso = 1 ' la seconda riga ' Elaboro la stringa Dim valoriDivisi() As String = righe(uso).Split(";") If valoriDivisi.Length <> 2 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due") Return End If ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso)) If valoriDivisi(0) = "E" Then lblgradi.Text = "errore" ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1)) Else ' Il primo dato è riferito ai gradi della bussola valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale If Double.TryParse(valoriDivisi(0), avanzamento) Then If avanzamento <= 0 Or avanzamento >= 360 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range") Else lblgradi.Text = avanzamento.ToString("000°") Pcboxbussola.Invalidate() ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°")) End If Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0).Substring(0, 3) & " non è un intero") End If '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa Dim volume As Integer = 0 If Integer.TryParse(valoriDivisi(1), volume) Then If volume < 0 Or volume > 100 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range") Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1)) media_pleyer.lb_volume.Text = valoriDivisi(1) + "%" media_pleyer.Volume_control1.value = valoriDivisi(1) lb_volume.Text = valoriDivisi(1) + "%" Volume_control1.value = valoriDivisi(1) media_pleyer.Timer3.Start() media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value video.Wmp1.settings.volume = video.Volume_control1.value End If Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero") End If End If End Sub
nella listbox1 varie info.
modificare il delay per ottimizzare è consigliato.
per il volume che va a zero non so.
Ultima modifica effettuata da Carlo 02/04 10:04
in programmazione tutto è permesso
02/04 11:34
nightwolf
ho ripristinato il tutto come prima con questo codice
e ricevo come prima, a parte la prima riga che è lunghissima.
Function RiceviDati() As String Dim Ricevuti As String Try Ricevuti = SerialPort1.ReadExisting If Ricevuti = Nothing Then Return "E;null" ' ritorna con la E Else Return Ricevuti End If Catch ex As Exception Return "E;" & ex.Message ' ritorna con la E End Try End Function Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick Dim str As String = RiceviDati() str = str.Replace(vbCrLf, "\n") ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - str = " & str) ListBox1.TopIndex = ListBox1.Items.Count - 1 ListBox1.HorizontalScrollbar = True End Sub
e ricevo come prima, a parte la prima riga che è lunghissima.
aaa
02/04 11:38
nightwolf
inserendo l ultimo codice, torniamo come prima che dice
ricevuto=false
elaborato=errore i valori non sono due
ps. ho risolto il problema del potenziometro
ricevuto=false
elaborato=errore i valori non sono due
ps. ho risolto il problema del potenziometro
aaa
02/04 12:47
Carlo
Postato originariamente da nightwolf:
ho ripristinato il tutto come prima con questo codice
e ricevo come prima, a parte la prima riga che è lunghissima.
ho ripristinato il tutto come prima con questo codice
Function RiceviDati() As String Dim Ricevuti As String Try Ricevuti = SerialPort1.ReadExisting If Ricevuti = Nothing Then Return "E;null" ' ritorna con la E Else Return Ricevuti End If Catch ex As Exception Return "E;" & ex.Message ' ritorna con la E End Try End Function Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick Dim str As String = RiceviDati() str = str.Replace(vbCrLf, "\n") ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - str = " & str) ListBox1.TopIndex = ListBox1.Items.Count - 1 ListBox1.HorizontalScrollbar = True End Sub
e ricevo come prima, a parte la prima riga che è lunghissima.
Con il codice sopra ricevi come prima, se la prima riga è lunghissima non fa nulla, arduino ha avuto tempo di riepire il buffer prima che tu faccia la prima lettura.
Ultima modifica effettuata da Carlo 02/04 13:02
in programmazione tutto è permesso
02/04 12:55
Carlo
Forse ho capito, se funziona poi ti spiego.
Prova questo codice modificato:
Prova questo codice modificato:
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick Dim str As String = str = RiceviDati() str = str.Replace(vbCrLf, "|") ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str) ListBox1.TopIndex = ListBox1.Items.Count - 1 ListBox1.HorizontalScrollbar = True Dim righe() = str.Split("|") Dim uso = 0 ' la prima riga If righe.Length = 0 Then Return If righe.Length > 1 Then uso = 1 ' la seconda riga ' Elaboro la stringa Dim valoriDivisi() As String = righe(uso).Split(";") If valoriDivisi.Length <> 2 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due") Return End If ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso)) If valoriDivisi(0) = "E" Then lblgradi.Text = "errore" ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1)) Else ' Il primo dato è riferito ai gradi della bussola valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale If Double.TryParse(valoriDivisi(0), avanzamento) Then If avanzamento <= 0 Or avanzamento >= 360 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range") Else lblgradi.Text = avanzamento.ToString("000°") Pcboxbussola.Invalidate() ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°")) End If Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0).Substring(0, 3) & " non è un intero") End If '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa Dim volume As Integer = 0 If Integer.TryParse(valoriDivisi(1), volume) Then If volume < 0 Or volume > 100 Then ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range") Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1)) media_pleyer.lb_volume.Text = valoriDivisi(1) + "%" media_pleyer.Volume_control1.value = valoriDivisi(1) lb_volume.Text = valoriDivisi(1) + "%" Volume_control1.value = valoriDivisi(1) media_pleyer.Timer3.Start() media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value video.Wmp1.settings.volume = video.Volume_control1.value End If Else ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero") End If End If End Sub
Ultima modifica effettuata da Carlo 02/04 13:04
in programmazione tutto è permesso
02/04 13:42
nightwolf
stesso scrittura di prima
ricevuto=false
elaborato=errore i valori non sono due
ricevuto=false
elaborato=errore i valori non sono due
aaa