AIUTO CON UN PROGRAMMA

DEVO REALIZZARE IL SEGUENTE PROGRAMMA:
Gioco di reattività con due pulsanti, due display I2C per messaggistica e punteggi, un led per avvio gara. Il gioco consiste nel premere più veloce dell’avversario un pulsante non appena si accende il led di avvio gara e segnalare sui due display “vittoria” o “sconfitta” e segnalare sugli stessi il punteggio ottenuto.

COME POSSO VERIFICARE CHI HA PREMUTO PIU' VELOCEMENTE IL BOTTONE?

GRAZIE IN ANTICIPO

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

_P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink: _
P.P.S.: Cortesemente evita le scritte tutte in MAIUSCOLO, grazie.

Ok grazie

Ciao ho bisogno di aiuto con questo progetto:

Gioco di reattività con due pulsanti, due display I2C per messaggistica e punteggi, un led per avvio gara. Il gioco consiste nel premere più veloce dell’avversario un pulsante non appena si accende il led di avvio gara e segnalare sui due display “vittoria” o “sconfitta” e segnalare sugli stessi il punteggio ottenuto.

Come posso verificare chi ha premuto più velocemente il pulsante?

All'accensione del LED leggi il valore di micros() per ogni pulsante premuto lo leggi di nuovo, fai le differenze tra il valore iniziale e il valore nel momento in cui è stato premuto il pulsate (così da sapere in quanti microsecondi la cosa è avvenuta) e ... quello che c'ha messo di meno è il vincitore :smiley:

Ovviamente NON leggi i pulsanti sino a quando non hai acceso il LED ... così eviti il furbetto che preme prima dell'accensione :wink:

Guglielmo

Meglio ancora: se all'accensione del led trova un pulsante premuto, squalifica il concorrente
Mi era già capitato, tempo fa, in hardware, coi relè

AmericanDreamer:
Meglio ancora: se all'accensione del led trova un pulsante premuto, squalifica il concorrente

... mi sembra giusto

Guglielmo

Puoi fare accendere il led usando la funzione random, fai in modo che ,ad esempio, il led si accenda tra un range di 10 secondi casualmente, tra il secondo 5 e il 15.
Così i concorrenti saranno più spiazzati.

Già che siamo in argomento giochini te ne suggerisco uno:
Arduino pensa un numero da 0 a 1000, e vince chi lo indovina nel minor numero di tentativi.
All'immissione di un numero di un concorrente, Arduino risponde solo se il numero è più alto o più basso
di quello che lui ha pensato. Devi solo aggiungere una tastiera.

Ma io ho un dubbio...
Lo OP, in un mese, l'unica cosa che ha fatto sul progetto è stato ripetere la domanda?
A questo ritmo non ci arriva più ad avere un prototipo funzionante. ..sono basito, che anchesi sarebbe un futuro professionista nel ramo...

Standardoil:
Lo OP, in un mese, l'unica cosa che ha fatto sul progetto è stato ripetere la domanda?

Non mi ero accorto dell'altro thread ... >:(
... ora li riunisco e chiedo all'OP di NON aprire più thread sullo stesso argomento!

Guglielmo

Edit: Threads riuniti in uno solo.

gpb01:
All'accensione del LED leggi il valore di micros() per ogni pulsante premuto lo leggi di nuovo, fai le differenze tra il valore iniziale e il valore nel momento in cui è stato premuto il pulsate

Perché, due variabili globali (volatile bool) e due ISR su RISING (che mettono true la propria variabile solo se l'altra è false) è troppo complicato? :wink:

docdoc:
Perché, due variabili globali (volatile bool) e due ISR su RISING (che mettono true la propria variabile solo se l'altra è false) è troppo complicato? :wink:

Per iniziare direi sicuramente di SI, troppo complicato ... lascialo cominciare con le cose più semplici che a complicarle ci vuole poco :smiley:

Guglielmo

Non credo serva tenere nota del tempo
Due if digitlread in sequenza nel ciclo principale, la prima che interviene fa il lavoro e stacca tutto, ragionare easy

Infatti
Non vedo alcuna difficoltà nel problema
Una manciata di pinmode
Due test in croce, un paio di led e si prova "l'indicatore di primo evento" (così si chiama)
in seconda battuta attaccare gli lcd
Seconda puntata attaccare un pc e e comandato con un pulsante
E via così, un passo per volta

AmericanDreamer:
Non credo serva tenere nota del tempo
Due if digitlread in sequenza nel ciclo principale, la prima che interviene fa il lavoro e stacca tutto, ragionare easy

Giusto, ancora più semplice ...
... diciamo che con micros() poteva anche visualizzare i tempi di reazione ed ... era cosa simpatica :wink:

Guglielmo

Per me per rilevare il primo pulsante che preme dopo l'accensione del led, bisogna controllare solo il primo fronte una sola volta... se uno ha premuto prima o continua a pigiare a raffica non va considerato. Una volta letto il risultato si riabilitano i pulsanti.

Buona l'obiezione della raffica
Ai miei tempi, coi relè, non ero riuscito a escluderla, ma solo per mancanza di voglia

Banale, basta squalificare i pulsanti trovati alti 'prima' della luce verde...

...e pensare che io a 12 anni feci una pulsantiera per quiz usando solo 2 pulsanti, 2 lampadine, un paio di relé (doppio deviatore, configurati per disattivarsi a vicenda al primo che si attiva)... :wink:

Io mi riferivo a quello, prima
Mi ricordo che ho usato gli interruttori del cruscotto di una 600 rottamata.
E le lampadine degli stop, avevo messo la lampada di un giocatore davanti all'altro. Così la lampada rossa indicava il perdente