Kazushi Yamashiro
/
KYTIMER2
timer
main.cpp@1:c19d6ecc34ac, 2016-01-08 (annotated)
- Committer:
- okazbb
- Date:
- Fri Jan 08 02:35:47 2016 +0000
- Revision:
- 1:c19d6ecc34ac
- Parent:
- 0:2a4b25dd671a
LED??
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 | 1:c19d6ecc34ac | 11 | const int DRAW_DELAY = 235; |
okazbb | 1:c19d6ecc34ac | 12 | const int SWITCH_DELAY = 2000; |
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 | 1:c19d6ecc34ac | 22 | Timer system_timer; |
okazbb | 0:2a4b25dd671a | 23 | Timer timer; //https://developer.mbed.org/users/okini3939/notebook/timer_jp/ |
okazbb | 0:2a4b25dd671a | 24 | //time https://developer.mbed.org/users/okini3939/notebook/time_jp/ |
okazbb | 0:2a4b25dd671a | 25 | |
okazbb | 0:2a4b25dd671a | 26 | /* |
okazbb | 0:2a4b25dd671a | 27 | * LED表示 |
okazbb | 0:2a4b25dd671a | 28 | */ |
okazbb | 0:2a4b25dd671a | 29 | void drawLED(int ms){ |
okazbb | 0:2a4b25dd671a | 30 | int sec = ms / 1000; |
okazbb | 0:2a4b25dd671a | 31 | int time_min = sec / 60; |
okazbb | 0:2a4b25dd671a | 32 | int time_sec = sec % 60; |
okazbb | 0:2a4b25dd671a | 33 | int time_ms = ms % 1000; |
okazbb | 0:2a4b25dd671a | 34 | |
okazbb | 1:c19d6ecc34ac | 35 | |
okazbb | 0:2a4b25dd671a | 36 | //TODO 0.004秒遅延する |
okazbb | 1:c19d6ecc34ac | 37 | |
okazbb | 1:c19d6ecc34ac | 38 | char s[9]; |
okazbb | 1:c19d6ecc34ac | 39 | sprintf(s, "%01d.%02d.%03d-%1d", time_min, time_sec, time_ms, running); |
okazbb | 1:c19d6ecc34ac | 40 | string str(s); |
okazbb | 1:c19d6ecc34ac | 41 | for(int i = 0; i < (int)str.size(); ++i){ |
okazbb | 1:c19d6ecc34ac | 42 | char ch = str[i]; |
okazbb | 1:c19d6ecc34ac | 43 | timerLed.putc(str[i]); |
okazbb | 1:c19d6ecc34ac | 44 | wait(0.01); |
okazbb | 1:c19d6ecc34ac | 45 | } |
okazbb | 0:2a4b25dd671a | 46 | if(running){ |
okazbb | 1:c19d6ecc34ac | 47 | timerLed.putc('1'); |
okazbb | 0:2a4b25dd671a | 48 | } else { |
okazbb | 1:c19d6ecc34ac | 49 | timerLed.putc('0'); |
okazbb | 0:2a4b25dd671a | 50 | } |
okazbb | 1:c19d6ecc34ac | 51 | wait(0.01); |
okazbb | 0:2a4b25dd671a | 52 | timerLed.printf("\r"); |
okazbb | 0:2a4b25dd671a | 53 | } |
okazbb | 0:2a4b25dd671a | 54 | |
okazbb | 0:2a4b25dd671a | 55 | /* |
okazbb | 0:2a4b25dd671a | 56 | * start |
okazbb | 0:2a4b25dd671a | 57 | */ |
okazbb | 0:2a4b25dd671a | 58 | void start(){ |
okazbb | 0:2a4b25dd671a | 59 | timer.start(); |
okazbb | 0:2a4b25dd671a | 60 | running = true; |
okazbb | 0:2a4b25dd671a | 61 | } |
okazbb | 0:2a4b25dd671a | 62 | |
okazbb | 0:2a4b25dd671a | 63 | /* |
okazbb | 0:2a4b25dd671a | 64 | * goal |
okazbb | 0:2a4b25dd671a | 65 | */ |
okazbb | 0:2a4b25dd671a | 66 | void goal(){ |
okazbb | 0:2a4b25dd671a | 67 | timer.stop(); |
okazbb | 0:2a4b25dd671a | 68 | running = false; |
okazbb | 0:2a4b25dd671a | 69 | |
okazbb | 0:2a4b25dd671a | 70 | drawLED(timer.read_ms()); |
okazbb | 0:2a4b25dd671a | 71 | timer.reset(); |
okazbb | 0:2a4b25dd671a | 72 | } |
okazbb | 0:2a4b25dd671a | 73 | |
okazbb | 0:2a4b25dd671a | 74 | /* |
okazbb | 0:2a4b25dd671a | 75 | * Main |
okazbb | 0:2a4b25dd671a | 76 | */ |
okazbb | 0:2a4b25dd671a | 77 | int main() { |
okazbb | 0:2a4b25dd671a | 78 | |
okazbb | 0:2a4b25dd671a | 79 | int i = 0; |
okazbb | 1:c19d6ecc34ac | 80 | system_timer.start(); |
okazbb | 0:2a4b25dd671a | 81 | |
okazbb | 0:2a4b25dd671a | 82 | wait(1); |
okazbb | 1:c19d6ecc34ac | 83 | timerLed.format(8, Serial::None, 1); |
okazbb | 0:2a4b25dd671a | 84 | drawLED(0); |
okazbb | 0:2a4b25dd671a | 85 | |
okazbb | 0:2a4b25dd671a | 86 | while(1) { |
okazbb | 1:c19d6ecc34ac | 87 | system_time = system_timer.read_ms(); |
okazbb | 0:2a4b25dd671a | 88 | |
okazbb | 0:2a4b25dd671a | 89 | //start or goal |
okazbb | 1:c19d6ecc34ac | 90 | if(goalSW == 1){ |
okazbb | 0:2a4b25dd671a | 91 | if(start_time + SWITCH_DELAY <= system_time){ |
okazbb | 1:c19d6ecc34ac | 92 | start_time = system_time; |
okazbb | 0:2a4b25dd671a | 93 | if(running){ |
okazbb | 0:2a4b25dd671a | 94 | goal(); |
okazbb | 0:2a4b25dd671a | 95 | } else { |
okazbb | 0:2a4b25dd671a | 96 | start(); |
okazbb | 0:2a4b25dd671a | 97 | } |
okazbb | 0:2a4b25dd671a | 98 | |
okazbb | 0:2a4b25dd671a | 99 | } |
okazbb | 0:2a4b25dd671a | 100 | } |
okazbb | 0:2a4b25dd671a | 101 | |
okazbb | 0:2a4b25dd671a | 102 | //draw led |
okazbb | 0:2a4b25dd671a | 103 | if(running && draw_time + DRAW_DELAY <= system_time){ |
okazbb | 0:2a4b25dd671a | 104 | draw_time = system_time; |
okazbb | 0:2a4b25dd671a | 105 | drawLED(timer.read_ms()); |
okazbb | 0:2a4b25dd671a | 106 | } |
okazbb | 0:2a4b25dd671a | 107 | |
okazbb | 0:2a4b25dd671a | 108 | //led signal |
okazbb | 1:c19d6ecc34ac | 109 | if(led_time + LED_DELAY <= system_time){ |
okazbb | 0:2a4b25dd671a | 110 | led_time = system_time; |
okazbb | 0:2a4b25dd671a | 111 | led = !led; |
okazbb | 0:2a4b25dd671a | 112 | i++; |
okazbb | 0:2a4b25dd671a | 113 | if(i > 9) i = 0; |
okazbb | 0:2a4b25dd671a | 114 | } |
okazbb | 0:2a4b25dd671a | 115 | |
okazbb | 0:2a4b25dd671a | 116 | |
okazbb | 0:2a4b25dd671a | 117 | } |
okazbb | 0:2a4b25dd671a | 118 | } |