// Relay Code
// Convert Led Version
#define ForLed 7
#define RevLed 6
#define LimitBtn 9
#define StartBtn 3
byte lastLimitBtnState = HIGH; // Default to HIGH because of INPUT_PULLUP
byte lastStartBtnState = HIGH; // Default to HIGH because of INPUT_PULLUP
byte ledState = LOW;
byte conveyorRunning = LOW;
unsigned long debounceDuration = 50; // millis
unsigned long lastTimeLimitBtnStateChanged = 0;
unsigned long lastTimeStartBtnStateChanged = 0;
int counter = 0;
void setup() {
pinMode(ForLed, OUTPUT);
pinMode(RevLed, OUTPUT);
pinMode(LimitBtn, INPUT_PULLUP); // Set LimitBtn to use the internal pull-up resistor
pinMode(StartBtn, INPUT_PULLUP); // Set StartBtn to use the internal pull-up resistor
digitalWrite(ForLed, LOW); // Initial state Relay Off
digitalWrite(RevLed, LOW);
Serial.begin(9600);
}
void loop() {
// Handle Start Button
if (millis() - lastTimeStartBtnStateChanged > debounceDuration) {
byte startBtnState = digitalRead(StartBtn);
if (startBtnState != lastStartBtnState) {
lastTimeStartBtnStateChanged = millis();
lastStartBtnState = startBtnState;
if (startBtnState == HIGH) { // Button released
conveyorRunning = HIGH;
digitalWrite(ForLed, HIGH); // Onn Forward Relay
digitalWrite(RevLed, LOW); // Off Reverse Relay
delay(3000);
digitalWrite(ForLed, LOW);
Serial.println("Conveyor Started ---------- ");
}
}
}
// Handle Limit Button
if (conveyorRunning && millis() - lastTimeLimitBtnStateChanged > debounceDuration) {
byte limitBtnState = digitalRead(LimitBtn);
if (limitBtnState != lastLimitBtnState) {
lastTimeLimitBtnStateChanged = millis();
lastLimitBtnState = limitBtnState;
if (limitBtnState == HIGH) { // Button pressed
ledState = (ledState == HIGH) ? LOW : HIGH;
digitalWrite(RevLed, LOW); // Reverse LED pre off delay
delay(2000);
digitalWrite(ForLed, ledState); // Forward LED on
delay(1000);
counter++;
Serial.print(" Counter: ");
Serial.print(counter);
digitalWrite(RevLed, !ledState); // Reverse LED on
Serial.println((ledState == HIGH) ? " Forward >>" : " Reverse");
}
}
if (counter >= 10) {
digitalWrite(ForLed, LOW); // Off Relay
digitalWrite(RevLed, LOW); // Off Relay
counter = 0;
conveyorRunning = LOW;
Serial.println("Finish To Restart ---------");
}
delay(10);
}
}