ロボカップジュニアサッカー 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 0:fd5c1ea78a7c 1
ryuna 0:fd5c1ea78a7c 2
ryuna 0:fd5c1ea78a7c 3 #ifndef MBED_IRM_H
ryuna 0:fd5c1ea78a7c 4 #define MBED_IRM_H
ryuna 0:fd5c1ea78a7c 5
ryuna 0:fd5c1ea78a7c 6 #include "mbed.h"
ryuna 1:b25c8ac20d5b 7 #include "interruptin_mod.h"
ryuna 0:fd5c1ea78a7c 8 /** IRM2121 class, based on an InterruptIn pin, and a timer
ryuna 0:fd5c1ea78a7c 9 * use RoboCup Junior Soccer to find PULSE BALL.
ryuna 0:fd5c1ea78a7c 10
ryuna 0:fd5c1ea78a7c 11
ryuna 0:fd5c1ea78a7c 12 * Example:
ryuna 0:fd5c1ea78a7c 13 * @code
ryuna 0:fd5c1ea78a7c 14 * // Set interrupt and read sensor.
ryuna 0:fd5c1ea78a7c 15 * #include "mbed.h"
ryuna 0:fd5c1ea78a7c 16 * #include "IRM2121.h"
ryuna 0:fd5c1ea78a7c 17 * IRM2121 IR(p21);
ryuna 0:fd5c1ea78a7c 18 *
ryuna 0:fd5c1ea78a7c 19 * int main() {
ryuna 2:40101fcb6d44 20 * int length;
ryuna 0:fd5c1ea78a7c 21
ryuna 0:fd5c1ea78a7c 22 * while(1) {
ryuna 0:fd5c1ea78a7c 23 *
ryuna 1:b25c8ac20d5b 24 * IR.Set();
ryuna 2:40101fcb6d44 25 * wait_ms(20); //check _Busy 1 &_Valid 0 ....config just wait time.
ryuna 2:40101fcb6d44 26 * length = IR.Read();
ryuna 0:fd5c1ea78a7c 27 * }
ryuna 0:fd5c1ea78a7c 28 * }
ryuna 0:fd5c1ea78a7c 29 * @endcode
ryuna 0:fd5c1ea78a7c 30 */
ryuna 0:fd5c1ea78a7c 31 class IRM2121 {
ryuna 0:fd5c1ea78a7c 32 public:
ryuna 0:fd5c1ea78a7c 33 /** Create a IRM2121 object connected to the specified InterruptIn pin
ryuna 0:fd5c1ea78a7c 34 *
ryuna 0:fd5c1ea78a7c 35 * @param IRM_PIN InterruptIn pin to connect to
ryuna 0:fd5c1ea78a7c 36 */
ryuna 0:fd5c1ea78a7c 37 IRM2121(PinName IRM_PIN);
ryuna 0:fd5c1ea78a7c 38
ryuna 2:40101fcb6d44 39
ryuna 0:fd5c1ea78a7c 40 /** Set a IRM2121 Interrupt Pin
ryuna 0:fd5c1ea78a7c 41 *
ryuna 0:fd5c1ea78a7c 42 * @param none
ryuna 0:fd5c1ea78a7c 43 */
ryuna 0:fd5c1ea78a7c 44 void Set(void);
ryuna 2:40101fcb6d44 45
ryuna 0:fd5c1ea78a7c 46 /** Read the result
ryuna 0:fd5c1ea78a7c 47 *
ryuna 0:fd5c1ea78a7c 48 * @param none
ryuna 0:fd5c1ea78a7c 49 */
ryuna 0:fd5c1ea78a7c 50 int Read(void);
ryuna 0:fd5c1ea78a7c 51
ryuna 2:40101fcb6d44 52 /**
ryuna 2:40101fcb6d44 53 * Check two flags( _Valid, _Busy )
ryuna 2:40101fcb6d44 54 *
ryuna 2:40101fcb6d44 55 * @param none
ryuna 2:40101fcb6d44 56 */
ryuna 2:40101fcb6d44 57 void ReturnVB(bool *valid, bool *busy);
ryuna 2:40101fcb6d44 58
ryuna 2:40101fcb6d44 59
ryuna 0:fd5c1ea78a7c 60 protected:
ryuna 0:fd5c1ea78a7c 61
ryuna 1:b25c8ac20d5b 62 interruptin_mod _event;
ryuna 1:b25c8ac20d5b 63 Timer _timer;
ryuna 0:fd5c1ea78a7c 64
ryuna 0:fd5c1ea78a7c 65 bool _Flag;
ryuna 0:fd5c1ea78a7c 66 bool _Valid;
ryuna 0:fd5c1ea78a7c 67 bool _Busy;
ryuna 2:40101fcb6d44 68 unsigned int _Time;
ryuna 0:fd5c1ea78a7c 69
ryuna 0:fd5c1ea78a7c 70 void _Start(void);
ryuna 0:fd5c1ea78a7c 71 void _Stop (void);
ryuna 0:fd5c1ea78a7c 72
ryuna 0:fd5c1ea78a7c 73 };
ryuna 0:fd5c1ea78a7c 74
ryuna 0:fd5c1ea78a7c 75 #endif