changed up the format a bit:
void loop() {
unsigned long currentTime = millis();
boolean buttonIsPressed = digitalRead(SW) == LOW; // Active LOW
// Check for button state change debounce.
if (buttonIsPressed != ButtonWasPressed &&
currentTime - ButtonStateChangeTime > Debounce) {
// Button state has changed.
ButtonWasPressed = buttonIsPressed;
if (ButtonWasPressed) {
Serial.println("Press");
digitalWrite(LED, HIGH);
digitalWrite(RELAYP, HIGH);
delay(1);
digitalWrite(RELAYP, LOW);
} else {
//released before 500ms has passed:
if (currentTime - ButtonStateChangeTime < LongPress) {
Serial.println("Latch");
LEDState = ! LEDState;
RelayNstate = ! RelayNstate;
delay(1);
digitalWrite(RELAYN, LOW);
digitalWrite(LED, LEDState);
digitalWrite(RELAYN, RelayNstate);
delay(1);
digitalWrite(RELAYN, LOW);
} else {
//Released after 500ms has passed:
if (currentTime - ButtonStateChangeTime > LongPress) {
Serial.println("Momentary");
digitalWrite (LED, LOW);
digitalWrite(RELAYN, HIGH);
delay(1);
digitalWrite(RELAYN, LOW);
}
}
}
//Time reset.
ButtonStateChangeTime = currentTime;
}
}//End.
But its still pulsing the relay pin + before pulsing the relay pin -.
would want it to flow like:
void loop() {
//debounce
//press which turns on the light/pulse (relay pin 10 on schematic) relay pin+ at same time
//if released LESS than 500ms (quick press), keep light on (latching on).
//if pressed again in this state, ONLY turn relaypin- on to switch relay position and turn light off while in this state (latch off).
//if released MORE than 500ms (continuous hold until released), pulse relay pin- (relay pin1 on schematic) and turn off LED.
//Time reset.
}//End.
Hopefully this explanation helps any future user that stumbles upon this post. Thank you.