pulse-in-long

robertspark/components/pulse-in-long

No description
pulse-in-long
@/pulse-in-long
PORTport
Board port to read from
H/Lboolean
High (true) or Low (false) Pulse Measure
m/uboolean
Output time in MilliSeconds (true) or MicroSeconds (false)
UPDpulse
Triggers new read
pulse-in-long
TIME
DONE
PORT
H/L
m/u
UPD
DONEpulse
Fires on reading complete
TIMEnumber
The length of the pulse (in microseconds) or 0 if no pulse started before the timeout.
To use the node in your project you should have the robertspark/components library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.

C++ implementation

#pragma XOD error_raise enable

struct State {
};

{{ GENERATED_CODE }}

void evaluate(Context ctx) {
    if (!isInputDirty<input_UPD>(ctx))
        return;

    const uint8_t port = getValue<input_PORT>(ctx);
    if (!isValidDigitalPort(port)) {
        raiseError(ctx);
        return;
    }

    bool highLow = getValue<input_HU002FL>(ctx);
    uint8_t value = 0;
    if (highLow == 1)
    {
        value = 1;
    }
    else {
        value = 0;
    }

    bool mSecs = getValue<input_mU002Fu>(ctx);
    auto multi = 0.0;
    if (mSecs == 1)
    {
        multi = 0.001;
    }
    else {
        multi = 0.0;
    }

    emitValue<output_TIME>(ctx, pulseInLong(port, value) * multi);
    emitValue<output_DONE>(ctx, 1);
}