ロボカップジュニアサッカー IRM2121を用いた専用パルスボールを検知するためのライブラリ
Dependents: BallCheck_IRM2121_InterrputInAdd CatPot_SensorRight
Pingのライブラリを参考にしました。 RoboCupJuniorSoccerにおけるボール検知をまとめて行うために作成したライブラリ。
距離に応じて微妙に値が変わるようになりました。 まともに使えます。
なお、このライブラリには、interruptinの機能を拡張するためのライブラリが含まれています。 そのため、必要なときだけピン変化割り込みに入ることが可能となっています。
値に応じて関数ポインタとかすれば距離によって値かわるようにできるかも if文で十分かもしれません
Diff: IRM2121.cpp
- Revision:
- 2:40101fcb6d44
- Parent:
- 1:b25c8ac20d5b
- Child:
- 3:711dde7b4c12
--- a/IRM2121.cpp Fri Dec 05 14:51:05 2014 +0000 +++ b/IRM2121.cpp Mon Jan 05 05:51:24 2015 +0000 @@ -12,22 +12,24 @@ IRM2121::IRM2121(PinName IRM_PIN) : _event(IRM_PIN) , _timer() - { + { } void IRM2121::_Start(void) { - _timer.start(); - _Time = _timer.read_us(); - _Valid = false; - _Busy = true; - _event.fall_disable(this,&IRM2121::_Start); - _event.rise(this,&IRM2121::_Stop); + if(_Valid && _Busy ){ + _timer.start(); + _Time = _timer.read_us(); + _Valid = false; + _Busy = true; + _event.fall_disable(this,&IRM2121::_Start); + _event.rise(this,&IRM2121::_Stop); + } } void IRM2121::_Stop(void) { - if(~_Valid && _Busy){ + if(!_Valid && _Busy){ _Valid = true; // When it stops, update the time _Busy = false; _Time = _timer.read_us()-_Time; @@ -35,19 +37,33 @@ } } -void IRM2121::Set() +void IRM2121::Set(void) { - _event.fall(this,&IRM2121::_Start ); + _Valid = true; + _Busy = true; + _event.fall(this,&IRM2121::_Start ); + + + } -int IRM2121::Read() -// 1 means not valid. +int IRM2121::Read(void) +// 0 means not valid. { - if(_Valid && ~_Busy){ - return (_Time); - }else{ + if(_Valid && !_Busy){ + return _Time; + + }else { _event.fall_disable(this,&IRM2121::_Start); _event.rise_disable(this,&IRM2121::_Stop); - return 1; + return 0; } } + + +void IRM2121::ReturnVB(bool *valid, bool *busy){ + //use after read_function. this is flag checker. + *valid = _Valid; + *busy = _Busy; + +} \ No newline at end of file