pulseInLong()

名称

pulseInLong()

説明

pulsInLong()は、pulseIn()の代替であり、長いパルスで割り込みが有効なシナリオを扱う際に効果がある。

ピンからパルス(HIGHもしくはLOW)を読み取る。たとえば、valueがHIGHのとき、pulseInLong()は、ピンがLOWからHIGHになるのを待ち、時間計測を開始する。その後、ピンがLOWになるのを待ち、時間計測を終了する。パルスが入力されていた時間をマイクロ秒単位で返却する。指定したタイムアウト時間内にパルスが開始されないとタイムアウトし、0を返却する。

この関数のタイミングは経験的に決められているので、短いパルスに対してはエラーとなる。パルスの長さが10マイクロ秒から3分の間で動作する。このルーチンは割り込みが有効であるときにだけ利用できる。また、長いインターバルの際に、最もいい結果(resolution)が得られる。

書式

unsigned long pulseInLong(uint8_t pin, uint8_t state);

unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);

引数

pinパルスを読み取りたいピン番号。
state読みだすパルスの型。HIGHもしくはLOW。
timeoutパルスが完了するまでのタイムアウト時間(マイクロ秒)。デフォルトは1秒。

戻り値

パルスが発生していた時間(マイクロ秒)。タイムアウトが発生した時は0。

使用例

以下の例では、7番ピンのパルスの時間を表示する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseInLong(pin, HIGH);
  Serial.println(duration);
}

注意

micros()を利用しているので、noInterrupts()のコンテキスト内では利用できない。

参照

オリジナルのページ

https://www.arduino.cc/reference/en/language/functions/advanced-io/pulseinlong/

Last Revision: 2019/07/03

実装の解析

まだ解析していません。

最終更新日

January 4, 2024

inserted by FC2 system