pulseInLong

説明

指定したピンのパルスの長さ(時間)を取得する pulseIn()の代替え関数として新しく用意された関数です。

パルスとは、ピンの状態がLOWからHIGHになりまたLOWに戻るまでの信号のうごき、または、HIGHからLOWになりまたHIGHに戻るまでの信号のうごきを示します。

この関数は便利なのですが、プログラム領域を圧迫し、プログラムの動きを停止する動きになるため、使用には注意が必要です。

使用するピンはあらかじめpinMode関数でINPUTに設定しておきます。

pulseInとpulseInLongの違い・比較

pulseInは返されるパルス幅の時間(マイクロ秒)を取得するため、内部ではプログラムループで命令のクロック数から時間換算している処理でしたが、pulseInLongではmicros() を使って時間測定をしています。
プログラム内で割り込みを停止する処理 noInterrupts関数を使用している場合、正しく動作しません

構文

pulseInLong(pin, value)
pulseInLong(pin, value, timeout)

pin : int
value : HIGH  (LOW->HIGH->LOW)/ LOW ( HIGH->LOW->HIGH)
timeout : unsigned long タイムアウトまでの時間(マイクロ秒)
※デフォルトは1秒です。
※タイムアウト時間を設定すると処理は速くなります。

戻り値

unsigned long

パルスの長さ(時間 :マイクロ秒)
取得できなかった場合は0

プログラム例

クムクムロボットで使ってみる

弊社の二足歩行プログラミングロボットクムクムロボットには、超音波距離センサーが目の部分についていて、これを使って障害物までの距離を検知することができます。
その処理にこの関数を使用することができます。
<<距離センサーので障害物までの距離を測る>>

注意

pullseInはパルスを検知する間処理がすべて奪われてしまうため、他の動きができなくなります。
つまり、クムクムロボットの場合であれば、顔を回転させながらリアルタイムに目前の障害物検知を行うということが、この関数を使うとできなくなります。

こういった場合は、pulseInを使用せず、自分でパルス検知をするプログラムを作る必要が出てきます。

ArduinoでQumcumロボットを制御
タイトルとURLをコピーしました