Sorgente di partenza per sviluppare i Timer V2.0

Dependencies:   TextLCD mbed

Fork of TimerFiera by Fabio Dal Forno

main.cpp

Committer:
fdalforno
Date:
2016-03-07
Revision:
0:c7170b5cd312
Child:
1:289167b04f0d

File content as of revision 0:c7170b5cd312:

#include <stdlib.h>

#include "mbed.h"
#include "TextLCD.h"

#define NUM_LAP 3


typedef struct time_screen {
   int cents;
   int seconds;
   int minutes;
} measured_time;


DigitalOut heartbeat(LED1);

InterruptIn user_button(USER_BUTTON); 
InterruptIn proximity(D9); 

Timer t;
TextLCD lcd(D3,D4,D5,D6,D7,D8); 

int lap = 0;
int last_read = 0;
int lap_time = 0;


//Conversione da millisecondi a mm:ss:cc
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;    
}

void measure_time(){
    int read = t.read_ms();
    
    if(lap == 0){
        t.start();
        lap++;
    }else{
        //Dabouncing per evitare problemi
        if(read - last_read > 100){
            
            lap_time = read - last_read;
            
            if(lap > NUM_LAP){
                t.stop();
            }else{
                lap++;
            }
            
            last_read = read;     
        }
    }
    
}

void reset_measure(){
    t.reset();
    lap = 0;
    last_read = 0;
}





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){
            wait(0.2);
        }else{
            wait(1);
        }
    }
}