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 ?
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.
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)
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 ???
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!
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 .... :~