Arduino UNO vs Leonardo

Invce con la UNO che giro bisognerebbe fare?

con la UNO dovresti inviare i dati in pura seriale e avere un programma che nel pc intrerpreta questi segnali ed esegue la funzione associata.
in pratica dovresti scrivere una sorta di driver per il tuo joystick

Mh la cosa mi tenta :smiley:
Ma in pura seriale cosa significa? Non tramite il cavetto USB?

Daedalus1632:
Mh la cosa mi tenta :smiley:
Ma in pura seriale cosa significa? Non tramite il cavetto USB?

La porta USB è vista come una seriale, COM o dev/tty a seconda del tuo SO.
"Leggere la seriale" significa che devi aprire la porta seriale del computer () e leggere i dati che arrivano. Se lo puoi fare con l'XNA bene, altrimenti ti serve un altro programma di interfaccia.
Oppure puoi farlo tramite porta PS/2 (se il tuo computer ne è dotato) "simulando" con un apposito software per l'Arduino (cerca in rete) una tastiera AT: in questo caso dal software basta leggere i dati come se fossero pressioni di tasti.

Mh allora a questo punto per cominciare penso mi prenderò la Leonardo, però mi spaventa il problema di incompatibilità che può avere dovuto ai pin diversi...
C'è un modo semplice per sapere quaoli shield non sono compatibili?

Grazie mille per l'aiuto ragazzi! =)

Daedalus1632:
Mh allora a questo punto per cominciare penso mi prenderò la Leonardo, però mi spaventa il problema di incompatibilità che può avere dovuto ai pin diversi...
C'è un modo semplice per sapere quaoli shield non sono compatibili?

Grazie mille per l'aiuto ragazzi! =)

Il produttore dovrebbe specificare per quali Arduino i suoi shield sono compatibili.

Ma gli shield "ufficiali" diciamo, sono compatibili tutti? O non è detto? Per esempio a me in futuro interesserebbe utilizzare almeno shield wifi e data logger, ma leggendo la documentazione, per quanto ne sappia meno di 0, mi par di capire che non sono compatibili con la Leonardo, perchè leggo che utilizzano i pin 11, 12 e 13...

Mi sa che allora andrò di UNO.

Grazie a tutti per i chiarimenti! =)

Lo WifiShield ufficiale è compatibile con la Leonardo perché comunica con il connettore ICSP aggiuntivo.
Il Data Logger non è uno shield ufficiale, è di Adafruit, ma il costruttore dichiara espressamente che è compatibile con la 2009, la UNO, la Leonardo ecc...

Works with Arduino UNO, Duemilanove, Diecimila, Leonardo or ADK/Mega R3 or higher. ADK/Mega R2 or lower are not supported.

EDIT:
ah, già. Come ho evidenziato in grassetto, la compatibilità è spesso riferita alla versione R3 delle schede. Devi controllare anche con che versione viene data la compatibilità.

Il chip FT232R (che fa da "traduttore" tra USB e UART dell'ATMega328) offre due modalità di utilizzo: diretto (per mezzo del driver fornito da FTDI) oppure come Virtual Comm Port (VCP).

Con l'Arduino Uno puoi comunicare sfruttando la VCP: in questo modo dal programma .net, per mezzo del controllo SerialPort, è possibile, dicendo al controllo a quale porta COMM corrisponde l'Arduino, inviare e ricevere dati. E' molto semplice implementare un protocollo, per il fatto che decidi tu come Arduino deve comunicare col programma e viceversa. Ad esempio potresti decidere di inviare comandi di lunghezza predefinita oppure di utilizzare un carattere che indica la fine di un comando. In C# .net si può leggere byte per byte man mano che il controllo riceve dati, oppure con il comando ReadLine attendere il carattere '\n' per leggere il buffer dalla porta seriale.

Avevo fatto delle prove l'anno scorso per comandare uno stepper motor inviando dei comandi via seriale da un programma che ho scritto in C# e non era particolarmente complicato.

leo72:
Lo WifiShield ufficiale è compatibile con la Leonardo perché comunica con il connettore ICSP aggiuntivo.
Il Data Logger non è uno shield ufficiale, è di Adafruit, ma il costruttore dichiara espressamente che è compatibile con la 2009, la UNO, la Leonardo ecc...

Works with Arduino UNO, Duemilanove, Diecimila, Leonardo or ADK/Mega R3 or higher. ADK/Mega R2 or lower are not supported.

EDIT:
ah, già. Come ho evidenziato in grassetto, la compatibilità è spesso riferita alla versione R3 delle schede. Devi controllare anche con che versione viene data la compatibilità.

Non avevo letto quella parte :blush: grazie :smiley:

Allora torno col dubbio >.<
Sono lungo nel prendere decisioni, consigliatemi! =)

Mi ispira anche il fatto di scrivermi il protocollo in C#, ma non vorrei partire con cose troppo complicate, non sapendo assolutamente nulla di porte seriali, COM, driver and stuff like that :astonished:

Voi che dite? Che mi prendo?

Per gli shield menzionati la Leonardo va bene. Per ciò che devi farci la Leonardo forse è più facile da gestire lato PC.

allora vediamo un attimo, ho sentito parlare di xna, lo avrei gratis ma mai scaricato ne utilizzato (e come potrei su linux? :wink: )

comunque tu hai un gioco e vuoi comandarlo con arduino.
ciò che vuoi fare è fattibile ma in modo diverso in base alla scheda, ti elenco il modo:

  • Arduino UNO (o 2009)
    l'arduino lo programmi in modo che abbia un output su seriale sulla base di input hardware che riceve (es. pressione dal tasto "A" sulla seriale printa "A")
    lato "gioco" dovrai mettere un interrupt (non ricordo come si chiamano in programmazione microsoft, mi pare event) sulla porta seriale che quando riceve un carattere lo analizza e sulla base di ciò che legge fa ciò che deve.
    pro: sistema semplice e più economico, programmazione di semplice livello sia lato arduino che C# (.net nell'import degli IO comprende le porte seriali direttamente)
    contro: rischi di rallentare il codice, infatti ad ogni pressione vai a leggere la seriale, rischi di bloccare il programma. inoltre necessiti di un hardware appositamente programmato

  • Leonardo
    programmi la leonardo come periferica HID, quindi verrà vista come generico controller di gioco
    lato XNA dovrai creare un istanza per un joystick generico immagino
    pro: previa mappatura puoi usare qualsiasi controller tu voglia che non deve per forza essere arduino, sistema più stabile (XNA se non sbaglio contiene librerie fatte bene per i joystick).
    contro: programmazione più complicata soprattutto lato arduino

Si beh non voglio usarlo solo come joystick, sicuramente non sarà tra le prime cose che farò.. Ho intenzione infatti di creare il cubo LED (troppo figo XD) e di utilizzare dei sensori di luminosità/gas/rumore, e con i dati raccolti tracciare un grafico temporale (magari della variazione del mio russare durante la notte XD)
quindi vorrei fare una scelta sulla base anche di queste necessità

Daedalus1632:
Si beh non voglio usarlo solo come joystick, sicuramente non sarà tra le prime cose che farò.. Ho intenzione infatti di creare il cubo LED (troppo figo XD) e di utilizzare dei sensori di luminosità, gas/ rumore, e con i dati raccolti tracciare un grafico temporale (magari della variazione del mio russare durante la notte XD)
quindi vorrei fare una scelta sulla base anche di queste necessità

in tal caso non importa la scheda perchè comunichi comunque via seriale (a meno che tu non voglia fare l'impossibile e creare un tuo device HID usb col suo driver per comunicare ma è da spararsi :wink: ) e ti serve il software lato pc per la "decodifica" dei messaggi :wink:

Quindi a questo punto cosa mi consigliereste di prendere?

Daedalus1632:
Quindi a questo punto cosa mi consigliereste di prendere?

entrambe :smiley:
ti spiego meglio:
se hai la possibilità di utilizzare la leonardo come programmatore ICSP (dovrebbe essere fattibile) puoi costruirti tu la tua scheda arduino uno programmando il bootloader del chip vergine e creando una piedinatura compatibile con gli shield.

ti crei il tuo pcb e con 7€ ti crei la tua scheda arduino, hai la leonardo, poi comprerai un adattatore usb<->seriale per la tua scheda (a meno che tu non voglia mettere un chip tipo ftdi da saldare smd per ogni scheda) quindi predisponi sulla tua scheda un connettore per il convertitore, alla fine avrai una leonardo ed una uno ad un prezzo relativamente basso.

naturalmente ciò dipende dalla tua capacità di fare i pcb ma di per se il circuito non è complicato e nemmeno difficile da fare, si può fare con la tecnica stampante laser+ferro da stiro.

questo è il mio consiglio così ogni scheda ti costerà circa 7€ (le cose che costano di più sono il micro vergine che viene sui 4€ e il quarzo 50 cent) e col convertitore seriale (prezzo tra gli 8€ e 20€) diventa una vera e propria scheda arduino compatibile con tutti gli shield.
e poi hai la leonardo per poter giocare con la usb

Guarda, considera che io parto con conoscienze praticamente nulle di elettronica.
SE la Leonardo è utilizzabile come programmatore ICSP (e non ho idea di come fare per saperlo), e SE non c'è troppo rischio di friggere il microcontrollore per uno che di resistenze non sa nulla, allora prenderei la Leonardo, altrimenti mi sa che mi conviene la UNO.

Sennò non è possibile fare il contrario? Prendere la UNO e crearmi più avanti la Leo?

beh la leo usa un micro che è disponibile solo nel package SMD per capirci, non vi è verso di una DIP.

per essere fattibile ovvio che è fattibile ma devi essere abile a saldare gli smd e poi anche a fare le piste adatte

Ma volendo potrei scrivere un driver per riconsocere la UNO come una periferica di gioco?

quando scrivi

  • Arduino UNO (o 2009)
    l'arduino lo programmi in modo che abbia un output su seriale sulla base di input hardware che riceve (es. pressione dal tasto "A" sulla seriale printa "A")
    lato "gioco" dovrai mettere un interrupt (non ricordo come si chiamano in programmazione microsoft, mi pare event) sulla porta seriale che quando riceve un carattere lo analizza e sulla base di ciò che legge fa ciò che deve.
    pro: sistema semplice e più economico, programmazione di semplice livello sia lato arduino che C# (.net nell'import degli IO comprende le porte seriali direttamente)
    contro: rischi di rallentare il codice, infatti ad ogni pressione vai a leggere la seriale, rischi di bloccare il programma. inoltre necessiti di un hardware appositamente programmato

intendi che bisogna appunto scrivere il codice che manda un determinato segnale tramite seriale ad un determinato movimento del controller, o intendi qualcos'altro?

poi mi domando, hai detto che rischio di rallentare il codice perchè devo controllare continuamente la coda della seriale, ma non avviene la stessa cosa anche con la Leonardo, anche se non sono io ad implementarla?