ユーザ用ツール

サイト用ツール


ja-jp_commands:reference:iton

文書の過去の版を表示しています。


Iton()

Iton()は(On Delay Timer)条件が一定時間ONになって初めてtrueを返します。

Iton コマンドの動作フロー

bool Iton(uint8_t timer_id, bool state, unsigned long delayTime)

コマンド

コマンド 引数 戻り値 動作
Iton(timer_id, state, delayTime) uint8_t timer_id — タイマ番号。0 ~ 255の範囲で使用可能
bool state — タイマ入力状態
unsigned long delayTime — 設定時間。単位はms
bool (On Delay Timer)条件が一定時間ONになって初めてtrueを返します。

使用例

const uint8_t START_INPUT = 0;
const uint8_t RESET_INPUT = 1;
const uint8_t RUN_OUTPUT = 32;
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  const bool start = IdigitalRead(START_INPUT, 5);  // 入力を連続して複数回読み、すべて一致した場合のみ状態を更新します。HIGHとLOWが混在する場合は前の安定状態を保持します。
  const bool reset = IdigitalRead(RESET_INPUT, 5);  // 入力を連続して複数回読み、すべて一致した場合のみ状態を更新します。HIGHとLOWが混在する場合は前の安定状態を保持します。
  const bool ready = Iton(0, start, 1000);  // (On Delay Timer)条件が一定時間ONを維持するとtrueを返します。
  const bool stopDelay = Itof(1, ready, 500);  // (Off Delay Timer)条件がOFFになってから一定時間後にfalseを返します。
  const bool startPulse = Itpl(2, ready, 200);  // (Pulse Timer)条件がONになった瞬間から設定時間だけtrueを返します。
  const bool inspectionWindow = Itmon(3, startPulse, 3000);  // (Monostable Timer)動作中に再入力されても時間が延長されないパルスを出力します。
  const bool batchDone = Itmr(4, ready, 10000, reset);  // (Retentive Timer)条件がONの時間を累積し、Reset入力で初期化します。
  const unsigned long elapsed = IgetTime(4);  // 指定タイマの現在の経過時間を返します。
  const bool savedDone = IgetState(4);  // 指定タイマの現在の出力状態を返します。
 
  digitalWrite(RUN_OUTPUT, stopDelay && !batchDone ? HIGH : LOW);
  if (inspectionWindow && elapsed % 1000 < 20) {
    Serial.println(savedDone ? F("batch complete") : F("batch running"));
  }
}

注意事項

  • タイマ割り込みコールバックはISR内で実行されます。コールバックではフラグだけを変更し、実際の制御処理をloop()で行うのが安全です。
  • コールバック内でdelay()Serial、I2C、SPIなど時間がかかる処理や割り込みに依存するコードを使用しません。
  • Modbus RTUは通常loop()ImodbusRTU()を繰り返し呼び出します。長いdelay()やデバッグ出力でloop()が遅くなる場合だけ、十分な周期のタイマ割り込みからImodbusRTU()を呼び出します。
  • Timer2を使うtone()、またはTimer2 PWMピンのanalogWrite()と、既定のItimerSet()は同時使用しません。
  • Timer1、Timer3、Timer4、Timer5を明示的に使用すると、同じタイマを使うPWM、アナログ出力、高速カウンタ機能と競合する場合があります。
  • 1つのハードウェアタイマにはItimerコールバックを1つだけ設定します。
  • スケッチで同じタイマのISRを直接定義すると、Itimerの動作と競合する場合があります。
  • ItimerStopAll()はハードウェア割り込みタイマだけを停止します。ItonItofItmrなどのPLCスタイルタイマの状態は初期化しません。

← 内蔵コマンド一覧

ja-jp_commands/reference/iton.1788791739.txt.gz · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki