const int U1=A0; // M1 /////up limit
const int D1=A1; // M1 ///// down limit (Motor 1 centre)
const int p1=A2; // M1 /////pos pulse
const int d1=A3; // M1 //// neg pulse
const int U2=A4; // M2
const int D2=A5; // M2
const int p2=A6; // M2 /////Motor 2 left
const int d2=A7; // M2
const int U3=A8; // M3
const int D3=A9; // M3
const int p3=A10;// M3 ////Motor 3 right
const int d3=A11;// M3
char incomingByte = 0;
int ij,i,done;
void setup()
{
Serial.begin(9600);
pinMode (p1, OUTPUT);
pinMode (d1, OUTPUT);
pinMode (p2, OUTPUT);
pinMode (d2, OUTPUT);
pinMode (p3, OUTPUT);
pinMode (d3, OUTPUT);
pinMode (U1, INPUT);
pinMode (D1, INPUT);
pinMode (U2, INPUT);
pinMode (D2, INPUT);
pinMode (U3, INPUT);
pinMode (D3, INPUT);
delay (3000);
}
// P1=Front, P2=Left, P3=Right
void loop()
{
down (25,50);
while (1)
{
incomingByte = Serial.read();
if (incomingByte=='a')
{cmd ();done=0;}
}
}
void cmd ()
{
while (done==0)
{
incomingByte = Serial.read();
if (incomingByte=='f')center (12,50);
if (incomingByte=='g')down (24,50);
if (incomingByte=='h')RL (10,125); // RL1-8s
if (incomingByte=='i')RL (5,125); // RL2-4s
if (incomingByte=='j')RL (10,62); // RL3-4s
if (incomingByte=='k')RL (5,62); // RL4-2s
if (incomingByte=='m')RL (5,31); // RL5-1s
if (incomingByte=='n')RL (2,30); // RL6-0.4s
if (incomingByte=='o')back_jurk (5,30);// BJ-0.24s
if (incomingByte=='X')done=1; // Exit
}
}
/////////////////////////ROTATE/////////////////////////////////////////////
void RL (int r, int sp)
{
// Center to Right ////////////(Rotate Left)
digitalWrite (d2, LOW); // up
digitalWrite (d3, HIGH); // down
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p2, HIGH);digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(U2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(D3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
////////////////////////////////////////////////////// Right to Center////////////////(Rotate Right)
digitalWrite (d2, HIGH); // down
digitalWrite (d3, LOW); // up
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p2, HIGH);digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(D2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(U3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
////////////////////////////////////////////////////// Center to Left ////// (Return-right)
digitalWrite (d2, HIGH); // down
digitalWrite (d3, LOW); // up
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p2, HIGH);digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(D2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(U3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
////////////////////////////////////////////////// Left to Center ///////(Return-left)
digitalWrite (d2, LOW); // up
digitalWrite (d3, HIGH);//down
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p2, HIGH);digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(U2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(D3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
}
////////////////////////////BACK JERK////////////////////////////////////////////////
void back_jurk (int r, int sp) //////// (jerk)
{
//////////////////////////////////////////// back to center /////////(CENTRE high)
digitalWrite (d1, HIGH); //down
digitalWrite (d2, LOW); //up
digitalWrite (d3, LOW); //up
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p1, HIGH);digitalWrite (p2, HIGH);digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(D1)==LOW)digitalWrite (p1, LOW);
if (digitalRead(U2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(U3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
///////////////////////////////////////////// center to back //////(SIDE high)
digitalWrite (d1, LOW); //up
digitalWrite (d2, HIGH);//down
digitalWrite (d3, HIGH);//down
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p1, HIGH);
digitalWrite (p2, HIGH);
digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(U1)==LOW)digitalWrite (p1, LOW);
if (digitalRead(D2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(D3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
}
///////////////////////////DOWN/////////////////////////////////////////
void down (int r, int sp)/////////// (ALL 3 LOW)
{
dir (0);
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p1, HIGH);
digitalWrite (p2, HIGH);
digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(D1)==LOW)digitalWrite (p1, LOW);
if (digitalRead(D2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(D3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
}
////////////////////////////////CENTER/////////////////////////////////////////////////
void center (int r, int sp) // (all 3 high)
{
dir (1);
for (i=0;i<r;i++)
{
for (ij=0;ij<800;ij++)
{
digitalWrite (p1, HIGH);
digitalWrite (p2, HIGH);
digitalWrite (p3, HIGH);
delayMicroseconds (sp);
if (digitalRead(U1)==LOW)digitalWrite (p1, LOW);
if (digitalRead(U2)==LOW)digitalWrite (p2, LOW);
if (digitalRead(U3)==LOW)digitalWrite (p3, LOW);
delayMicroseconds (sp);
}
}
}
//////////////////////////////////////DIR///////////////////////////////////////////
void dir (int e)
{
if (e==1)
{digitalWrite (d1, LOW);digitalWrite (d2, LOW);digitalWrite (d3, LOW);} // up
if (e==0)
{digitalWrite (d1, HIGH);digitalWrite (d2, HIGH);digitalWrite (d3, HIGH);} // down
}