#define TOP_ULIMIT 4
#define TOP_LLIMIT 3
#define BTM_ULIMIT 6
#define BTM_LLIMIT 5
#define RELAY_PIN 7
// using the INPUT_PULLUP-mode inverts the ogic
// the pullup-resistor does what its name says
// pulling UP the IO-pin to HIGH
// The switch must be connected to GROUND
// closing the switch connects the IO-pin to GND = LOW
// in short opened switch: IO-pin sees HIGH
// closed switch: IO_pin sees LOW
const byte opened = HIGH;
const byte closed = LOW;
const unsigned long delayTime = 3000;
void setup() {
Serial.begin(9600);
digitalWrite(RELAY_PIN, LOW); // Initialize relay to off state
pinMode(RELAY_PIN, OUTPUT);
Serial.print("digitalRead(RELAY_PIN)=");
Serial.println(digitalRead(RELAY_PIN) );
pinMode(TOP_ULIMIT, INPUT_PULLUP);
pinMode(TOP_LLIMIT, INPUT_PULLUP);
pinMode(BTM_ULIMIT, INPUT_PULLUP);
pinMode(BTM_LLIMIT, INPUT_PULLUP);
}
void loop() {
int topULimit = digitalRead(TOP_ULIMIT);
int topLLimit = digitalRead(TOP_LLIMIT);
int btmULimit = digitalRead(BTM_ULIMIT);
int btmLLimit = digitalRead(BTM_LLIMIT);
Serial.println("reading in switches DONE");
Serial.print("Top Upper Limit: ");
Serial.print(topULimit);
Serial.print(", TOP Lower Limit: ");
Serial.print(topLLimit);
Serial.print(", BTM Upper Limit: ");
Serial.print(btmULimit);
Serial.print(", BTM Lower Limit: ");
Serial.println(btmLLimit);
// Auto OFF Section
if ((topULimit == closed && topLLimit == closed) || (btmULimit == opened && btmLLimit == opened)) {
digitalWrite(RELAY_PIN, LOW);
Serial.print("RELAY_PIN, LOW Relay OFF ");
Serial.print("digitalRead(RELAY_PIN)=");
Serial.println(digitalRead(RELAY_PIN) );
}
// Auto ON Section
if (topULimit == opened && topLLimit == opened && ((btmULimit == closed && btmLLimit == closed) || (btmULimit == closed && btmLLimit == opened))) {
digitalWrite(RELAY_PIN, HIGH);
Serial.print("RELAY_PIN, HIGH Relay ON ");
Serial.print("digitalRead(RELAY_PIN)=");
Serial.println(digitalRead(RELAY_PIN) );
}
Serial.print("freeze microcontroller for ");
Serial.print(delayTime / 1000) ;
Serial.println(" seconds");
Serial.println();
delay(delayTime);
Serial.println("reading in switch now");
}