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 9

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: 153
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 11:29
Martedì, 26/03/2024
Allora, partiamo con ordine,
- sia arduino e vb hanno il ;
- B; ha come valore che va da 0 a 360 gradi con i decimali.
-P; ha come valore che va da 0 a 100 x il livello del volume numeri interi senza decimali.
Per il resto non so neanche che sia tryparse, mai visto e mai usato. Posso cercare di modificare il codice di arduino per inviare B; con numeri interi ma non so quanto possa servire se nel codice di vb si è messo la sostituzione del punto con la , decimale.

PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 153
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 15:36
Martedì, 26/03/2024
Ho letto che il metodo tryparse vb converte in stringa i numeri decimali arrotondandoli, e se incontra delle lettere e vb non riesce a convertirle anziché dare errore da come valore 0. Giusto? :-|

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2339
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:11
Martedì, 26/03/2024
Ti avevo proposto circa 10 post fa come risolvere.

1° Invia tutto in una sola riga.
2° Non usare sinonimi o altro per indicare i valori. Tanto le posizioni le conosci.
3° Splitta la stringa ed esamina l'array

Arduino invierà

355.20;36


L'applicazione riceve

335.20;36

Splitta ' ; '


Array(0)  Elemento 0 contiene i dati della bussula
Array(1) Contiene i dati del potenziometro.

Stop.

Non usare ne P ne B e altrie cose inutili che oltre ad appesantire la stringa non servono a niente.

una volta splittato il contenuto sai che al 0 c'è la bussola all'1 il potenziometro. fine.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1431
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:25
Martedì, 26/03/2024
Testo quotato

Postato originariamente da Thejuster:

Ti avevo proposto circa 10 post fa come risolvere.

1° Invia tutto in una sola riga.
2° Non usare sinonimi o altro per indicare i valori. Tanto le posizioni le conosci.
3° Splitta la stringa ed esamina l'array

Arduino invierà

355.20;36



Gli ho corretto anche il codice in C per arduino per fare quello che dici tu, l'ho postato alle 9:57 di Sabato 23/03/2024.


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


Messaggi: 153
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 16:46
Martedì, 26/03/2024
Ok, mi andrò a riguardare i post precedenti e modifichero il codice di arduino, per l invio di un unica stringa che conterrà la bussola;potenziometro

PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1431
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:20
Martedì, 26/03/2024
Testo quotato

Postato originariamente da nightwolf:

Allora, partiamo con ordine,
- sia arduino e vb hanno il ;
- B; ha come valore che va da 0 a 360 gradi con i decimali.
-P; ha come valore che va da 0 a 100 x il livello del volume numeri interi senza decimali.
Per il resto non so neanche che sia tryparse, mai visto e mai usato. Posso cercare di modificare il codice di arduino per inviare B; con numeri interi ma non so quanto possa servire se nel codice di vb si è messo la sostituzione del punto con la , decimale.



Ok non lo sai fare.
Ecco il codice da mettere nel timer (leggi i rem):
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
  2.     Dim str As String
  3.     str = RiceviDati()
  4.     TextBox1.Text += str ' tuo monitor
  5.  
  6.     Dim valoriDivisi() As String ' matrice senza dimensione
  7.     valoriDivisi = str.Split(";") ' puntovirgola separa le stringhe: in valoriDivisi(0) ci va il codice identificativo (B = gradi bussola, P = potenziometro, N = null, E = errore) e in valoriDivisi(1) ci va il valore relativo
  8.     If valoriDivisi.Length <> 2 Then Exit Sub ' se str non è stato diviso in due stringhe si esce
  9.     If valoriDivisi(0) = "B" Then
  10.         ' Il dato è riferito ai gradi della bussola
  11.         ' se la conversione è possibile avanzamento prende il valore dei primi tre caratteri della stringa
  12.         If Integer.TryParse(valoriDivisi(1).Substring(0, 3), avanzamento) Then
  13.             lblgradi.Text = avanzamento.ToString("000°")
  14.             Pcboxbussola.Invalidate() ' scatena il paint
  15.         End If
  16.     End If
  17.  
  18.     If valoriDivisi(0) = "P" Then
  19.         ' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa
  20.         Dim controllo As Integer
  21.         ' se la conversione è possibile, controllo prende il valore della stringa in valoriDivisi(1)
  22.         If Integer.TryParse(valoriDivisi(1), controllo) Then
  23.             If controllo >= 0 And controllo <= 100 Then ' se il valore è nel range 0-100 si imposta il volume
  24.                 media_pleyer.lb_volume.Text = valoriDivisi(1) + "%"
  25.                 media_pleyer.Volume_control1.value = valoriDivisi(1)
  26.                 lb_volume.Text = valoriDivisi(1) + "%"
  27.                 Volume_control1.value = valoriDivisi(1)
  28.                 media_pleyer.Timer3.Start()
  29.                 media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  30.                 AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
  31.                 video.Wmp1.settings.voume = video.Volume_control1.value
  32.             End If
  33.         End If
  34.     End If
  35.  
  36.     ' possibili usi degli errori ritornati se ometti li ignori
  37.     If valoriDivisi(0) = "N" Then
  38.         ' Il dato è riferito a nessun valore ricevuto
  39.         lblgradi.Text = valoriDivisi(1) ' l'info su lblgradi, oppure dove vuoi
  40.     End If
  41.  
  42.     If valoriDivisi(0) = "E" Then
  43.         ' Il dato è riferito a errore sulla seriale
  44.         lblgradi.Text = valoriDivisi(1) ' il tipo d'errore su lblgradi, oppure dove vuoi
  45.     End If
  46.  
  47.     Label1.Text = "NORD"
  48. End Sub



Questo deve migliorare la situazione, non dovresti più avere errori.

Per il discorso codice arduino te l'ho modificato per provarlo l'ho postato alle 9:57 di Sabato 23/03/2024.
Prima provalo e controlla i valori che vedi in textBox1, fammi sapere.

Ultima modifica effettuata da Carlo il 26/03/2024 alle 18:26


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


Messaggi: 153
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 18:10
Martedì, 26/03/2024
Ok, grazie. Proverò certamente e vi farò sapere.

PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1431
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:28
Martedì, 26/03/2024
Testo quotato

Postato originariamente da nightwolf:

Ok, grazie. Proverò certamente e vi farò sapere.  



ATTENZIONE.

Ho fatto un errore alla riga 23... senza provare....
l'ho corretta così.
Codice sorgente - presumibilmente C# / VB.NET

  1. If controllo >= 0 And controllo <= 100 Then ' se il valore è nel range 0-100 si imposta il volume


Ultima modifica effettuata da Carlo il 26/03/2024 alle 18:30


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