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

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
bernie (Normal User)
Pro


Messaggi: 149
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: 2173
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: 149
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: 2173
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: 149
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: 149
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
Avatar
bernie (Normal User)
Pro


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 16:07
Venerdì, 20/05/2022
Avrei bisogno di alzare l'asticella , Arduino mi trasmette una serie di dati ogni x secondi , come faccio a leggere i dati e scriverli in una textbox senza bisogno di premere il pulsante ?
Arduino scrive 10 numeri ogni 2 secondi , avrei bisogno di visualizzare questi numeri senza bisogno di andare a premere il pulsante .
Cosa devo guardare ?
Grazie

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6287
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:20
Sabato, 21/05/2022
Usa un timer


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 8:01
Sabato, 21/05/2022
Buongiorno nessuno
Il timer lo uso già nell'arduino per mandare i vari dati ogni  tot secondi. Se uso un timer anche lato VB non corro il rischio che i due timer non siano sincronizzati e mi perdo dei dati?
Per capirci, la parte VB sarebbe solo l'interfaccia, serve solo per mostrare quello che sta facendo Arduino.
Io avevo pensato a due possibilità:
1) lasciare sempre la parte VB in ascolto sulla seriale e quando iniziano ad arrivare i dati elaborarli e metterli nelle varie textbox. Questa non ho capito come realizzarla
2) lasciare Arduino sempre in ascolto , da VB mandare un tris sulla seriale e a quel punto Arduino mi rimanda i vari dati. Questa soluzione mi piace poco perché vorrei tenere Arduino il più libero possibile per quello che deve realmente fare.
Nel caso ci siano altre possibilità, se qualcuno me le spiega ne sarei felice.
Buona giornata.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo