24日間連続してカウントするタイマークラスです。クラスの実装が公開されていないので理由は不明ですが、mbed標準のTimerクラスは2148秒までしかカウントしてくれません。そのため、せめてArduinoと同等のカウントが可能なように作成しました。

Dependents:   gps_com

Committer:
morimoriYNCT
Date:
Tue Jul 15 05:12:54 2014 +0000
Revision:
1:2441ccdcd627
Parent:
0:764aaee2b395
add comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
morimoriYNCT 1:2441ccdcd627 1 /***************************************
morimoriYNCT 1:2441ccdcd627 2 TimerExtended
morimoriYNCT 1:2441ccdcd627 3 Purpose: you can use timer untill 24 days in milli seconds.
morimoriYNCT 1:2441ccdcd627 4 Author: Katsuhiro Morishita @2014
morimoriYNCT 1:2441ccdcd627 5 License: apache license 2, or MIT, which you like
morimoriYNCT 1:2441ccdcd627 6 ****************************************/
morimoriYNCT 0:764aaee2b395 7 #include "mbed.h"
morimoriYNCT 0:764aaee2b395 8
morimoriYNCT 0:764aaee2b395 9
morimoriYNCT 0:764aaee2b395 10 class TimerExtended
morimoriYNCT 0:764aaee2b395 11 {
morimoriYNCT 0:764aaee2b395 12 private:
morimoriYNCT 0:764aaee2b395 13 Timer _t;
morimoriYNCT 0:764aaee2b395 14 Ticker _tk;
morimoriYNCT 0:764aaee2b395 15 long milli_second;
morimoriYNCT 0:764aaee2b395 16
morimoriYNCT 0:764aaee2b395 17 void update()
morimoriYNCT 0:764aaee2b395 18 {
morimoriYNCT 0:764aaee2b395 19 if(this->milli_second < 2147483645)
morimoriYNCT 0:764aaee2b395 20 this->milli_second += this->_t.read_ms();
morimoriYNCT 0:764aaee2b395 21 this->_t.reset();
morimoriYNCT 0:764aaee2b395 22 }
morimoriYNCT 0:764aaee2b395 23 public:
morimoriYNCT 0:764aaee2b395 24 TimerExtended()
morimoriYNCT 0:764aaee2b395 25 {
morimoriYNCT 0:764aaee2b395 26 this->milli_second = 0l;
morimoriYNCT 0:764aaee2b395 27 }
morimoriYNCT 0:764aaee2b395 28
morimoriYNCT 0:764aaee2b395 29 // start timer
morimoriYNCT 0:764aaee2b395 30 void start()
morimoriYNCT 0:764aaee2b395 31 {
morimoriYNCT 0:764aaee2b395 32 this->_tk.attach(this, &TimerExtended::update, 2000.0); // 2000.0 should be lower then max value of Timer obj.
morimoriYNCT 0:764aaee2b395 33 this->_t.start();
morimoriYNCT 0:764aaee2b395 34 }
morimoriYNCT 0:764aaee2b395 35
morimoriYNCT 0:764aaee2b395 36 // like Arduino lib.
morimoriYNCT 0:764aaee2b395 37 long millis()
morimoriYNCT 0:764aaee2b395 38 {
morimoriYNCT 0:764aaee2b395 39 (void)this->update();
morimoriYNCT 0:764aaee2b395 40 return this->milli_second;
morimoriYNCT 0:764aaee2b395 41 }
morimoriYNCT 0:764aaee2b395 42
morimoriYNCT 0:764aaee2b395 43 // return time [s] in double
morimoriYNCT 0:764aaee2b395 44 double read()
morimoriYNCT 0:764aaee2b395 45 {
morimoriYNCT 0:764aaee2b395 46 return (double)this->millis() / 1000.0;
morimoriYNCT 0:764aaee2b395 47 }
morimoriYNCT 0:764aaee2b395 48
morimoriYNCT 0:764aaee2b395 49 // return time [ms]
morimoriYNCT 0:764aaee2b395 50 long read_ms()
morimoriYNCT 0:764aaee2b395 51 {
morimoriYNCT 0:764aaee2b395 52 return this->millis();
morimoriYNCT 0:764aaee2b395 53 }
morimoriYNCT 0:764aaee2b395 54
morimoriYNCT 0:764aaee2b395 55 };