Go Down

Topic: problema acquisizione dati (Read 1 time) previous topic - next topic

miky93

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 uno>
<valore sensore uno>
<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

leo72

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.

lucadentella

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 - http://msdn.microsoft.com/en-us/library/system.string.split(v=vs.71).aspx 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
lucadentella.it

miky93

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 ???

lucadentella

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"
lucadentella.it

lesto

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!)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

miky93

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!

lucadentella

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?
lucadentella.it

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

miky93

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 ...

miky93

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

Go Up