Devi per primo scrivere i dati della seriale in un array, poi controllare i singoli caratteri ( carattere 1 se Spegi o accendi; carattere 3 quale LED.
Il codice per leggere dalla seriale posso dartelo stasera.
Ciao Uwe
praticamente salva, se presenti i dati della seriale per un tempo massimo di 2sec o termina prima se riceve il carattere '\n'. Il tutto è salvato in una stringa text con cui dopo faccio i controlli sui dati ricevuti.
no no la parte di programmazione sul pc (per ora non mi interressa) è prprio capire passo passo come aquisite i vari byt (in un array) e poi farci i controlli a posteriori...argomento afascinantissimo
il codice non sarà dei migliori o pulitisso, ma fa un pò di tutto.
funziona così: ogni loop() chiami la funzione, la funzione legge un dato formato in questo modo:
*nome comando:valore numerico\n
indica l'inizio del condo (non dovrebbe essercene bisogno, ma non si sa mai... quindi il comando non può contenere *. Il comando può essere lungo al massimo 9 caratteri(array input2)
: indica che il nome del comando è finito e inizia l'inserimento del valore numerico
il valore numerico può essere sia negativo che un numero con la virgola (ma NON si usa la virgola ma il punto, per esempio -34.6)
Non c'è controllo che l'input sia un vero e proprio numero, e ciò può creare valori random se si inseriscono lettere al posto dei numeri.
\n è il carattere di fine stringa, non devi scriverlo a mano, ma se usi il terminale di arduino devi dirgli di usarlo, nel menù a tendina scegli (dove c'è "no line ending") "newline"
questo codice non legge un messaggio ogni loop, ma raccoglie i pezzi di dato disponibili ogni loop e quando ha raccolto tutti i dati chiama una funzione di nome "executeCommand(input1, ris);"
dove input1 è il nome del comando, e ris è il valore numerico.
ovviamente sarà questa funzione a eseguire il tuo comando desiderato.
sono nuovissimo di arduino con un'infarinatura di Visual Basic, quindi l'ultimo ragazzo alla faccia della terra in grado di aiutarti.
ho dovuto inserire un delay perchè altrimenti i primi 2 caratteri me li riscontrava come singoli (sicuramente troppo rapido il loop rispetto al trasferimento dati), però sembra funzionare.
diciamo che è da rimettere a posto.
p.s. almeno c'ho provato
il problema nel tuo codice è che ogni loop crei una nuova stringa, quindi se i dati ci meettono troppo ad arrivare non leggerari la stringa completa(motivo dei due caratteri singoli). Potresti usare un while per aspettare finchè non ricevi tutta la stringa, però è tempo cpu perso, un problema per progetti in cui i tempi di risposta sono importanti
mi rendo conto lesto, infatti come descritto dal precedente post "c'ho provato" nonostante mi rendessi conto da solo (fatto in 5 minuti) che il codice è molto "primitivo".
sto cercando di studiare il tuo codice chea me risulta abbastanza complesso e mi genera alcuni errori.
continuo nel mio studio per hobby sperando un giorno di essere in grado di aiutarvi.
caro lesto,
per me un'errore è anche il fatto che mancano i void setup e loop perchè di arduino veramente non ne so molto.
cmq me lo sto studiando piano piano.
se ho qualche lacuna(cosa probabilissima) sarai il primo a saperlo
intanto ti ringrazio per gli aiuti che ci dai (giro spesso per i forum anche se non scrivo e ti ho visto da parecchie parti) e ti reputo una persona molto informata.