Go Down

Topic: Acquisizione più variabili da ARDUINO a VB 2010 (Read 1 time) previous topic - next topic

daddi

Ciao a tutti vorrei postarvi un problemino che non riesco a risolvere, innanzitutto ho due sensori di temperatura collegati ad Arduino al quale ho dato due indirizzi di variabile per  farle rappresentare su VB2010, in pratica ho la Sonda uno sulla Variabile X e la sonda due sulla Variabile Y dato ciò io volevo farle rappresentare su VB 2010 in due distinte textbox tramite una comunicazione Serial Port, ho provato ad usare il metodo di SerialPort1.ReadLine ma il problema è che cosi su una sola textbox e mi compaiono tutti e due i dati ad intervalli di 1 secondo come impostati sul Serial printlin di ARDUINO, per ciò io vi chiedo se fosse possibile come posso dare alla TextBox1 la Variabile X e ala TextBox2 la variabile Y?

Grazie mille per L'attenzione a presto

nagy

Ciao daddi,
da un pò di giorni anch'io sto smanettando con arduino e VB2008 (penso sia lo stesso per il 2010). In pratica il mio progetto consiste in due valori analogici che sono fotoresistenza e potenziometro che acquisisco in arduino ed entrambi i valori li voglio rappresentare in VB.
Per fare questo lato arduino ho scritto:

Code: [Select]

// stampo valore potenziometro
if(pwm<(pwm_prev-2) || pwm>(pwm_prev+2))
{
   Serial.print("__p1_")
   Serial.println(pwm);
}
// stampo valore fotoresistenza
if(fres<(fres_prev-2) || fres>(fres_prev+2))
{
   Serial.print("__f1_")
   Serial.println(fres);
}       


Negli IF ho scritto quelle condizioni per evitare di stampare in maniera 'troppo' continua i valori analogici che ricevo altrimenti sarebbe bastato pwm!=pwm_prev. Se ad esempio i valori del potenziometro e della fotoresistenza sono pwm=300 e fres=400, sulla seriale avrò

__p1_300
__f1_400

Fatto questo in VB leggo la seriale come fai tu cioè con SerialPort1.ReadLine, questa variabile la splitto utilizzando come separatore "_" ottenendo un array di cui gli elementi di indice 2 e 3 sono p1 o f1 e il relativo valore. In questo modo dico

IF array[2]=="p1" THEN
    textbox1.text = array[3]
ELSE IF array[2]=="f1" THEN
   textbox2.text = array[3]
ENDIF

Questo è quello che faccio in linea di massima  :)

daddi

Ciao nagy innanzitutto grazie di tutto per la tua disponibilità ma potresti esser più chiaro io ho eseguito tutto ciò che hai scritto ma mi da dei problemi al quale mi da errore sulle array?? cosa sono come funzionano?

nagy

Un array diciamo che è una specie di 'contenitore', se ad esempio scrivo

int pippo[100];

sto dichiarando 100 variabili di tipo intero. Cioè invece di scrivere

int pippo1;
int pippo2;
int pippo3;
...
...
int pippo100;

utilizzo la notazione di sopra. Ho preparato un piccolo esempio estrapolato dal mio progettino che ti allego qui, ho un pò modificato il codice che ti ho scritto prima perchè mi sembra che funzioni meglio :) Nello sketch arduino devi cambiare gli ingressi analogici che utilizzi tu mentre in VB (come detto prima io utilizzo il 2008 quindi non so se ci sono problemi di compatibilità con il 2010) devi impostare il numero della tua porta seriale. In ogni caso se non sai cosa sono gli array ti consiglio di studiarteli altrimenti troverai difficoltà man mano che vai avanti.
Ciao

daddi

ciao scusa se ti rispondo solo ora cmq ho afferrato il concetto lo elaborato e mi interessa, pero io vorrei visualizzare dei valori da me gia elaborati con arduino come temperatura e luce sensore solo che come è fatto il software mi rileva solo gli ingressi e non una variabile di tipo temperatura da me creata.... come risolvo questa cosa???

Grazie a presto buona serata

tuxduino

In linea di principio è sufficiente stabilire un protocollo di comunicazione arduino => vb (e viceversa, se si vuole anche comandare l'arduino dal vb).
Gli elementi principali sono:
- come identifico le diverse variabili da trasmettere
- come trasmetto i valori
- come identifico la fine di una trasmissione

Supponiamo di avere due letture analogiche che vogliamo trasmettere al PC.

Una prima idea potrebbe essere usare una lettera per ogni sensore. A e B, ad esempio.
I valori li trasmetto sottoforma di stringa.
Il terminatore di trasmissione è la coppia CR+LF (vedi http://arduino.cc/en/Serial/Println ).

Lato VB accumulo in un buffer (una stringa) i dati seriali fino a quando non rilevo la coppia CR+LF. A quel punto prendo il primo carattere per capire di che sensore stiamo parlando, e converto in numero il resto della stringa. A questo punto posso fare ciò che voglio: visualizzarlo in un textbox, graficarlo, ecc.
Dopo averlo elaborato, resetto il buffer (cioè "svuoto" la stringa, ad esempio asegnandole "") per essere pronto per un nuovo ciclo di ricezione.


In questo esempio Arduino manda i valori dei sensori separatamente. Si può facilmente immaginare una convenzione diversa per inviare in un'unica println() il valore di più sensori. Cambia soltanto la complessità del codice di "parsing" lato VB.

Go Up