const int dirPin = 2; //to driver
const int stepPin = 3; //to driver
const int enablePin = 4; //to driver
const int LED_OPEN = 7;
const int LED_CLOSED = 6;
const int OPENSW = 8;
const int CLOSEDSW = 9;
const int initiateSwitch = 10; //to expand/retract button
const int STEPS_PER_REV = 2000;
const int OPEN_TIME = 10000;
const int CLOSE_TIME = 20000;
int initiateSwitchState = 0;
int previousinitiateSwitchState = 0;
int dirPinState = HIGH;
int previousdirPinState = LOW;
int OPENSWState = 0;
int CLOSEDSWState = 0;
int LED_OPEN_State = LOW;
int LED_CLOSED_State = LOW;
void setup() {
digitalWrite (LED_OPEN,LOW);
digitalWrite (LED_CLOSED,LOW);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(LED_OPEN, OUTPUT);
pinMode(LED_CLOSED, OUTPUT);
pinMode(CLOSEDSW, INPUT_PULLUP);
pinMode(OPENSW, INPUT_PULLUP);
pinMode(initiateSwitch, INPUT); //signal motor start w/ opposite direction
Serial.begin(9600);
}
void loop() {
LED_OPEN_State = digitalRead(LED_OPEN);
LED_CLOSED_State = digitalRead(LED_CLOSED);
OPENSWState = digitalRead(OPENSW);
CLOSEDSWState = digitalRead(CLOSEDSW);
initiateSwitchState = digitalRead(initiateSwitch); //signals the action
delay(1);
if (initiateSwitchState != previousinitiateSwitchState){ //reads limit switch states to decide which direction to turn
if (initiateSwitchState == HIGH ){ //should this be "HIGH" or "1"?
if (dirPinState != previousdirPinState && CLOSEDSWState == 0){
digitalWrite(dirPin, HIGH);
previousdirPinState = digitalRead(dirPin);
for(int x = 0; x < STEPS_PER_REV; x++){ //STEPS_PER_REV*2 = 2 revolutions
digitalWrite(stepPin, HIGH);
delayMicroseconds(OPEN_TIME); //1000 = fast turn
digitalWrite(stepPin, LOW);
delayMicroseconds(OPEN_TIME); //1000 = fast turn
digitalWrite(LED_OPEN, LOW);
digitalWrite(LED_CLOSED, HIGH);
}
}
if (dirPinState == previousdirPinState && OPENSWState == 0){
digitalWrite(dirPin, LOW);
previousdirPinState = digitalRead(dirPin);
for(int x = 0; x < STEPS_PER_REV; x++){
digitalWrite(stepPin, HIGH);
delayMicroseconds(CLOSE_TIME); //2000 = slow turn
digitalWrite(stepPin, LOW);
delayMicroseconds(CLOSE_TIME); //2000 = slow turn
digitalWrite(LED_OPEN, HIGH);
digitalWrite(LED_CLOSED, LOW);
}
}
else
{
}
}
Serial.print("initiateSwitchState: ");
Serial.println(initiateSwitchState);
Serial.print("Direction: ");
Serial.println(previousdirPinState);
}
delay(50);
previousinitiateSwitchState = initiateSwitchState;
}