// https://wokwi.com/projects/426956162079958017
// https://forum.arduino.cc/t/programming-limit-switch/1368203
const int relay = 10;
const int limitSwitch = 8;
int currentStep;
unsigned long prevSwitchTime1 = 0;
unsigned long prevSwitchTime2 = 0;
const long switchInterval1 = 3333;
const long switchInterval2 = 4444;
// switch wiring:
# define PRESST LOW
// relay module sense:
# define RUN HIGH
# define STOP LOW
void setup() {
Serial.begin(115200); // 21st century be here
Serial.println("\none at a time!\n");
pinMode(relay, OUTPUT);
pinMode(limitSwitch, INPUT_PULLUP);
digitalWrite(relay, STOP);
currentStep = 0; // yes, it does already. sue me.
}
void loop() {
switch (currentStep) {
case 0:
if (digitalRead(limitSwitch) == PRESST) {
Serial.println(" because you hit the limit");
digitalWrite(relay, RUN);
prevSwitchTime1 = millis();
prevSwitchTime2 = millis();
currentStep = 1;
}
break;
case 1:
if (millis() - prevSwitchTime1 >= switchInterval1) {
Serial.println(" because interval 1 is elapsed");
digitalWrite(relay, STOP);
prevSwitchTime1 = millis();
prevSwitchTime2 = millis();
currentStep = 2;
}
break;
case 2:
if (millis() - prevSwitchTime2 >= switchInterval2) {
Serial.println(" because interval 2 is elapsed");
digitalWrite(relay, RUN);
prevSwitchTime1 = millis();
prevSwitchTime2 = millis();
currentStep = 3;
}
break;
case 3:
if (millis() - prevSwitchTime1 >= switchInterval1) {
Serial.println(" because interval 1 is elapsed again...");
digitalWrite(relay, STOP);
prevSwitchTime1 = millis();
prevSwitchTime2 = millis();
currentStep = 0;
}
break;
}
}
LIMIT
RELAY