timer

Dependencies:   mbed

Committer:
okazbb
Date:
Fri Jan 08 02:35:47 2016 +0000
Revision:
1:c19d6ecc34ac
Parent:
0:2a4b25dd671a
LED??

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 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 }