timer

Dependencies:   mbed

Committer:
okazbb
Date:
Sat Dec 26 02:58:58 2015 +0000
Revision:
0:2a4b25dd671a
Child:
1:c19d6ecc34ac
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okazbb 0:2a4b25dd671a 1 #include "mbed.h"
okazbb 0:2a4b25dd671a 2 #include <string>
okazbb 0:2a4b25dd671a 3
okazbb 0:2a4b25dd671a 4 //board
okazbb 0:2a4b25dd671a 5 Serial timerLed(PB_6, PA_10);
okazbb 0:2a4b25dd671a 6 DigitalOut led(LED1); //onboard led
okazbb 0:2a4b25dd671a 7 DigitalIn startSW(PB_8);
okazbb 0:2a4b25dd671a 8 DigitalIn goalSW(PB_9);
okazbb 0:2a4b25dd671a 9
okazbb 0:2a4b25dd671a 10 //setting
okazbb 0:2a4b25dd671a 11 const int DRAW_DELAY = 230;
okazbb 0:2a4b25dd671a 12 const int SWITCH_DELAY = 3000;
okazbb 0:2a4b25dd671a 13 const int LED_DELAY = 1500;
okazbb 0:2a4b25dd671a 14
okazbb 0:2a4b25dd671a 15 //local
okazbb 0:2a4b25dd671a 16 int system_time = 0;
okazbb 0:2a4b25dd671a 17 int draw_time = 0;
okazbb 0:2a4b25dd671a 18 int start_time = 0;
okazbb 0:2a4b25dd671a 19 int goal_time = 0;
okazbb 0:2a4b25dd671a 20 int led_time = 0;
okazbb 0:2a4b25dd671a 21 bool running = false;
okazbb 0:2a4b25dd671a 22 Timer timer; //https://developer.mbed.org/users/okini3939/notebook/timer_jp/
okazbb 0:2a4b25dd671a 23 //time https://developer.mbed.org/users/okini3939/notebook/time_jp/
okazbb 0:2a4b25dd671a 24
okazbb 0:2a4b25dd671a 25 /*
okazbb 0:2a4b25dd671a 26 * LED表示
okazbb 0:2a4b25dd671a 27 */
okazbb 0:2a4b25dd671a 28 void drawLED(int ms){
okazbb 0:2a4b25dd671a 29 int sec = ms / 1000;
okazbb 0:2a4b25dd671a 30 int time_min = sec / 60;
okazbb 0:2a4b25dd671a 31 int time_sec = sec % 60;
okazbb 0:2a4b25dd671a 32 int time_ms = ms % 1000;
okazbb 0:2a4b25dd671a 33
okazbb 0:2a4b25dd671a 34 //TODO 0.004秒遅延する
okazbb 0:2a4b25dd671a 35 timerLed.printf("%1d.", time_min);
okazbb 0:2a4b25dd671a 36 wait(0.001);
okazbb 0:2a4b25dd671a 37
okazbb 0:2a4b25dd671a 38 timerLed.printf("%2d.", time_sec);
okazbb 0:2a4b25dd671a 39 wait(0.001);
okazbb 0:2a4b25dd671a 40
okazbb 0:2a4b25dd671a 41 timerLed.printf("%3d", time_ms);
okazbb 0:2a4b25dd671a 42 wait(0.001);
okazbb 0:2a4b25dd671a 43
okazbb 0:2a4b25dd671a 44 if(running){
okazbb 0:2a4b25dd671a 45 timerLed.printf("-1");
okazbb 0:2a4b25dd671a 46 } else {
okazbb 0:2a4b25dd671a 47 timerLed.printf("-0");
okazbb 0:2a4b25dd671a 48 }
okazbb 0:2a4b25dd671a 49 wait(0.001);
okazbb 0:2a4b25dd671a 50
okazbb 0:2a4b25dd671a 51 timerLed.printf("\r");
okazbb 0:2a4b25dd671a 52 }
okazbb 0:2a4b25dd671a 53
okazbb 0:2a4b25dd671a 54 /*
okazbb 0:2a4b25dd671a 55 * start
okazbb 0:2a4b25dd671a 56 */
okazbb 0:2a4b25dd671a 57 void start(){
okazbb 0:2a4b25dd671a 58 timer.start();
okazbb 0:2a4b25dd671a 59 running = true;
okazbb 0:2a4b25dd671a 60 }
okazbb 0:2a4b25dd671a 61
okazbb 0:2a4b25dd671a 62 /*
okazbb 0:2a4b25dd671a 63 * goal
okazbb 0:2a4b25dd671a 64 */
okazbb 0:2a4b25dd671a 65 void goal(){
okazbb 0:2a4b25dd671a 66 timer.stop();
okazbb 0:2a4b25dd671a 67 running = false;
okazbb 0:2a4b25dd671a 68
okazbb 0:2a4b25dd671a 69 drawLED(timer.read_ms());
okazbb 0:2a4b25dd671a 70 timer.reset();
okazbb 0:2a4b25dd671a 71 }
okazbb 0:2a4b25dd671a 72
okazbb 0:2a4b25dd671a 73 /*
okazbb 0:2a4b25dd671a 74 * Main
okazbb 0:2a4b25dd671a 75 */
okazbb 0:2a4b25dd671a 76 int main() {
okazbb 0:2a4b25dd671a 77
okazbb 0:2a4b25dd671a 78 int i = 0;
okazbb 0:2a4b25dd671a 79
okazbb 0:2a4b25dd671a 80 wait(1);
okazbb 0:2a4b25dd671a 81 timerLed.format(8, Serial::None, 1);
okazbb 0:2a4b25dd671a 82 drawLED(0);
okazbb 0:2a4b25dd671a 83
okazbb 0:2a4b25dd671a 84 while(1) {
okazbb 0:2a4b25dd671a 85 system_time = time(NULL);
okazbb 0:2a4b25dd671a 86
okazbb 0:2a4b25dd671a 87 //start or goal
okazbb 0:2a4b25dd671a 88 if(startSW == 0){
okazbb 0:2a4b25dd671a 89 if(start_time + SWITCH_DELAY <= system_time){
okazbb 0:2a4b25dd671a 90 if(running){
okazbb 0:2a4b25dd671a 91 goal();
okazbb 0:2a4b25dd671a 92 } else {
okazbb 0:2a4b25dd671a 93 start();
okazbb 0:2a4b25dd671a 94 }
okazbb 0:2a4b25dd671a 95
okazbb 0:2a4b25dd671a 96 }
okazbb 0:2a4b25dd671a 97 }
okazbb 0:2a4b25dd671a 98
okazbb 0:2a4b25dd671a 99 //draw led
okazbb 0:2a4b25dd671a 100 if(running && draw_time + DRAW_DELAY <= system_time){
okazbb 0:2a4b25dd671a 101 draw_time = system_time;
okazbb 0:2a4b25dd671a 102 drawLED(timer.read_ms());
okazbb 0:2a4b25dd671a 103 }
okazbb 0:2a4b25dd671a 104
okazbb 0:2a4b25dd671a 105 //led signal
okazbb 0:2a4b25dd671a 106 if(led_time + 1500 <= LED_DELAY){
okazbb 0:2a4b25dd671a 107 led_time = system_time;
okazbb 0:2a4b25dd671a 108 led = !led;
okazbb 0:2a4b25dd671a 109 i++;
okazbb 0:2a4b25dd671a 110 if(i > 9) i = 0;
okazbb 0:2a4b25dd671a 111 }
okazbb 0:2a4b25dd671a 112
okazbb 0:2a4b25dd671a 113
okazbb 0:2a4b25dd671a 114 }
okazbb 0:2a4b25dd671a 115 }