problema acquisizione dati

Salve a tutti , sto lavorando a un progetto di acquisizione dati da un motore termico .
Utilizzando una arduino uno controllo i dati da 2 sensori lm35 , da una sonda DS18B10 ,e da un circuito che converte la frequenza in voltaggio per controllare il numero dei giri .
Sempre via arduino comando dei transistor per il controllo del motorino di avviamento e di una ventola posta sopra il radiatore del motore .

Ho realizzato una semplice form in visual basic 2008 per la parte visuale del programma , e qui sorgono i problemi .
Per la parte di comunicazione dati da pc verso arduino 0 problemi , i comandi vengono recepiti tranquillamente .
IL problema sorge nel momento in cui devo inserire i dati provenienti dai sensori in apposite text_box.
Per risolvere il problema della comunicazione seriale avevo pensato , prima di inviare il dato con arduino proveniente dal sensore , di inviare una stringa che indicava il sensore da cui sarebbe arrivato il dato , per farmi capire meglio :
"

<dato sensore 2>
<valore sensore 2>"
e , con una serie di controlli , in base alla stringa di "segnalazione" decidere in quale text_box immettere il dato ...
il problema è che sono alle prime armi in visual basic e non riesco propio a far apparire i dati nella text_box

qualcuno ha gia avuto esperienze a riguardo e riesce a darmi delucidazioni ?

gazie in anticipo per la pazienza ! XD

Non ti aiuto lato VB perché non ho Windows. Ricordati comunque che l'Arduino spedisce byte, quindi se spedisci una stringa questa ti arriva scomposta nei singoli byte rappresentanti i codici ASCII dei caratteri. Quindi "AB" arriva come 65, 66.
Non credo ti sarà poi difficile fare una concatenazione col testo di una TextBox dei dati via via che ti arrivano.

Ciao

io uso c# ma credo che i concetti siano simili:

  • per prima cosa salva la stringa che ricevi da arduino in una apposita variabile
  • se lato arduino invii qualcosa tipo sensore1;1,2 (ad indicare che il valore 1,2 proviene dal sensore1) dovrai dividere la stringa utilizzando lo stesso separatore (nel mio esempio il punto e virgola) usato per concatenare lato arduino. con il metodo Split - String.Split Method (System) | Microsoft Learn puoi ottenere un array di due elementi (nel nostro caso sensore1 e 1,2)
  • usando il setter .Text puoi visualizzare il valore nella textbox corretta:
    http://www.startvbdotnet.com/controls/textbox.aspx

ok , per l'invio dei dati avevo pensato esattamente a una cosa del genere ...
grazie 1000 per i link , mi saranno molto utili , anche se non ho capito come usare questo setter.text ... c'è qualcuno che è in grado di spiegarmi ???

forse ho capito male la domanda... ma per impostare il testo di una textBox (che si chiami ad es. myTextBox) basta fare myTextBox.Text = "Ciao"

uhmm se fa già il setText magari deve chiamare un repaint della pagina/elemento (oddio il VB non lo uso più da anni, era il VB6.0!)

esatto... al momento sto lavorando a una form con una singola text-box per non complicarmi la vita ... il primo dato che viene inviato riesco a vederlo ma poi stop , servirebbe qualcosa per "ricaricare" la text-box ma non sò da che parte iniziare!

ciao

spiega meglio: se fai nuovamente un .Text = secondoValore comunque la textBox ti visualizza ancora il primo?
Come ricevi i valori? In un thread separato?

in effetti è strano, un problema di repaint non dovrebbe mostrare nessun valore, a meno che non sia impostato PRIMA che venga disegnata la finestra. In oltre un modo semplice (ma non sempre funziona) per forzare il repaint è spostare la finestra

ragazzi qualcosa si muove .... ho inserito un timer che ogni secondo va a pulire l'interno della text box e inserisce il nuovo dato :

Public Class Form1
Dim dato As String

Function ReceiveSerialData() As String

Dim dato As String = ""

Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM9")
dato = com1.ReadLine()
End Using

Return dato
End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Timer1.Start()

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox1.Clear()
TextBox1.Text = TextBox1.Text & Val(ReceiveSerialData())

End Sub
End Class

codice moooolto migliorabile direi .... ad esempio manca ancora il bottone per stoppare il timer ...

ragazzi altro problema .... datemi una idea su come utilizzare un button per inviare comandi , visto che il timer sembra non mi permetti di utilizzarlo .... :~