Go Down

Topic: Consiglio su comunicazione seriale...... (Read 989 times) previous topic - next topic

Stefanoxjx

Ciao a tutti, ho bisogno di un consiglio..........
Dovrei comunicare ad arduino tramite un software sul pc una serie di numeri che possono andare da -32767 a 32767 oppure se decido di elaborarli direttamente dal software e non farlo fare ad arduino i valori potrebbero essere da 500 a 1500.
Il tutto andrebbe fatto via seriale ma onestamente mi trovo un po' spiazzato perchè finora ho sempre passato stringhe e mai numeri.
Ho anche pensato che potrei passare i numeri in forma di stringa e poi convertirli, ma mi chiedevo se c'è un metodo più pratico e corretto per farlo.
Grazie.
Ciao.
www.multiwii.it
www.sdmodel.it

leo72


Ciao a tutti, ho bisogno di un consiglio..........
Dovrei comunicare ad arduino tramite un software sul pc una serie di numeri che possono andare da -32767 a 32767 oppure se decido di elaborarli direttamente dal software e non farlo fare ad arduino i valori potrebbero essere da 500 a 1500.
Il tutto andrebbe fatto via seriale ma onestamente mi trovo un po' spiazzato perchè finora ho sempre passato stringhe e mai numeri.
Ho anche pensato che potrei passare i numeri in forma di stringa e poi convertirli, ma mi chiedevo se c'è un metodo più pratico e corretto per farlo.
Grazie.
Ciao.


Si è discusso di recente su come dividere i numeri per salvarli in EEPROM. Il concetto è identico per spedirli su seriale dato che su questa linea i dati viaggiano per singoli byte.
http://arduino.cc/forum/index.php/topic,122345.0.html

Ovviamente per distingure tra un dato da manipolare ed uno manipolato non devi far altro che spedire un terzo byte che interpreterai come "elabora i dati" oppure "dati già elaborati".

Stefanoxjx

Grazie Leo, effettivamente avevo già pensato di fare così, come ho fatto anche su un altro schetch proprio per scrivere dati in eeprom, ma volevo solo capire se c'era qualcosa di migliore e meno laborioso.
www.multiwii.it
www.sdmodel.it

leo72

La discussione che ti ho linkato parte dalla gestione di un int ed arriva a quella di un long.
Ma a te serve il primo caso. Un numero compreso fra -32768 e +32767 ricade perfettamente nell'intervallo del tipo di dati "int" per cui hai una variabile che occupa 2 byte. Quindi fai tutto con le funzioni predefinite lowByte e highByte, e sei a posto. Niente di più semplice.

Stefanoxjx

Perfetto, fatto tutto grazie.
Volevo chiede però se sono io che ho problemi con la comunicazione seriale oppure se è normale che arduino si perda parecchia roba per strada.
Sto sviluppando un progetto dove il PC passa parecchi dati ad arduino e in maniera continuativa, quindi c'è parechio traffico via seriale.
Dopo un giorno e mezzo di prove perchè la comunicazione seriale non andava a dovere sono arrivato al punto di abbassare la velocità di comunicazione
da 115200 a 9600 e ancora ho dovuto scrivere una mia sottospecie di protocollo per evitare che vengano persi dati per strada.
La mia sottospecie di protocollo non fa altre che inviare 1 byte da arduino al pc che indica che arduino è pronto a ricevere; a quel punto il pc ricevuto
l'ok invia 1 byte ad arduino che lo legge ed invia nuovamente un "ready" e così via.
La soluzione funziona molto bene, solo che se alzo la velocità oltre i 9600 si inchiappetta tutto un'altra volta e non riesco a capire se sono problemi
miei oppure se sono dei limiti di arduino.
Per la comunicazione seriale ho usato software serial sui Pin 10/11 (ma è la stessa cosa anche su altri pin) e ovviamente l'interfaccia FTDI.
L'idea che mi sono fatto è che arduino sia troppo lento per poter ricevere una grossa mole di dati ad alta velocità, però 9600 mi sembra veramente poco :(
Qualche consiglio?
Grazie.
Ciao.
www.multiwii.it
www.sdmodel.it

Go Up