Amaldi Game

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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