ja-jp_commands:reference:ictu
Ictu()
Ictu()は入力の立ち上がり回数を数え、設定値に達するとtrueを返します。
bool Ictu(uint8_t counter_id, bool CU, bool RESET, int32_t PV)
コマンド
| コマンド | 引数 | 戻り値 | 動作 |
|---|---|---|---|
Ictu(counter_id, CU, RESET, PV) | uint8_t counter_id — カウンタを区別する番号。同じ計数処理には同じ番号を使用bool CU — 計数入力。LOWからHIGHに変化すると1増加bool RESET — trueの場合、現在のカウント値を0にリセットint32_t PV — 目標個数。現在値がこの値以上になるとtrueを返す | bool | 入力の立ち上がり回数を数え、設定値に達するとtrueを返します。 |
初めて使う方への説明
Ictu()は、センサがONになっている時間を測るコマンドではありません。センサがLOWからHIGHに変化した回数を数えます。例えば、品物がセンサの前を1回通過すると入力はLOW → HIGH → LOWと変化し、カウンタは1増えます。センサがHIGHのままでも、複数回は数えません。
呼び出し形式Ictu(counter_id, CU, RESET, PV)は、次のように読みます。
counter_id: 複数のカウンタを区別する番号です。同じ計数処理には常に同じ番号を使用します。CU: 計数入力です。LOW → HIGHに変化した瞬間、現在値が1増えます。RESET:trueの場合、現在値を0にクリアします。RESET中はCUがONになっても数えません。PV: 目標個数です。現在値がこの値以上になると、戻り値がtrueになります。
入力変化を検出できるように、loop()から繰り返し呼び出します。下の例では入力0のセンサで品物を5個数え、目標に達するとボードのステータスLEDを点灯します。入力1のリセットボタンを押すと、0個から数え直します。
使用例
const uint8_t COUNTER_ID = 0; const uint8_t ITEM_SENSOR_PIN = 0; const uint8_t RESET_BUTTON_PIN = 1; const uint8_t FULL_LAMP_PIN = LED_BUILTIN; const int32_t BOX_CAPACITY = 5; void setup() { Serial.begin(115200); } void loop() { const bool itemSensor = digitalRead(ITEM_SENSOR_PIN) == HIGH; const bool resetButton = digitalRead(RESET_BUTTON_PIN) == HIGH; const bool boxFull = Ictu(COUNTER_ID, itemSensor, resetButton, BOX_CAPACITY); // 入力の立ち上がり回数を数え、設定値に達するとtrueを返します。 digitalWrite(FULL_LAMP_PIN, boxFull ? HIGH : LOW); static bool previousBoxFull = false; if (boxFull && !previousBoxFull) { Serial.println(F("5 items counted: box is full")); } previousBoxFull = boxFull; }
注意事項
CUはLOW → HIGHの変化だけを数えます。信号がHIGHのままなら、1回だけ増加します。RESETがtrueの呼び出しでは現在値を0にクリアし、同じ呼び出しのCUは数えません。PVは1以上の目標個数に設定してください。PVが0以下の場合、初期値0の時点で目標に達したと判断されます。- センサパルスが
loop()の実行より速い場合、変化を取りこぼすことがあります。高速パルスには製品の高速カウンタ機能を使用してください。 - 異なる計数処理には異なる
counter_idを使用し、同じ番号をCTU・CTD・CTUDで共用しないでください。 - 現在のカウント値が必要な場合だけ、同じ
counter_idでIgetCount()を使用してください。
同じカテゴリの内蔵コマンド
ja-jp_commands/reference/ictu.txt · 最終更新: by 127.0.0.1
