クラス Counter -- パルスカウンター
Counter は入力信号を監視し、立ち上がりまたは立ち下がりエッジをカウントすることでパルスカウントを実現します。
最小限の使用例:
from machine import Pin, Counter
counter = Counter(0, Pin(0, Pin.IN)) # ピン0の Counter を作成し、カウントを開始
value = counter.value() # 現在のパルスカウント値を取得
対応ポート: ESP32
コンストラクタ
メソッド
- Counter.init(src, *, ...)
指定したパラメータで Counter を初期化し、リセットします。
src には入力ピンを machine.Pin オブジェクトとして指定します。特定のハードウェアブロックに固定されたピンがあるポートでは省略できます。
ポートでサポートされている可能性がある追加のキーワード指定のみのパラメータは次のとおりです:
edge にはカウントするエッジを指定します。
Counter.RISING(デフォルト)とCounter.FALLINGのいずれかを指定します。 (ESP32 でサポート)direction にはカウント方向を指定します。
Counter.UP(デフォルト)とCounter.DOWNのいずれかを指定します。 (ESP32 でサポート)filter_ns には、パルスをカウントするために入力信号が安定していなければならない最小時間をナノ秒単位で指定します。実装では、この値以下でハードウェアがサポートする最長のフィルター時間を使います。デフォルトは 0 (フィルターなし)。 (ESP32 でサポート)
- Counter.deinit()
Counter を停止し、割り込みを無効化してハードウェアリソースを解放します。ソフトリセットを行うと、すべての Counter オブジェクトを初期化解除します。
- Counter.value([value])
カウンター値を符号付き整数として取得し、必要に応じて設定します。実装では、取得と設定をアトミックに(つまりカウントを取りこぼさずに)行うことが求められます。
このカウンター値は 小整数 の範囲を超える可能性があり、その場合
Counter.value()の呼出しによってヒープ領域の確保が発生することがあります。ただし、実装では内部状態に小整数のみを使うようにし、ユーザーがCounter.value()を呼び出すまではメモリ確保が発生しないようにするべきです。たとえば ESP32 では、内部状態としてハードウェアカウンターのオーバーフロー回数(32000 カウントごと)を記録しているため、
2**30 * 32000カウント(1MHz で約1年強)に達するまでは小整数の範囲を超えません。一般的には
Counter.value(0)を使ってカウンターをリセットし(つまり前回呼び出し以降のカウント数を測定)、この問題を回避することを推奨します。