// 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;
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
LIMIT
RELAY