![](/media/cache/profiles/b5627b1a37347f8a2eb37929da3ebf17.jpg.50x50_q85.jpg)
timer
main.cpp@0:2a4b25dd671a, 2015-12-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |