Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - creare una bussola
Forum - C# / VB.NET - creare una bussola - Pagina 20

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ] Precedente | Prossimo
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 12:40
Sabato, 06/04/2024
Appare e scompare, il livello funziona perfettamente

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1364
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:45
Sabato, 06/04/2024
Testo quotato

Postato originariamente da nightwolf:

Appare e scompare, il livello funziona perfettamente



E' normale, ogni volta che arriva un valore di volume valido il timer3 viene abilitato, guarda la riga 52 media_pleyer.Timer3.Start()

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  2.                 Dim str As String = RiceviDati()
  3.              
  4.                 str = str.Replace(vbCrLf, "|")
  5.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str)
  6.                 ListBox1.TopIndex = ListBox1.Items.Count - 1
  7.                 ListBox1.HorizontalScrollbar = True
  8.      
  9.                 Dim righe() = str.Split("|")
  10.                 Dim uso = 0 ' la prima riga
  11.                 If righe.Length = 0 Then Return
  12.                 If righe.Length > 1 Then uso = 1 ' la seconda riga
  13.              
  14.                 ' Elaboro la stringa
  15.                 Dim valoriDivisi() As String = righe(uso).Split(";")
  16.                 If valoriDivisi.Length <> 2 Then
  17.                     ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due")
  18.                     Return
  19.                 End If
  20.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso))
  21.                 If valoriDivisi(0) = "E" Then
  22.                     lblgradi.Text = "errore"
  23.                     ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi
  24.                     ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1))
  25.                 Else
  26.                     ' Il primo dato è riferito ai gradi della bussola
  27.                     valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale
  28.                     If Double.TryParse(valoriDivisi(0), avanzamento) Then
  29.                         If avanzamento <= 0 Or avanzamento >= 360 Then
  30.                             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range")
  31.                         Else
  32.                             lblgradi.Text = avanzamento.ToString("000°")
  33.                             Pcboxbussola.Invalidate()
  34.                             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°"))
  35.                         End If
  36.                     Else
  37.                         ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0).Substring(0, 3) & " non è un intero")
  38.                     End If
  39.              
  40.                     '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa
  41.              
  42.                     Dim volume As Integer = 0
  43.                     If Integer.TryParse(valoriDivisi(1), volume) Then
  44.                         If volume < 0 Or volume > 100 Then
  45.                             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range")
  46.                         Else
  47.                             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1))
  48.                             media_pleyer.lb_volume.Text = valoriDivisi(1) + "%"
  49.                             media_pleyer.Volume_control1.value = valoriDivisi(1)
  50.                             lb_volume.Text = valoriDivisi(1) + "%"
  51.                             Volume_control1.value = valoriDivisi(1)
  52.                             media_pleyer.Timer3.Start()
  53.                             media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  54.                             AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  55.                             video.Wmp1.settings.volume = video.Volume_control1.value
  56.                         End If
  57.                     Else
  58.                         ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero")
  59.                     End If
  60.                 End If
  61. End Sub



Per evitarlo devi controllare il valore del volume ed eseguire la riga: media_pleyer.Timer3.Start() solo se è diverso dall'ultimo ricevuto.

Ultima modifica effettuata da Carlo il 06/04/2024 alle 21:46


in programmazione tutto è permesso
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 22:39
Sabato, 06/04/2024
Ok, se non ho capito male dovrei, verificare che se valoriDivisi(1) = valoriDivisi(1) stai fermo, altrimenti se valoriDivisi(1) <> valoriDivisi(1) attivo il timer3
Più o meno

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1364
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:07
Sabato, 06/04/2024
Testo quotato

Postato originariamente da nightwolf:

Ok, se non ho capito male dovrei, verificare che se valoriDivisi(1) = valoriDivisi(1) stai fermo, altrimenti se valoriDivisi(1) <> valoriDivisi(1) attivo il timer3
Più o meno



si, per farlo ti serve una variabile globale volumeOld oppure una variabile statica volumeOld che non perde il valore quando  si esce dalla routine.
Inoltre il controllo è meglio farlo sul valore convertito in intero validato.
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  2.     Dim str As String = RiceviDati()
  3.     Static volumeOld As Integer ' con static il valore non si perde
  4.  
  5.     str = str.Replace(vbCrLf, "|")
  6.     ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str)
  7.     ListBox1.TopIndex = ListBox1.Items.Count - 1
  8.     ListBox1.HorizontalScrollbar = True
  9.  
  10.     Dim righe() = str.Split("|")
  11.     Dim uso = 0
  12.     If righe.Length = 0 Then Return ' forse non serve
  13.     If righe.Length > 1 Then uso = 1
  14.  
  15.     ' Elaboro la stringa
  16.     Dim valoriDivisi() As String = righe(uso).Split(";")
  17.     If valoriDivisi.Length <> 2 Then
  18.         ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due")
  19.         Return
  20.     End If
  21.     ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso))
  22.     If valoriDivisi(0) = "E" Then
  23.         lblgradi.Text = "errore"
  24.         ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi
  25.         ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1))
  26.     Else
  27.         ' Il primo dato è riferito ai gradi della bussola
  28.         valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale
  29.         If Double.TryParse(valoriDivisi(0), avanzamento) Then
  30.             If avanzamento < 0 Or avanzamento > 360 Then
  31.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range")
  32.             Else
  33.                 lblgradi.Text = avanzamento.ToString("000°")
  34.                 Pcboxbussola.Invalidate()
  35.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°"))
  36.             End If
  37.         Else
  38.             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " non è un intero")
  39.         End If
  40.  
  41.         '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa
  42.  
  43.         Dim volume As Integer = 0
  44.         If Integer.TryParse(valoriDivisi(1), volume) Then
  45.             If volume < 0 Or volume > 100 Then
  46.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range")
  47.             Else
  48.                 ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1))
  49.                 If volumeOld <> volume Then ' se il volume è cambiato
  50.                     volumeOld = volume ' memorizzo il valore
  51.                     ' aggiorno e visualizzo
  52.                     media_pleyer.lb_volume.Text = valoriDivisi(1) + "%"
  53.                     media_pleyer.Volume_control1.value = valoriDivisi(1)
  54.                     lb_volume.Text = valoriDivisi(1) + "%"
  55.                     Volume_control1.value = valoriDivisi(1)
  56.                     media_pleyer.Timer3.Start()
  57.                     media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  58.                     AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  59.                     video.Wmp1.settings.volume = video.Volume_control1.value
  60.                 End If
  61.             End If
  62.         Else
  63.             ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero")
  64.         End If
  65.     End If
  66. End Sub


Ultima modifica effettuata da Carlo il 07/04/2024 alle 11:23


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ] Precedente | Prossimo