VR FabLab - RoboVal / Mbed 2 deprecated Chronometer_V2

Dependencies:   mbed keypadLib TextLCD

Revision:
5:47a452a6f248
Parent:
4:23472c2b246b
Child:
6:369dafe4ed5e
--- a/main.cpp	Tue May 22 20:34:09 2018 +0000
+++ b/main.cpp	Tue May 22 20:48:32 2018 +0000
@@ -75,8 +75,10 @@
 int best_time = -1;
 // Pointer to the loop function (depending on the selected mode)
 void (*loopMethod)(void);
+// Flag to avoid unwanted mode switch when running
+bool isRunning = false;
 
-/*** Gestione keypad ****/
+/*** Keypad handling ****/
 PinName rowPins[4] = { PA_13, PA_14, PC_2, PC_3 };
 PinName colPins[4] = { PA_0, PA_1, PA_4, PB_0 };
 
@@ -121,9 +123,9 @@
         _cols[i] = new DigitalIn(colPins[i],PullDown);
     }
 }
-/**** fine gestione keypad ****/
+/**** End keypad handling ****/
 
-//Conversione da millisecondi a mm:ss:cc
+//Convert milliseconds in human-readabe (mm:ss:cc) format
 measured_time human_read(int ms){
     measured_time read;
     div_t qr = div(ms,1000);
@@ -139,9 +141,10 @@
     return read;    
 }
 
-// Invoked when startGate triggered.
+// Invoked when startGate triggered in SPEED mode.
 // Start the timer or read the timer and store lap and best time
 void measure_time() {
+    isRunning = true;
     int read = t.read_ms();
 
     if(lap == -1){
@@ -187,6 +190,7 @@
             time = human_read(best_time);
             lcd.locate(0,1);
             lcd.printf("Best %d %02d:%02d:%02d",best_lap,time.minutes,time.seconds,time.cents);
+            isRunning = false;
             break;
         // Default - display last completed lap time
         // In case of last lap, wait 1 sec -- next time, best lap will be displayed
@@ -202,12 +206,16 @@
     }
 }
 
+// Invoked when startGate triggered in LABIRYNTH mode.
 void start_time() {
+    isRunning = true;
     lap = 0;
     t.start();
 }
 
+// Invoked when endGate triggered in LABIRYNTH mode.
 void stop_time() {
+    isRunning = false;
     lap = 1;
     t.stop();
     int read = t.read_ms(); 
@@ -259,7 +267,10 @@
     }
 }
 
+// Reset state and configure current mode
+// Invoked when RESET (#) key pressed on the keypad
 void reset_measure(){
+    isRunning = false;
     t.stop();
     t.reset();
     lap = -1;
@@ -294,15 +305,18 @@
         heartbeat = !heartbeat;
         loopMethod();
         wait(0.1);
-        key = getKey(); 
+        key = getKey();
         if (key != '\0') {
-            if(key == 'A') {
-                mode = LABYRINTH;
-                reset_measure();
-            } else if(key == 'B') {
-                mode = SPEED;
-                reset_measure();
-            } else if(key == '#') {
+            if (!isRunning) {
+                if(key == 'A') {
+                    mode = LABYRINTH;
+                    reset_measure();
+                } else if(key == 'B') {
+                    mode = SPEED;
+                    reset_measure();
+                }
+            }
+            if(key == '#') {
                 reset_measure();
             }
         }