P.S. I bottoni si trovano nelle camicie.
http://www.treccani.it/vocabolario/bottone/Significato 2.aTornando in tema, io userei Bluetooth, come ti è stato consigliato.
Per assicurarti che il bottone indicato sia anche quello che è stato effettivamente premuto per primo, devi escludere possibili problemi dovuti alla durata di trasmissione.
Non puoi trasmettere un messaggio del tipo "Sono io il primo!" perché ognuno ci prova e vince che grida piú forte.
Devi trasmettere il messaggio "Io ho saputo la risposta alle ore 13 e 31 minuti, 15 secondi e 175 ms". Poi si occupa l'unità centrale di decidere chi è il primo, non in base all'ordine di arrivo dei messaggi, ma in base al loro contenuto.
Bluetooth 4.* ha un profilo fatto proprio per questo tipo di informazione:
https://www.bluetooth.com/specification ... t_time.xmlLa risoluzione ottenibile è di circa 4 ms, che dovrebbe bastare.
La struttura che ti serve è la seguente:
- unità centrale: central client
- bottoni: peripheral server
Il central fa uno scan e si collega uno dopo l'altro a tutti i peripheral che trova.
Quando è collegato scrive il suo tempo locale (che non deve essere il tempo reale, può partire da 00:00:00.000 ogni volta che lo accendi) sui peripheral.
Nel momento in cui un bottone viene premuto il peripheral usa gli advertising data per far capire al central che ha qualcosa da dire. Vedi qui:
https://www.bluetooth.com/specification ... ss-profile(Data Type 0xFF, Manufacturer Specific Data)
Il central si connette quindi a tutti i peripheral che indicano tramite il pacchetto di advertising di avere qualcosa da dire e legge l'ora, le confronta e decide chi è stato piú veloce.
Questa ovviamente è solo un'idea, si può anche fare diversamente, per esempio i peripheral vanno in advertising solo quando sono stati premuti o quando non sono inizializzati, così ci si risparmia l'uso degli advertising data...
Insomma, prendila come ispirazione, non come ricetta da seguire alla lettera

Io ho usato il
CYBLE-022001-00 e posso caldamente consigliarlo!
Occhio alla scelta dell'oscillatore, selezionane uno con una precisione decente o i tempi cominceranno a driftare.
Se vuoi ottimizzare la durata delle batterie puoi usare un RTC esterno al modulo bluetooth di quelli che consumano poco o nulla e lavorare con interrupts che risvegliano il micro dal sonno profondo

Proprio in questi giorni sto valutando questo:
http://abracon.com/Precisiontiming/AB08X5-RTC.PDF che promette bene.
Saluti Boiler