ロボカップジュニアサッカー 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 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 0:fd5c1ea78a7c 20 * int range;
ryuna 0:fd5c1ea78a7c 21
ryuna 0:fd5c1ea78a7c 22 * while(1) {
ryuna 0:fd5c1ea78a7c 23 *
ryuna 1:b25c8ac20d5b 24 * IR.Set();
ryuna 0:fd5c1ea78a7c 25 * wait_ms(10);
ryuna 0:fd5c1ea78a7c 26 * range = 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 0:fd5c1ea78a7c 39 /** Set a IRM2121 Interrupt Pin
ryuna 0:fd5c1ea78a7c 40 *
ryuna 0:fd5c1ea78a7c 41 * @param none
ryuna 0:fd5c1ea78a7c 42 */
ryuna 0:fd5c1ea78a7c 43 void Set(void);
ryuna 0:fd5c1ea78a7c 44 /** Read the result
ryuna 0:fd5c1ea78a7c 45 *
ryuna 0:fd5c1ea78a7c 46 * @param none
ryuna 0:fd5c1ea78a7c 47 */
ryuna 0:fd5c1ea78a7c 48
ryuna 0:fd5c1ea78a7c 49 int Read(void);
ryuna 0:fd5c1ea78a7c 50
ryuna 0:fd5c1ea78a7c 51 protected:
ryuna 0:fd5c1ea78a7c 52
ryuna 1:b25c8ac20d5b 53 interruptin_mod _event;
ryuna 1:b25c8ac20d5b 54 Timer _timer;
ryuna 0:fd5c1ea78a7c 55
ryuna 0:fd5c1ea78a7c 56 bool _Flag;
ryuna 0:fd5c1ea78a7c 57 bool _Valid;
ryuna 0:fd5c1ea78a7c 58 bool _Busy;
ryuna 0:fd5c1ea78a7c 59 int _Time;
ryuna 0:fd5c1ea78a7c 60
ryuna 0:fd5c1ea78a7c 61 void _Start(void);
ryuna 0:fd5c1ea78a7c 62 void _Stop (void);
ryuna 0:fd5c1ea78a7c 63
ryuna 0:fd5c1ea78a7c 64 };
ryuna 0:fd5c1ea78a7c 65
ryuna 0:fd5c1ea78a7c 66 #endif