Amaldi Game
Dependencies: mbed
Revision 1:61ebf06c61cc, committed 2018-12-01
- Comitter:
- pinofal
- Date:
- Sat Dec 01 23:53:13 2018 +0000
- Parent:
- 0:42458802c36f
- Commit message:
- Amaldi Game
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 42458802c36f -r 61ebf06c61cc main.cpp --- a/main.cpp Tue May 20 00:47:38 2014 +0000 +++ b/main.cpp Sat Dec 01 23:53:13 2018 +0000 @@ -2,26 +2,97 @@ #include "stdlib.h" #include <Timer.h> -InterruptIn mybutton(PC_13); // B1 +// genera un oggetto serial collegato al PC +Serial pc(USBTX, USBRX); +DigitalOut myLed(LED1); + +// moltiplicatore del tempo in millisecondi +double nMultiplier = 500.0; +Timer myTimer; -DigitalOut myled(LED1); +// Tempo a disposizione del giocatore per colpire il piezo dopo l'accensiond del LED +int32_t nDelay = 500; // tempo in [msec] +float fDelay = 500.0; // tempo in [msec] + +// tempi misurati con il timer +int32_t nStartTimeGame, nElapsedTimeGame, nCurrentTimeGame; -double multiplier = 500.0; // maximum on-off time in milliseconds -Timer timer; +// seme per la generazione di numeri casuali +unsigned int nSeed; + +// pulsante su cui bisogna colpire +DigitalIn InPiezo(PA_4); + -int delay = 500; // initial on-off time in milliseconds - -void random_on_off() { - srand(unsigned(timer.read_ms()% RAND_MAX)); - delay = int(multiplier * float(rand()) / RAND_MAX); - } - -int main() { - timer.start(); - while(1) { - myled = !myled; - mybutton.fall(&random_on_off); - wait_ms(delay); - } - } \ No newline at end of file +/********/ +/* MAIN */ +/********/ +int main() +{ + // velocità di comunicazione sulla seriale con PC + pc.baud(921600); + + // inizialmente spegne LED + myLed=0; + + // pc.printf("RANDMAX= %d\r\n", RAND_MAX); // scopi diagnostici + + while(1) + { + // avvia il timer + myTimer.start(); + //rand() fissa sempre la stessa sequenza di numeri patendo da 1, + //srand(seed) fissa il numero di partenza, seed, ma la sequenza è sempre la stessa + // per generare una sequenza diversa partendo da un numero diverso il seed lo imposto leggendo l'orologio di sistema (p.e. timer) + // RAND_MAX = 2147483647 + nSeed = unsigned(myTimer.read_ms()% RAND_MAX); // resto della divisione timer_read_ms() / RAND_MAX + srand(nSeed); + + + // calcola il tempo entro il quale è attesa la risposta del giocatore + fDelay = (nMultiplier * (float(rand()) / RAND_MAX)); + // pc.printf("\r\ndelay float = %f\r\n", fDelay); // scopi diagnostici + nDelay = int(fDelay); + //pc.printf("delay int = %d\r\n", nDelay); // scopi diagnostici + + // se il ritardo è maggiore di 5000, dividilo per 3 fino a quando non diventa inferiore a 5000 + while(nDelay > 5000) + { + nDelay /= 3; + } + + // se il ritardo è minore di 100, moltiplicalo per 2 fino a quando non diventa maggiore di 100 + while(nDelay < 100) + { + nDelay *= 2; + } + + // accendi il LED e attendi che il giocatore prema sul piezo + nStartTimeGame = myTimer.read_ms(); // istante di partenza del gioco + myLed = 1; + while( (InPiezo == 0) && (nElapsedTimeGame < nDelay) ) + { + nCurrentTimeGame = myTimer.read_ms(); // acquisisci il timer attuale + nElapsedTimeGame = (nCurrentTimeGame - nStartTimeGame); // tempo trascorso dall'inizio gioco + } + myLed = 0; + myTimer.stop(); // istante di fine del gioco + + + // stampa la risposta e il tempo a disposizione + pc.printf("\r\nrisposta in = %d; tempo a disposizione= %d \r\n", nElapsedTimeGame, nDelay); + if(nElapsedTimeGame < nDelay) + { + pc.printf("GOOD !!! \r\n"); // il giocatore ha risposto prima della scadenza del timer + } + else + { + pc.printf("BAD ... \r\n"); // il giocatore ha risposto dopo la scadenza del timer + } + + + + + } +} \ No newline at end of file
diff -r 42458802c36f -r 61ebf06c61cc mbed.bld --- a/mbed.bld Tue May 20 00:47:38 2014 +0000 +++ b/mbed.bld Sat Dec 01 23:53:13 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877 \ No newline at end of file +https://os.mbed.com/users/mbed_official/code/mbed/builds/3a7713b1edbc \ No newline at end of file