#include <Arduino.h>
// Define a new data type
enum state {
DOWN,
UP,
STOP,
LOWER,
RAISE
};
// Variable of the new data type
state position = DOWN;
int GSM1 = 10;
// Define pin connections
#define Button_Raise_Pin 1
#define LimitSwitch_Up_Pin 2
#define Stop_Pin 33
#define Button_Lower_Pin 5
#define LimitSwitch_Down_Pin 6
#define Door_Raise_Pin 3
#define Door_Up_Pin 4
#define Door_Lower_Pin 7
#define Door_Down_Pin 8
// Define variables
bool Button_Raise = LOW;
bool LimitSwitch_Up = LOW;
bool Button_Lower = LOW;
bool LimitSwitch_Down = LOW;
bool Button_Stop = LOW;
void setup() {
pinMode(GSM1, OUTPUT);
// UP
pinMode(Button_Raise_Pin, INPUT_PULLUP);
pinMode(LimitSwitch_Up_Pin, INPUT_PULLUP);
pinMode(Door_Raise_Pin, OUTPUT);
pinMode(Door_Up_Pin, OUTPUT);
// DOWN
pinMode(Button_Lower_Pin, INPUT_PULLUP);
pinMode(LimitSwitch_Down_Pin, INPUT_PULLUP);
pinMode(Door_Lower_Pin, OUTPUT);
pinMode(Door_Down_Pin, OUTPUT);
// STOP
pinMode(Stop_Pin, INPUT_PULLUP);
analogWrite(GSM2, 100);
}
void loop() {
// Read input pins
Button_Raise = !digitalRead(Button_Raise_Pin);
LimitSwitch_Up = !digitalRead(LimitSwitch_Up_Pin);
Button_Lower = !digitalRead(Button_Lower_Pin);
LimitSwitch_Down = !digitalRead(LimitSwitch_Down_Pin);
Button_Stop = !digitalRead(Stop_Pin);
// State machine
switch (position) {
case DOWN:
digitalWrite(Door_Lower_Pin, LOW);
digitalWrite(Door_Down_Pin, HIGH);
if (Button_Raise == HIGH) {
position = RAISE;
}
break;
case RAISE:
digitalWrite(Door_Down_Pin, LOW);
digitalWrite(Door_Raise_Pin, HIGH);
if (LimitSwitch_Up == HIGH) {
position = UP;
} else if (Button_Stop == HIGH) {
position = STOP;
}
break;
case UP:
digitalWrite(Door_Raise_Pin, LOW);
digitalWrite(Door_Up_Pin, HIGH);
if (Button_Lower == HIGH) {
position = LOWER;
}
break;
case LOWER:
digitalWrite(Door_Up_Pin, LOW);
digitalWrite(Door_Lower_Pin, HIGH);
if (LimitSwitch_Down == HIGH) {
position = DOWN;
} else if (Button_Stop == HIGH) {
position = STOP;
}
break;
case STOP:
digitalWrite(Door_Raise_Pin, LOW);
digitalWrite(Door_Lower_Pin, LOW);
if (Button_Raise == HIGH) {
position = RAISE;
} else if (Button_Lower == HIGH) {
position = LOWER;
}
break;
}
}