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

Dependents:   BallCheck_IRM2121_InterrputInAdd CatPot_SensorRight

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

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

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

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

Revision:
0:fd5c1ea78a7c
Child:
1:b25c8ac20d5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IRM2121.cpp	Sun Nov 09 11:11:37 2014 +0000
@@ -0,0 +1,53 @@
+/* mbed Ping Library
+ *
+ *
+ */
+
+
+#include "IRM2121.h"
+#include "mbed.h"
+
+IRM2121::IRM2121(PinName IRM_PIN)
+        : _event(IRM_PIN)
+        , _timer()
+        {
+            _event.rise(this,&IRM2121::_Stop );
+            _event.fall(this,&IRM2121::_Start );
+            _event.disable_irq();
+            _Flag = false;
+        } 
+        
+void IRM2121::_Start(void)
+{
+      _Flag  = true;
+      _Valid = false;  // start the timere, and invalidate the current time.
+      _Busy  = true;
+      _timer.start();
+      _Time  = _timer.read_us();      
+}
+
+void IRM2121::_Stop(void)
+{
+      if(_Flag == true){
+        _Flag  = false;
+        _Valid = true;  // When it stops, update the time
+        _Busy  = false;
+        _Time  = _timer.read_us()-_Time;
+        _event.disable_irq();
+      }
+}
+
+void IRM2121::Set()
+{
+     _event.enable_irq();
+     
+}
+
+int IRM2121::Read()
+// -1 means not valid.
+{
+    if(_Valid && ~_Busy) 
+        return (_Time);
+    else 
+        return -1;
+}
\ No newline at end of file