#include <Servo.h>
#include <EEPROM.h>
#define button 23//button to up/down mechanism start
#define act11 22//actuator 1 l298 pin IN1
#define act12 25//actuator 1 l298 pin IN2
#define act21 24//actuator 2 l298 pin IN3
#define act22 27//actuator 2 l298 pin IN4
#define s1 4 //Servo 1
#define s2 5 //Servo 2
#define s3 6 //Servo 3
#define m11 26 //center DC motor pin IN1
#define m12 29 //center DC motor pin IN2
#define m21 28 //side DC motor1 pin IN1
#define m22 31 //side DC motor1 pin IN2
#define m31 30 //side DC motor2 pin IN3
#define m32 33 //side DC motor2 pin IN4
#define limit1 32 //Limit switch for central DC Motor
#define limit2 34 //Limit switch for side DC Motor
#define limit3 35 //Limit switch for side DC Motor
#define limit4 36 //Limit switch for central DC Motor
#define limit5 37 //Limit switch for side DC Motor
#define limit6 38 //Limit switch for side DC Motor
int position=0;
Servo servo1,servo2,servo3;
void setup() {
// put your setup code here, to run once:
pinMode(button, INPUT_PULLUP);
pinMode(limit1, INPUT_PULLUP);
pinMode(limit2, INPUT_PULLUP);
pinMode(limit3, INPUT_PULLUP);
pinMode(limit4, INPUT_PULLUP);
pinMode(limit5, INPUT_PULLUP);
pinMode(limit6, INPUT_PULLUP);
pinMode(act11, OUTPUT);
pinMode(act12, OUTPUT);
pinMode(act21, OUTPUT);
pinMode(act22, OUTPUT);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
pinMode(m31, OUTPUT);
pinMode(m32, OUTPUT);
servo1.attach(s1);
servo2.attach(s2);
servo3.attach(s3);
position=EEPROM.read(0);
if(position==1)
{
DOWN();
position=0;
}
else if(position!=0)
{
position=0;
}
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(button)==LOW)
{
if(position==0)
{
UP();
}
else if(position==1)
{
DOWN();
}
}
}
void UP()
{
ActRetract();
ServoVer();
centerDCC();
ActExtend();
sideDCD();
position=1;
EEPROM.write(0,position);
}
void DOWN()
{
sideDCD();
ActRetract();
ServoVer();
centerDCC();
ActExtend();
ServoHor();
position=0;
EEPROM.write(0,position);
}
void ActRetract()
{
digitalWrite(act11,LOW);
digitalWrite(act12,HIGH);
digitalWrite(act21,LOW);
digitalWrite(act22,HIGH);
delay(5000);
}
void ActExtend()
{
digitalWrite(act11,LOW);
digitalWrite(act12,HIGH);
digitalWrite(act21,LOW);
digitalWrite(act22,HIGH);
}
void ServoVer()
{
servo1.write(90);
servo2.write(90);
servo3.write(90);
delay(2000);
}
void ServoHor()
{
servo1.write(0);
servo2.write(0);
servo3.write(0);
delay(2000);
}
void centerDCD()
{
digitalWrite(m11, HIGH);
digitalWrite(m12,LOW);
while (digitalRead(limit1)==HIGH);
digitalWrite(m11, LOW);
digitalWrite(m12,HIGH);
delay(1000);
digitalWrite(m11,LOW);
digitalWrite(m12,LOW);
delay(2000);
}
void sideDCD()
{
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
digitalWrite(m31, HIGH);
digitalWrite(m32, LOW);
int i=0;
while(1)
{
i=0;
if(digitalRead(limit2)==LOW)
{
digitalWrite(m21,LOW);
digitalWrite(m22,LOW);
i++;
}
if(digitalRead(limit3)==LOW)
{
digitalWrite(m31,LOW);
digitalWrite(m32,LOW);
i++;
}
if(i==2)
{
break;
}
}
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
digitalWrite(m31, LOW);
digitalWrite(m32, HIGH);
delay(1000);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
digitalWrite(m31, LOW);
digitalWrite(m32, LOW);
}
void sideDCC()
{
delay(2000);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
digitalWrite(m31, LOW);
digitalWrite(m32, HIGH);
int i=0;
while(1)
{
i=0;
if(digitalRead(limit5)==LOW)
{
digitalWrite(m21,LOW);
digitalWrite(m22,LOW);
i++;
}
if(digitalRead(limit6)==LOW)
{
digitalWrite(m31,LOW);
digitalWrite(m32,LOW);
i++;
}
if(i==2)
{
break;
}
}
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
digitalWrite(m31, HIGH);
digitalWrite(m32, LOW);
delay(1000);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
digitalWrite(m31, LOW);
digitalWrite(m32, LOW);
}
void centerDCC()
{
digitalWrite(m11, LOW);
digitalWrite(m12,HIGH);
while (digitalRead(limit4)==HIGH);
digitalWrite(m11, HIGH);
digitalWrite(m12,LOW);
delay(1000);
digitalWrite(m11,LOW);
digitalWrite(m12,LOW);
delay(2000);
}