ロボカップジュニアサッカー IRM2121を用いた専用パルスボールを検知するためのライブラリ

Dependents:   BallCheck_IRM2121_InterrputInAdd CatPot_SensorRight

Pingのライブラリを参考にしました。 RoboCupJuniorSoccerにおけるボール検知をまとめて行うために作成したライブラリ。

距離に応じて微妙に値が変わるようになりました。 まともに使えます。

なお、このライブラリには、interruptinの機能を拡張するためのライブラリが含まれています。 そのため、必要なときだけピン変化割り込みに入ることが可能となっています。

値に応じて関数ポインタとかすれば距離によって値かわるようにできるかも if文で十分かもしれません

Committer:
ryuna
Date:
Mon Jan 05 05:51:24 2015 +0000
Revision:
2:40101fcb6d44
Parent:
1:b25c8ac20d5b
Child:
3:711dde7b4c12
??????????????????????; ; ???????????busy,valid???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryuna 1:b25c8ac20d5b 1 /* mbed Ping Library respected Library !!
ryuna 0:fd5c1ea78a7c 2 *
ryuna 1:b25c8ac20d5b 3 * make interruptin_mod by bousiya03
ryuna 1:b25c8ac20d5b 4 *
ryuna 0:fd5c1ea78a7c 5 */
ryuna 0:fd5c1ea78a7c 6
ryuna 0:fd5c1ea78a7c 7
ryuna 0:fd5c1ea78a7c 8 #include "IRM2121.h"
ryuna 1:b25c8ac20d5b 9 #include "interruptin_mod.h"
ryuna 0:fd5c1ea78a7c 10 #include "mbed.h"
ryuna 0:fd5c1ea78a7c 11
ryuna 0:fd5c1ea78a7c 12 IRM2121::IRM2121(PinName IRM_PIN)
ryuna 0:fd5c1ea78a7c 13 : _event(IRM_PIN)
ryuna 0:fd5c1ea78a7c 14 , _timer()
ryuna 2:40101fcb6d44 15 {
ryuna 0:fd5c1ea78a7c 16 }
ryuna 0:fd5c1ea78a7c 17
ryuna 0:fd5c1ea78a7c 18 void IRM2121::_Start(void)
ryuna 0:fd5c1ea78a7c 19 {
ryuna 2:40101fcb6d44 20 if(_Valid && _Busy ){
ryuna 2:40101fcb6d44 21 _timer.start();
ryuna 2:40101fcb6d44 22 _Time = _timer.read_us();
ryuna 2:40101fcb6d44 23 _Valid = false;
ryuna 2:40101fcb6d44 24 _Busy = true;
ryuna 2:40101fcb6d44 25 _event.fall_disable(this,&IRM2121::_Start);
ryuna 2:40101fcb6d44 26 _event.rise(this,&IRM2121::_Stop);
ryuna 2:40101fcb6d44 27 }
ryuna 0:fd5c1ea78a7c 28 }
ryuna 0:fd5c1ea78a7c 29
ryuna 0:fd5c1ea78a7c 30 void IRM2121::_Stop(void)
ryuna 0:fd5c1ea78a7c 31 {
ryuna 2:40101fcb6d44 32 if(!_Valid && _Busy){
ryuna 0:fd5c1ea78a7c 33 _Valid = true; // When it stops, update the time
ryuna 0:fd5c1ea78a7c 34 _Busy = false;
ryuna 0:fd5c1ea78a7c 35 _Time = _timer.read_us()-_Time;
ryuna 1:b25c8ac20d5b 36 _event.rise_disable(this,&IRM2121::_Stop);
ryuna 1:b25c8ac20d5b 37 }
ryuna 0:fd5c1ea78a7c 38 }
ryuna 0:fd5c1ea78a7c 39
ryuna 2:40101fcb6d44 40 void IRM2121::Set(void)
ryuna 0:fd5c1ea78a7c 41 {
ryuna 2:40101fcb6d44 42 _Valid = true;
ryuna 2:40101fcb6d44 43 _Busy = true;
ryuna 2:40101fcb6d44 44 _event.fall(this,&IRM2121::_Start );
ryuna 2:40101fcb6d44 45
ryuna 2:40101fcb6d44 46
ryuna 2:40101fcb6d44 47
ryuna 0:fd5c1ea78a7c 48 }
ryuna 0:fd5c1ea78a7c 49
ryuna 2:40101fcb6d44 50 int IRM2121::Read(void)
ryuna 2:40101fcb6d44 51 // 0 means not valid.
ryuna 0:fd5c1ea78a7c 52 {
ryuna 2:40101fcb6d44 53 if(_Valid && !_Busy){
ryuna 2:40101fcb6d44 54 return _Time;
ryuna 2:40101fcb6d44 55
ryuna 2:40101fcb6d44 56 }else {
ryuna 1:b25c8ac20d5b 57 _event.fall_disable(this,&IRM2121::_Start);
ryuna 1:b25c8ac20d5b 58 _event.rise_disable(this,&IRM2121::_Stop);
ryuna 2:40101fcb6d44 59 return 0;
ryuna 1:b25c8ac20d5b 60 }
ryuna 1:b25c8ac20d5b 61 }
ryuna 2:40101fcb6d44 62
ryuna 2:40101fcb6d44 63
ryuna 2:40101fcb6d44 64 void IRM2121::ReturnVB(bool *valid, bool *busy){
ryuna 2:40101fcb6d44 65 //use after read_function. this is flag checker.
ryuna 2:40101fcb6d44 66 *valid = _Valid;
ryuna 2:40101fcb6d44 67 *busy = _Busy;
ryuna 2:40101fcb6d44 68
ryuna 2:40101fcb6d44 69 }