Timemark.h

I am looking for a way to instantiate and control two one shot timers to operate two garage door openers. The garage door openers use a clunky latching relay and need about 100 ms to fully engage.

If someone knows how to operate Timemark.h or some other library, that would be huge!
At first I tried to work with debounce and an assortment of timers to first debouce the input pin, set the door operating pin to HIGH then start the timer to time out.

The one shot timer functions need to work independently of one another
Thanks

/**
@file MultiBlink.ino
@version 1.0

@section License
Copyright (C) 2016, Mikael Patel

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

@section Description
Demonstration of the Timemark library; handle several blinking LEDs
with different time periods.
*/

#include <Timemark.h>

Timemark trace(500);

const int led1 = 2;
Timemark blink1(500);

const int led2 = 3;
Timemark blink2(1000);

/const int led3 = 5;
Timemark blink3(1500);
/
const int mom = 7;
const int dad = 8;
void setup()
{
Serial.begin(9600);
while (!Serial);
Serial.println(F("MultiBlink: started"));

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
/pinMode(led3, OUTPUT);/
pinMode(mom, INPUT_PULLUP);
pinMode(dad, INPUT_PULLUP);

digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
/digitalWrite(led3, LOW);/

trace.start();
blink1.start();
blink2.start();
/blink3.start();/
}

void loop()
{
// Trace LED status
if (trace.expired()) {
Serial.print(millis());
Serial.print(' ');
Serial.print(digitalRead(mom));
Serial.print(' ');
Serial.println(digitalRead(dad));
//Serial.print(' ');
//Serial.println(digitalRead(led3));
}

// Blink LED 1ed
if (mom == false)
{
digitalWrite(led1, !digitalRead(led1));
(blink1.expired());

}
// Blink LED 2
if (dad == false)
{
digitalWrite (led2, !digitalRead(led2));
(blink2.expired());

}
// Blink LED 3
//if (blink3.expired())
//digitalWrite(led3, !digitalRead(led3));
}

The one shot timer functions need to work independently of one another

You don't need a library for that. How would YOU perform the task? You'd set the state of a pin, and record when you did that.

Periodically, you'd see if the pin is still set, and, if so, how long it has been set. If long enough, turn the pin off and clear the time.

The blink without delay example has all the bits needed.

Thanks PaulS,
I thought I was on the right track, but I have not been able to get the results i was after. I will use your insight and keep trying.