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 - Comunicazione con Arduino
Forum - C# / VB.NET - Comunicazione con Arduino

Avatar
bernie (Normal User)
Pro


Messaggi: 135
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 6:10
Lunedì, 09/05/2022
Salve a tutti , come da titolo avrei bisogno di far comunicare arduino con una applicazione in VB.NET.
La parte in VB è solo una interfaccia operatore , dove posso scrivere e leggere dei valori che invio o ricevo da arduino , lui fa tutto il resto.
Arduino trasmette sempre i dati con intervalli di 1 secondo ma li visualizzo solo alla pressione di un pulsante ,  i dati da VB ad arduino sono tramite pulsante .
Mi ritrovo che a mio parere ad un certo punto dovrei usare la funzione Right , però mi da errore  e non ho capito perchè .
Ho provato ad usare anche Rset e Lset , ma anche in questo caso non capisco perchè il risultato non cambia .
Intanto  allego quello che ho scritto
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  3.         SerialPort1.WriteLine(TextBox2.Text)
  4.     End Sub
  5.  
  6.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  7.         SerialPort1.Close()
  8.         ComboBox1.Items.Clear()
  9.         ComboBox1.Items.AddRange(IO.Ports.SerialPort.GetPortNames())
  10.         If ComboBox1.Text <> "" Then
  11.             Try
  12.                 SerialPort1.Encoding = System.Text.Encoding.Default
  13.                 SerialPort1.PortName = ComboBox1.Text
  14.                 SerialPort1.Open()
  15.                 MsgBox("connesso")
  16.             Catch ex As Exception
  17.                 MsgBox(" non connesso")
  18.             End Try
  19.         End If
  20.     End Sub
  21.  
  22.     Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
  23.  
  24.         Dim arduino As String = SerialPort1.ReadLine()
  25.         Dim lunghezza As Short = Len(arduino)
  26.         Dim valore As String = Right(arduino, lunghezza - 2)
  27.         Dim indice As Short = Mid(arduino, 1, 2)
  28.         If indice = 10 Then
  29.             TextBox2.Text = valore
  30.         End If
  31.         If indice = 20 Then
  32.             TextBox3.Text = valore
  33.         End If
  34.         TextBox4.Text = arduino
  35.     End Sub
  36. End Class


Le prime due cifre del numero che invia arduino , servono per identificare il campo in cui scrivere i valori , le rimanenti cifre son il valore vero e proprio .
Avevo pensato di
1) leggere il valore dalla porta seriale e metterlo in una stringa
2) controllare il numero di caratteri della stringa
3) identificare i primi due caratteri e in base al valore decidere dove scrivere la variabile
4) tagliare dalla stringa le prime due cifre
5) scrivere la stringa tagliata nel campo corretto .
Io sono bloccato al punto 4 .
Se sostituisco Right con LSet o RSet , il programma gira , non da errori , però il valore che mostra non è corretto .
Supponendo che il valore inviato da arduino è 10256  10 indica in che campo devo scrivere 256, usando Lset o Rset mi mostra sempre 1025 .
Ho usato LSet e RSet  in questa maniera
Codice sorgente - presumibilmente VB.NET

  1. Dim valore As String = LSet(arduino, lunghezza - 2)
  2. Dim valore As String = RSet(arduino, lunghezza - 2)


In entrambi i casi il valore che mostra è 1025
Scusate se sono stato prolisso .
Grazie

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2160
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:24
Lunedì, 09/05/2022
In parte dipende dalla variabile usata in Arduino.
Al posto di int usa long.

Prova così e facci sapere.


PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 135
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 8:34
Lunedì, 09/05/2022
Ciao Thejuster, in Arduino uso long .
La variabile di Arduino non dovrebbe fare si che mi venga segnato un errore alla riga 26 del programma in VB, almeno credo .
Grazie

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2160
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:38
Lunedì, 09/05/2022
No infatti non dovrebbe segnarti nessun errore.

Però, leggendo bene,

Se il valore inviato da arduino è: 10256

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim valore As String = LSet(arduino, lunghezza - 2)



Non so esattamente come funziona LSet o RSet, sinceramente mai usati.
Ma preferisco avere nella testa una sorta di immaginazione che mi indica dove mi sto muovendo utilizzando
SubString, Split e varie manipolazioni delle stringhe.

A questo punto, ti consiglio tramite Debugger di controllare effettivamente la lunghezza della stringa.
Assicurandoti che non ci siano spazi vuoti o da simboli illegibili.

Anche se, personalmente ho sempre utilizzato lo split con un simbolo per queste operazioni.
esempio "10-256"  splitto "-" e gestisco i due inidici [0] cella [1] valore.

Tornando al discorso, se non ho capito male, ti servirebbe qualcosa del genere.


Codice sorgente - presumibilmente VB.NET

  1. Dim lettura As String = "10256" 'Supponiamo che arduino legge 10256
  2.  
  3.     lettura = lettura.Trim() 'Elimino eventuali spazi vuoti nella stringa
  4.  
  5.     Dim cella As String = lettura.Substring(0, 2) 'Recupero le prime due cifre  10  256
  6.  
  7.     Dim valore As String = lettura.Substring(2, lettura.Length - 2) 'recupero il valore saltando le prime due cifre





Ultima modifica effettuata da Thejuster il 09/05/2022 alle 9:50


PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 135
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 15:19
Lunedì, 09/05/2022
Grazie Thejuster, ieri sera non ero arrivato a leggere tutti gli argomenti fino a substring, o forse lo avevo male interpretato.
Questa sera provo e vi faccio sapere.
Grazie e buona giornata.
Bernie

PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 135
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 4:16
Giovedì, 12/05/2022
Grazie Thejuster, esattamente quello che mi serviva.
Adesso devo procedere con inviare i dati a Arduino, ma ho già visto qualche cosa che non gira. Devo capire se lato PC o lato Arduini.
Grazie per adesso.
Bernie

PM Quote