seriale, se n'è parlato ma ancora necessito

ciao a tutti, scusate se ancora chedo sulla comunicazione seriale su arduino nonostante numerosi utenti prima di me l’abbiano fatto ma i miei problemi sono complicati ;D

vi spiego il mio problema:
ho un codice già fatto ma devo implementae una comunicazione col pc, connetto in seriale tremite xbee una decina di arduino con configurazione per cui uno è connesso al pc. quello che accade è questo:
il pc deve inviare una serie di stringhe inviando prima un numero e poi una stringa.
ma questo non è un problema il programma che deve fare arduino è questo:
leggere ogni stringa e verificarla con un numero in una variabile, se è corretto la stringa dopo deve metterla in una variabile, altrimenti la scarta e aspetta finchè la stringa in arrivo non sarà uguale al numero.

mi servirebbe anche un altra cosa:
quando arriva (dopo questa serie) un’altra strigna col suo numero deve esserci un interrupt per inviare un altra stringa. in pratica un interrupt su seriale, è possibile? altrimenti c’è un altro modo per farlo con gli xbee base?

grazie a tutti in anticipo :slight_smile:

ciao, allora la seriale che usa l'arduino per parlare col pc e con l'xbee sono le stesse (digitalpin 0 e 1), quindi i messaggi cozzano insieme. ti consiglio di usare una libreria tipo softserial che ti trasforma 2 pin a scelta in un'altra seriale, che puoi usare per comunicare col pc o con l'xbee.

per quanto riguarda gli interrupt, si può fare ma devi lavorare a livello di registri. Puoi dare un'occhiata qui: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288131711

ah occhio che ogni byte letto/scritto (dipende da quale pin stai "ascoltando") lancia un interrupt, sta a te gestire il codice!

nono aspetta, io collego l'xbee già configurato con tx al pin rx di arduino e rx al pin tx di arduino, pensavo poi di fare una seconda pista (il circuito lo faccio io) a il pin 2 o 3 (che ho capito che gestiscono gli interrupt senza agire sui registri) usando attachiterrupt e al cambio di stato lanciasse una funzione a parte, ma poi non ho capito se al nuovo cambiare di stato la funzione si interrompe o continua ad ogni modo... questo mi manca di sapere..

ciao lol21

ciao superlol Prima spiegazione Interrupt: La funzione di interrupt viene chiamata ogni volta che si verifica la condizione di interrupt finche é attivato l' interupt con attachInterrupt(). Se si é verificato un evento che ha triggherato l'interrupt arduino salta alla funzione che hai definito nel attachInterrupt(). Li puoi disattivare l' interrupt con detachInterrupt() e eseguire il programma che vuoi. Al termine riattivi l' interupt. Questo ha il vantaggio che la funzione chiamata dal interrupt non verrá interotta ma che delle chiamate interrupt possono andare perse. Se non blocci l'interrupt é possibilie che un secondo interrupt avviene durante l'esecuzione della funzione interrupt e ti fa casino. È importente che la funzione chiamata dal interrupt sia piú corta possibile.

Ritornando al Tuo problema: Non ho capito cosa devi fare.

I dati sulla seriale arrivano sempre uno dopo l' altro. Vengono tenuti nel buffer finche o é pieno il buffer o vengono prelevati. Per quello non vedo la necessitá di usare un interrupt. Spiegati meglio per favore facendo un esempio.

Ciao Uwe

allora ho un codice molto particolare per cui devo eseguire un while nel loop, il fatto è che ho 2 menù interattivi mediante un joystick (tra poco pulsanti capacitativi :D) il problema di quello che devo fare è che nel menù vado a modificare in totale 12 valori contenuti in un array che devo inviare tramite wireless. ora però c'è il problema: non è uno il terminale ma bensì tra 5 e 13 e ognuno per sapere quando trasmettere riceve un numero dal computer (collegato a xbee) che va a confrontare con una variabile del terminale e se corrisponde invia i dati..

lo so è un casino ;D ecco lo chema logico: PC---dato su DIO0 xbee-->arduino pin3 (attiva l'interrupt) PC---1-->arduino se arduino è l'1 arduino---dati-->pc se no non lo è nulla PC---2-->arduino se arduino è il 2 arduino---dati-->pc se no non lo è nulla

e così avanti.. nel frattempo ovviamente la funzione dell'interrupt inizierà con un detachinterrupt() in modo da non avere disturbi (anche se non dovrebbero esserci comunque)

spero di essere stato più chiaro.