Tx e Rx dati via seriale

Buongiorno a tutti.
La mia esigenza sarebbe quella di effettuare delle trasmissioni dati bidirezionali PC <=> Arduino tramite seriale.
Ho letto le references per quanto riguarda la comunicazione seriale, ma avrei da chiedere qualcosa di più specifico.
Sto programmando un software in Visual Basic 2010 Express in grado di interloquire con il mio Arduino Uno: in pratica l’interfaccia PC dovrebbe inviare dei comandi all’Arduino, e quest’ultimo restituire dei valori in funzione del comando trasmesso dal pc, sempre via seriale.
Intervenendo ad esempio su un singolo sensore collegato all’arduino, previo invio di un comando di start via seriale dall’interfaccia PC, non credo sia molto complesso riuscire ad ottenere il relativo valore dato dal sensore.
Invece, cosa che più mi incuriosisce al fine di adempiere al mio progetto, è sapere se è possibile intervenire su più sensori contemporaneamente ed ottenere contemporaneamente più dati la cui provenienza possa essere ricondotta ai sensori.
Facendo un esempio teorico relativamente al flusso del programma, dovrei, in ordine:

-Lanciare uno o più comandi via seriale da PC all’Arduino
-Leggere i comandi ricevendoli via seriale sulla board in ascolto
-A seconda dei comandi ricevuti, eseguire la lettura dei valori ottenuti dal sensore o dai sensori
-Restituire al PC, sempre via seriale, tali valori avendo la possibilità di distinguere quale valore proviene da quale sensore.

Si può fare?

Spero di essermi espresso in maniera abbastanza chiara.

Grazie mille in anticipo.

Certo che si può fare, il tuo programma non dovrà far altro che aprire una linea seriale e poi interloquire con l'Arduino con un semplice protocollo che implementerai. Ho scritto un articolo su come far eseguire all'Arduino alcuni compiti in base a dei comandi impartiti sulla seriale.

Buongiorno Leonardo, non sapevo che quel sito fosse il tuo, ho letto l'articolo stamattina e l'ho trovato parecchio esaustivo. In realtà fin qui tutto bene, un comando alla volta, una valore di ritorno alla volta.

Ma per più comandi e più risposte contemporaneamente?

Esempio:

1-Invio via seriale due comandi insieme: temp1, temp2 2-Controllo lato arduino i valori dei sensori relativamente ai comandi ricevuti 3-Restituisco via seriale il valore di temp1, il valore di temp2

Grazie.

Più comandi contemporaneamente? Se vuoi spedire più comandi li devi mandare in un unico pacchetto e poi analizzare lato arduino. Io però non andrei a incasinare troppo il parser lato arduino dei comandi che spedisci. Semplicemente ne manderei uno alla volta ed aspetterei i relativi dati indietro prima di mandare il successivo. Immagina di voler eseguire più di un comando, il parser dovrebbe avere un buffer in cui memorizzarli ed il codice scritto per poterli eseguire in sequenza, finché il buffer non è stato svuotato. E ricorda anche che la CPU del micro è capace di eseguire solo una sequenza di istruzioni per volta (1 pipeline) quindi è inutile spedire 2 comandi insieme quando l'Arduino ne può eseguire solo 1. Ad esempio, spedire la lettura del pin digitale 9 e del pin analogico 3. L'Arduino prima farà la lettura di un pin e poi quella dell'altro. Quindi ci saranno sempre 2 invii di dati. A meno che tu non faccia un programma che poi riunisce i dati da spedire in un unico pacchetto, ma mi pare inutilmente complicato.

Grazie mille per il tuo supporto. Ho solo un ultimo dubbio. Ad esempio, mettendo che la mia interfaccia in visual basic mi permetta di comandare la lettura di due temperature diverse da due sensori, campionando tale lettura ogni 100 ms attraverso due pulsanti di start, non c'è possibilità che i valori possano equivocarsi? Se per esempio dovessi attivare il ciclo di lettura di un primo sensore ogni 100ms premendo un pulsante di start, per poi attivare un secondo ciclo di lettura di un secondo sensore casualmente con la stessa cadenza di lettura, non c'è possibilità che uno dei due valori non venga letto o uno dei due scambiato per l'altro?

Se c'è bisogno di aprire un nuovo topic per tale domanda lo farò.

Grazie.

Salve,

qualcuno che abbia qualche delucidazione in merito?

Grazie mille.

In caso di trasmissione al computer, devi ovviamente spedire anche l’indicazione del pin a cui si riferisce la lettura, e non solo la lettura in sé.
Cioè spedirai ad esempio:
byte per numero pin
int per lettura analogica

Perché se spedisci solo la lettura e leggi 2 pin, potresti incasinarti e non sapere se il dato in arrivo corrisponde al primo o al secondo pin analogico.