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

Dependents:   BallCheck_IRM2121_InterrputInAdd CatPot_SensorRight

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

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

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

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

Committer:
ryuna
Date:
Fri Dec 05 14:51:05 2014 +0000
Revision:
1:b25c8ac20d5b
Parent:
0:fd5c1ea78a7c
Child:
2:40101fcb6d44
level up by plus library.

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 1:b25c8ac20d5b 15 {
ryuna 0:fd5c1ea78a7c 16 }
ryuna 0:fd5c1ea78a7c 17
ryuna 0:fd5c1ea78a7c 18 void IRM2121::_Start(void)
ryuna 0:fd5c1ea78a7c 19 {
ryuna 1:b25c8ac20d5b 20 _timer.start();
ryuna 1:b25c8ac20d5b 21 _Time = _timer.read_us();
ryuna 1:b25c8ac20d5b 22 _Valid = false;
ryuna 1:b25c8ac20d5b 23 _Busy = true;
ryuna 1:b25c8ac20d5b 24 _event.fall_disable(this,&IRM2121::_Start);
ryuna 1:b25c8ac20d5b 25 _event.rise(this,&IRM2121::_Stop);
ryuna 0:fd5c1ea78a7c 26 }
ryuna 0:fd5c1ea78a7c 27
ryuna 0:fd5c1ea78a7c 28 void IRM2121::_Stop(void)
ryuna 0:fd5c1ea78a7c 29 {
ryuna 1:b25c8ac20d5b 30 if(~_Valid && _Busy){
ryuna 0:fd5c1ea78a7c 31 _Valid = true; // When it stops, update the time
ryuna 0:fd5c1ea78a7c 32 _Busy = false;
ryuna 0:fd5c1ea78a7c 33 _Time = _timer.read_us()-_Time;
ryuna 1:b25c8ac20d5b 34 _event.rise_disable(this,&IRM2121::_Stop);
ryuna 1:b25c8ac20d5b 35 }
ryuna 0:fd5c1ea78a7c 36 }
ryuna 0:fd5c1ea78a7c 37
ryuna 0:fd5c1ea78a7c 38 void IRM2121::Set()
ryuna 0:fd5c1ea78a7c 39 {
ryuna 1:b25c8ac20d5b 40 _event.fall(this,&IRM2121::_Start );
ryuna 0:fd5c1ea78a7c 41 }
ryuna 0:fd5c1ea78a7c 42
ryuna 0:fd5c1ea78a7c 43 int IRM2121::Read()
ryuna 1:b25c8ac20d5b 44 // 1 means not valid.
ryuna 0:fd5c1ea78a7c 45 {
ryuna 1:b25c8ac20d5b 46 if(_Valid && ~_Busy){
ryuna 0:fd5c1ea78a7c 47 return (_Time);
ryuna 1:b25c8ac20d5b 48 }else{
ryuna 1:b25c8ac20d5b 49 _event.fall_disable(this,&IRM2121::_Start);
ryuna 1:b25c8ac20d5b 50 _event.rise_disable(this,&IRM2121::_Stop);
ryuna 1:b25c8ac20d5b 51 return 1;
ryuna 1:b25c8ac20d5b 52 }
ryuna 1:b25c8ac20d5b 53 }