delayedpulseduration

Generates a pulse with a duration after a delay after a rising edge on trigger input. A new trigger before the pulse arrives at the output, will cancel the previous trigger. Extended range.
Author: Johannes Taelman
License: BSD
Github: timer/delayedpulseduration.axo

Inlets

bool32.rising trigger

Outlets

bool32 pulse output

Parameters

frac32.s.map.klineartime.exp delay

frac32.s.map.klineartime.exp pulselength

Declaration
int32_t val;
int ntrig;
Init
val = 0;
ntrig = 0;
Control Rate
if ((inlet_trig > 0) && !ntrig) {
  val = 1 << 30;
  ntrig = 1;
  outlet_pulse = 0;
} else {
  if (!(inlet_trig > 0))
    ntrig = 0;
  if (val > 0) {
    int32_t t;
    MTOF(-param_delay, t);
    val -= t >> 3;
    if (val <= 0) {
      outlet_pulse = 1;
      val = -1 << 30;
    } else
      outlet_pulse = 0;
  } else if (val < 0) {
    int32_t t;
    MTOF(-param_pulselength, t);
    val += t >> 3;
    if (val >= 0) {
      outlet_pulse = 0;
      val = 0;
    } else
      outlet_pulse = 1;
  } else
    outlet_pulse = 0;
}

Privacy

© 2024 Zrna Research