Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Hotboards_keypad TextLCD mbed
Fork of Chronometer_V2 by
Diff: main.cpp
- Revision:
- 0:1a92e4a37697
- Child:
- 1:26bcd89c18e5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Nov 23 14:20:48 2017 +0000
@@ -0,0 +1,169 @@
+//##############################################################
+//##
+//## Event: RoboVal - Robot Race
+//##
+//## Chronometer double use
+//##
+//## Version 1.99A
+//##
+//## Hardware platform used: ST NUCLEO-F401RE
+//##
+//## Software IDE used: mbed online version
+//##
+//## Organizzation: Verona FabLab
+//##
+//## Date creation: 2018.01.01
+//##
+//## Software developpers: FdF,GV, AG
+//##
+//## Base on original version of by FdF
+//##
+//##############################################################
+
+#include <stdlib.h>
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+
+// Default Number Lap
+#define NUM_LAP 3
+
+// Reference for Low/Min Voltage battery
+#define VBAT_MIN 7.2
+
+
+typedef struct time_screen {
+ int cents;
+ int seconds;
+ int minutes;
+} measured_time;
+
+
+ // read Voltage battery
+DigitalOut heartbeat(LED1);
+
+// read Voltage battery, analog pin used PC_3 (Pin 37 of Morpho layout)
+AnalogIn vbat(PC_3);
+
+// User button pressure
+InterruptIn user_button(USER_BUTTON);
+
+// Sensor connected to digital input D9, alias PC7 on Morpho layout
+InterruptIn proximity(D9);
+
+Timer t;
+
+// LCD Display (RS, E, D4, D5, D6, D7);
+TextLCD lcd(D2,D3,D4,D5,D6,D7);
+
+int lap = 0;
+int last_read = 0;
+int lap_time = 0;
+
+
+// Conversion from millisecond to mm:ss:cc data format
+measured_time human_read(int ms){
+ measured_time read;
+ div_t qr = div(ms,1000);
+
+ read.cents = qr.rem % 100;
+
+ qr = div(qr.quot,60);
+ read.seconds = qr.rem;
+
+ qr = div(qr.quot,60);
+ read.minutes = qr.rem;
+
+ return read;
+}
+
+// Function to measure time elapsed
+void measure_time(){
+ int read = t.read_ms();
+
+ if(lap == 0){
+ t.start();
+ lap++;
+ }else{
+ //Dabouncing per evitare problemi
+ if(read - last_read > 1000){
+
+ lap_time = read - last_read;
+
+ if(lap >= NUM_LAP){
+ t.stop();
+ lap++;
+ }else{
+ lap++;
+ }
+
+ last_read = read;
+ }
+ }
+
+}
+
+// Function to reset measure done
+void reset_measure(){
+ t.stop();
+ t.reset();
+ lap = 0;
+ last_read = 0;
+ lcd.cls();
+}
+
+
+
+//------------------------------------------------------------
+//
+// Main body
+//
+//------------------------------------------------------------
+
+int main() {
+
+ proximity.mode(PullDown);
+ proximity.rise(&measure_time);
+ user_button.fall(&reset_measure);
+
+
+
+
+ while(true) {
+ int read = t.read_ms();
+
+ measured_time time = human_read(read);
+
+ lcd.locate(0,0);
+ lcd.printf("Totale %02d:%02d:%02d",time.minutes,time.seconds,time.cents);
+
+ //Gestione dei parziali
+ if(lap > 1){
+ time = human_read(lap_time);
+ lcd.locate(0,1);
+ lcd.printf("Giro %d %02d:%02d:%02d",lap - 1,time.minutes,time.seconds,time.cents);
+ }
+
+ heartbeat = !heartbeat;
+
+
+ if(lap > 0 && lap <= NUM_LAP){
+ wait(0.1);
+ }else{
+ if(lap == 0){
+ //Controllo batteria con partitore resistivo
+ double battery = ((3.3L * vbat) * 57) / 10;
+ if(battery < VBAT_MIN){
+ lcd.locate(0,1);
+ lcd.printf("LOW BAT %2.1f",battery);
+ }else{
+ lcd.locate(0,1);
+ lcd.printf("OK BAT %2.1f",battery);
+ }
+ }
+ wait(1);
+ }
+ }
+}
+
