Amaldi Game
Dependencies: mbed
main.cpp@1:61ebf06c61cc, 2018-12-01 (annotated)
- Committer:
- pinofal
- Date:
- Sat Dec 01 23:53:13 2018 +0000
- Revision:
- 1:61ebf06c61cc
- Parent:
- 0:42458802c36f
Amaldi Game
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nucleo | 0:42458802c36f | 1 | #include "mbed.h" |
nucleo | 0:42458802c36f | 2 | #include "stdlib.h" |
nucleo | 0:42458802c36f | 3 | #include <Timer.h> |
nucleo | 0:42458802c36f | 4 | |
pinofal | 1:61ebf06c61cc | 5 | // genera un oggetto serial collegato al PC |
pinofal | 1:61ebf06c61cc | 6 | Serial pc(USBTX, USBRX); |
pinofal | 1:61ebf06c61cc | 7 | DigitalOut myLed(LED1); |
pinofal | 1:61ebf06c61cc | 8 | |
pinofal | 1:61ebf06c61cc | 9 | // moltiplicatore del tempo in millisecondi |
pinofal | 1:61ebf06c61cc | 10 | double nMultiplier = 500.0; |
pinofal | 1:61ebf06c61cc | 11 | Timer myTimer; |
nucleo | 0:42458802c36f | 12 | |
pinofal | 1:61ebf06c61cc | 13 | // Tempo a disposizione del giocatore per colpire il piezo dopo l'accensiond del LED |
pinofal | 1:61ebf06c61cc | 14 | int32_t nDelay = 500; // tempo in [msec] |
pinofal | 1:61ebf06c61cc | 15 | float fDelay = 500.0; // tempo in [msec] |
pinofal | 1:61ebf06c61cc | 16 | |
pinofal | 1:61ebf06c61cc | 17 | // tempi misurati con il timer |
pinofal | 1:61ebf06c61cc | 18 | int32_t nStartTimeGame, nElapsedTimeGame, nCurrentTimeGame; |
nucleo | 0:42458802c36f | 19 | |
pinofal | 1:61ebf06c61cc | 20 | // seme per la generazione di numeri casuali |
pinofal | 1:61ebf06c61cc | 21 | unsigned int nSeed; |
pinofal | 1:61ebf06c61cc | 22 | |
pinofal | 1:61ebf06c61cc | 23 | // pulsante su cui bisogna colpire |
pinofal | 1:61ebf06c61cc | 24 | DigitalIn InPiezo(PA_4); |
pinofal | 1:61ebf06c61cc | 25 | |
nucleo | 0:42458802c36f | 26 | |
nucleo | 0:42458802c36f | 27 | |
pinofal | 1:61ebf06c61cc | 28 | /********/ |
pinofal | 1:61ebf06c61cc | 29 | /* MAIN */ |
pinofal | 1:61ebf06c61cc | 30 | /********/ |
pinofal | 1:61ebf06c61cc | 31 | int main() |
pinofal | 1:61ebf06c61cc | 32 | { |
pinofal | 1:61ebf06c61cc | 33 | // velocità di comunicazione sulla seriale con PC |
pinofal | 1:61ebf06c61cc | 34 | pc.baud(921600); |
pinofal | 1:61ebf06c61cc | 35 | |
pinofal | 1:61ebf06c61cc | 36 | // inizialmente spegne LED |
pinofal | 1:61ebf06c61cc | 37 | myLed=0; |
pinofal | 1:61ebf06c61cc | 38 | |
pinofal | 1:61ebf06c61cc | 39 | // pc.printf("RANDMAX= %d\r\n", RAND_MAX); // scopi diagnostici |
pinofal | 1:61ebf06c61cc | 40 | |
pinofal | 1:61ebf06c61cc | 41 | while(1) |
pinofal | 1:61ebf06c61cc | 42 | { |
pinofal | 1:61ebf06c61cc | 43 | // avvia il timer |
pinofal | 1:61ebf06c61cc | 44 | myTimer.start(); |
pinofal | 1:61ebf06c61cc | 45 | //rand() fissa sempre la stessa sequenza di numeri patendo da 1, |
pinofal | 1:61ebf06c61cc | 46 | //srand(seed) fissa il numero di partenza, seed, ma la sequenza è sempre la stessa |
pinofal | 1:61ebf06c61cc | 47 | // per generare una sequenza diversa partendo da un numero diverso il seed lo imposto leggendo l'orologio di sistema (p.e. timer) |
pinofal | 1:61ebf06c61cc | 48 | // RAND_MAX = 2147483647 |
pinofal | 1:61ebf06c61cc | 49 | nSeed = unsigned(myTimer.read_ms()% RAND_MAX); // resto della divisione timer_read_ms() / RAND_MAX |
pinofal | 1:61ebf06c61cc | 50 | srand(nSeed); |
pinofal | 1:61ebf06c61cc | 51 | |
pinofal | 1:61ebf06c61cc | 52 | |
pinofal | 1:61ebf06c61cc | 53 | // calcola il tempo entro il quale è attesa la risposta del giocatore |
pinofal | 1:61ebf06c61cc | 54 | fDelay = (nMultiplier * (float(rand()) / RAND_MAX)); |
pinofal | 1:61ebf06c61cc | 55 | // pc.printf("\r\ndelay float = %f\r\n", fDelay); // scopi diagnostici |
pinofal | 1:61ebf06c61cc | 56 | nDelay = int(fDelay); |
pinofal | 1:61ebf06c61cc | 57 | //pc.printf("delay int = %d\r\n", nDelay); // scopi diagnostici |
pinofal | 1:61ebf06c61cc | 58 | |
pinofal | 1:61ebf06c61cc | 59 | // se il ritardo è maggiore di 5000, dividilo per 3 fino a quando non diventa inferiore a 5000 |
pinofal | 1:61ebf06c61cc | 60 | while(nDelay > 5000) |
pinofal | 1:61ebf06c61cc | 61 | { |
pinofal | 1:61ebf06c61cc | 62 | nDelay /= 3; |
pinofal | 1:61ebf06c61cc | 63 | } |
pinofal | 1:61ebf06c61cc | 64 | |
pinofal | 1:61ebf06c61cc | 65 | // se il ritardo è minore di 100, moltiplicalo per 2 fino a quando non diventa maggiore di 100 |
pinofal | 1:61ebf06c61cc | 66 | while(nDelay < 100) |
pinofal | 1:61ebf06c61cc | 67 | { |
pinofal | 1:61ebf06c61cc | 68 | nDelay *= 2; |
pinofal | 1:61ebf06c61cc | 69 | } |
pinofal | 1:61ebf06c61cc | 70 | |
pinofal | 1:61ebf06c61cc | 71 | // accendi il LED e attendi che il giocatore prema sul piezo |
pinofal | 1:61ebf06c61cc | 72 | nStartTimeGame = myTimer.read_ms(); // istante di partenza del gioco |
pinofal | 1:61ebf06c61cc | 73 | myLed = 1; |
pinofal | 1:61ebf06c61cc | 74 | while( (InPiezo == 0) && (nElapsedTimeGame < nDelay) ) |
pinofal | 1:61ebf06c61cc | 75 | { |
pinofal | 1:61ebf06c61cc | 76 | nCurrentTimeGame = myTimer.read_ms(); // acquisisci il timer attuale |
pinofal | 1:61ebf06c61cc | 77 | nElapsedTimeGame = (nCurrentTimeGame - nStartTimeGame); // tempo trascorso dall'inizio gioco |
pinofal | 1:61ebf06c61cc | 78 | } |
pinofal | 1:61ebf06c61cc | 79 | myLed = 0; |
pinofal | 1:61ebf06c61cc | 80 | myTimer.stop(); // istante di fine del gioco |
pinofal | 1:61ebf06c61cc | 81 | |
pinofal | 1:61ebf06c61cc | 82 | |
pinofal | 1:61ebf06c61cc | 83 | // stampa la risposta e il tempo a disposizione |
pinofal | 1:61ebf06c61cc | 84 | pc.printf("\r\nrisposta in = %d; tempo a disposizione= %d \r\n", nElapsedTimeGame, nDelay); |
pinofal | 1:61ebf06c61cc | 85 | if(nElapsedTimeGame < nDelay) |
pinofal | 1:61ebf06c61cc | 86 | { |
pinofal | 1:61ebf06c61cc | 87 | pc.printf("GOOD !!! \r\n"); // il giocatore ha risposto prima della scadenza del timer |
pinofal | 1:61ebf06c61cc | 88 | } |
pinofal | 1:61ebf06c61cc | 89 | else |
pinofal | 1:61ebf06c61cc | 90 | { |
pinofal | 1:61ebf06c61cc | 91 | pc.printf("BAD ... \r\n"); // il giocatore ha risposto dopo la scadenza del timer |
pinofal | 1:61ebf06c61cc | 92 | } |
pinofal | 1:61ebf06c61cc | 93 | |
pinofal | 1:61ebf06c61cc | 94 | |
pinofal | 1:61ebf06c61cc | 95 | |
pinofal | 1:61ebf06c61cc | 96 | |
pinofal | 1:61ebf06c61cc | 97 | } |
pinofal | 1:61ebf06c61cc | 98 | } |