const byte ButtonA_pin = 2;
const byte ButtonB_pin = 3;
const byte ButtonC_pin = 4;
const byte ButtonD_pin = 5;
const byte RelayF_pin = 6; //Forward A
const byte RelayR_pin = 7; //Reverse A
const byte RelayF2_pin = 8; //Forward B
const byte RelayR2_pin = 9; //Reverse B
unsigned long start_time, time_now, timeout;
// delay_time set to 3 seconds for testing
// change as needed
unsigned long delay_time = 3000L;
unsigned long start_time2, time_now2, timeout2;
unsigned long delay_time2 = 3000L;
void setup ()
{
Serial.begin(115200);
Serial.println("\nhi Mom!\n");
pinMode (RelayF_pin, OUTPUT);
pinMode (RelayR_pin, OUTPUT);
digitalWrite (RelayF_pin, LOW); // Assumes a HIGH triggered relay
digitalWrite (RelayR_pin, LOW);
pinMode (RelayF2_pin, OUTPUT);
pinMode (RelayR2_pin, OUTPUT);
digitalWrite (RelayF2_pin, LOW); // Assumes a HIGH triggered relay
digitalWrite (RelayR2_pin, LOW);
pinMode (ButtonC_pin, INPUT_PULLUP);
pinMode (ButtonD_pin, INPUT_PULLUP);
pinMode (ButtonA_pin, INPUT_PULLUP);
pinMode (ButtonB_pin, INPUT_PULLUP);
}
void loop ()
{
static bool lastA;
bool thisA = digitalRead (ButtonA_pin) == LOW;
bool startAForward = false;
if (lastA != thisA)
{
if (thisA) {
// Stop the actuator
Serial.println(" A STOP");
digitalWrite (RelayF_pin, LOW);
digitalWrite (RelayR_pin, LOW);
startAForward = true;
}
lastA = thisA;
Serial.println("A delay with any transition.");
delay(100);
}
if (startAForward) {
// Start the actuator forward
Serial.println(" A FORWARD");
digitalWrite (RelayF_pin, HIGH);
start_time = millis();
startAForward = false;
}
static bool lastB;
bool thisB = digitalRead (ButtonB_pin) == LOW;
bool startBReverse = false;
if (lastB != thisB)
{
if (thisB) {
// Stop the actuator
Serial.println(" B STOP");
digitalWrite (RelayF_pin, LOW);
digitalWrite (RelayR_pin, LOW);
startBReverse = true;
}
lastB = thisB;
Serial.println("B delay with any transition.");
delay(100);
}
if (startBReverse) {
// Start the actuator forward
Serial.println(" B REVERSE");
digitalWrite (RelayR_pin, HIGH);
start_time = millis();
startBReverse = false;
}
time_now = millis();
if (time_now - start_time > delay_time)
{
// Stop the actuator after delay_time. Once
if (digitalRead(RelayF_pin) == HIGH || digitalRead(RelayR_pin) == HIGH)
{
Serial.println(" AB timeout STOP");
digitalWrite (RelayF_pin, LOW);
digitalWrite (RelayR_pin, LOW);
}
}
if (digitalRead (ButtonC_pin) == LOW)
{
// Stop the actuator
digitalWrite (RelayF2_pin, LOW);
digitalWrite (RelayR2_pin, LOW);
delay(100); // Wait for it to stop
// Start the actuator forward
digitalWrite (RelayF2_pin, HIGH);
start_time2 = millis();
}
if (digitalRead (ButtonD_pin) == LOW)
{
// Stop the actuator
digitalWrite (RelayF2_pin, LOW);
digitalWrite (RelayR2_pin, LOW);
delay(100);
// Start the actuator reverse
digitalWrite (RelayR2_pin, HIGH);
start_time2 = millis();
}
time_now2 = millis();
// Check if millis rolled over
if (start_time2 > time_now2) start_time2 = millis();
timeout2 = time_now2 - start_time2;
if ( timeout2 > delay_time2)
{
// Stop the actuator after delay_time
digitalWrite (RelayF2_pin, LOW);
digitalWrite (RelayR2_pin, LOW);
}
}