User Tools

Site Tools


en-us_commands:reference:itmr

This is an old revision of the document!


Table of Contents

Itmr()

Itmr() (Retentive Timer) accumulates the time the condition is ON and clears it with the Reset input.

Itmr command operation flow

bool Itmr(uint8_t timer_id, bool state, unsigned long delayTime, bool reset = false)

Commands

Command Arguments Return Value Operation
Itmr(timer_id, state, delayTime, reset) uint8_t timer_id — Timer number. Supports 0 ~ 255
bool state — Timer input state
unsigned long delayTime — Preset time in ms
bool reset = false — Clear the Itmr accumulated value
bool (Retentive Timer) accumulates the time the condition is ON and clears it with the Reset input.

Example

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);  // Read the input repeatedly and update only if all samples match. If HIGH and LOW are mixed, retain the previous stable state.
  const bool reset = IdigitalRead(RESET_INPUT, 5);  // Read the input repeatedly and update only if all samples match. If HIGH and LOW are mixed, retain the previous stable state.
  const bool ready = Iton(0, start, 1000);  // (On Delay Timer) Return true only after the condition remains ON for the set time.
  const bool stopDelay = Itof(1, ready, 500);  // (Off Delay Timer) Return false after a set delay following the condition turning OFF.
  const bool startPulse = Itpl(2, ready, 200);  // (Pulse Timer) Return true for the set duration from the instant the condition turns ON.
  const bool inspectionWindow = Itmon(3, startPulse, 3000);  // (Monostable Timer) Output a pulse whose duration is not extended by another trigger while running.
  const bool batchDone = Itmr(4, ready, 10000, reset);  // (Retentive Timer) Accumulate the time the condition is ON; clear it with the Reset input.
  const unsigned long elapsed = IgetTime(4);  // Return the specified timer's current elapsed time.
  const bool savedDone = IgetState(4);  // Return the specified timer's current output state.
 
  digitalWrite(RUN_OUTPUT, stopDelay && !batchDone ? HIGH : LOW);
  if (inspectionWindow && elapsed % 1000 < 20) {
    Serial.println(savedDone ? F("batch complete") : F("batch running"));
  }
}

Precautions

  • Timer interrupt callbacks run inside an ISR. For safety, change only flags in the callback and perform actual control processing in loop().
  • Do not use slow or interrupt-dependent code such as delay(), Serial, I2C or SPI in callbacks.
  • Normally, call ImodbusRTU() repeatedly in loop(). Call it from a timer interrupt with a sufficient interval only when long delay() calls or debug output slow down loop().
  • Do not use the default ItimerSet() together with tone() using Timer2 or analogWrite() on Timer2 PWM pins.
  • Explicitly using Timer1, Timer3, Timer4 or Timer5 may conflict with PWM, analog output or high-speed counter functions using that timer.
  • Configure only one Itimer callback per hardware timer.
  • Defining an ISR for the same timer directly in the sketch may conflict with Itimer operation.
  • ItimerStopAll() stops only hardware interrupt timers. It does not reset PLC-style timer states such as Iton, Itof or Itmr.

← Built-in Command List

en-us_commands/reference/itmr.1788791735.txt.gz · Last modified: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki