#define POT_1 A2
#define FORWARD_BUTTON 2
#define REVERSE_BUTTON 3
#define DIR_RELAY 6
#define POWER_RELAY_1 7
#define FORWARD_LED 5
#define REVERSE_LED 4
int max_time=20000;
unsigned long lastButtonPressTime = 0;
unsigned long actionDuration ; // 1 second duration for relay activation
bool relay1Pressed = false;
bool relay2Pressed = false;
void setup() {
pinMode(POT_1, INPUT);
pinMode(FORWARD_BUTTON, INPUT_PULLUP);
pinMode(REVERSE_BUTTON, INPUT_PULLUP);
pinMode(DIR_RELAY, OUTPUT);
pinMode(POWER_RELAY_1, OUTPUT);
pinMode(FORWARD_LED, OUTPUT);
pinMode(REVERSE_LED, OUTPUT);
}
void loop() {
int timer_1=analogRead(POT_1);
actionDuration = map(timer_1, 0,255, 0,max_time);
unsigned long currentTime = millis();
bool FORWARD_STATE = digitalRead(FORWARD_BUTTON);
bool REVERSE_STATE = digitalRead(REVERSE_BUTTON);
if ((FORWARD_STATE == LOW) ) {
digitalWrite(DIR_RELAY, HIGH);
digitalWrite(POWER_RELAY_1, HIGH);
digitalWrite(FORWARD_LED, HIGH);
digitalWrite(REVERSE_LED, LOW);
relay1Pressed = true;
lastButtonPressTime = currentTime;
}
if ((REVERSE_STATE == LOW) ) {
digitalWrite(DIR_RELAY, LOW);
digitalWrite(POWER_RELAY_1, HIGH);
digitalWrite(FORWARD_LED, LOW);
digitalWrite(REVERSE_LED, HIGH);
relay2Pressed = true;
lastButtonPressTime = currentTime;
}
// Turn off relays after action duration
if ((relay1Pressed) && (currentTime - lastButtonPressTime >= actionDuration)) {
digitalWrite(POWER_RELAY_1, LOW);
digitalWrite(FORWARD_LED, LOW);
relay1Pressed = false;
digitalWrite(DIR_RELAY, LOW);
}
if ((relay2Pressed) && (currentTime - lastButtonPressTime >= actionDuration)) {
digitalWrite(POWER_RELAY_1, LOW);
digitalWrite(REVERSE_LED, LOW);
relay2Pressed = false;
}
}