String inString = "";
int pwmA = 3;
int pwmB = 11;
int dirA = 12;
int dirB = 13;
int dt = 2;
int ms = 100;
int st = 0;
int state = LOW;
//int for_seq[] = {0,1,2,3};
//int rev_seq[] = {3,2,1,0};
int new_pos;
int cur_pos = 0;
int move_dist = 0;
int mot_state = 0;
const int mod = 4;
void setup()
{
Serial.begin(9600);
pinMode(pwmA,OUTPUT);
pinMode(pwmB,OUTPUT);
pinMode(dirA,OUTPUT);
pinMode(dirB,OUTPUT);
Serial.println("Motor Start Sequence Initiate");
start_up(); //start up sequence to position motor into A position
motor_stop();
Serial.println("Motor Ready Enter Position");
}
void loop()
{
/* ***********************************
I believe my error lies in using this while loop to grab
a two or more didget number and move the platform to that position.
*/
while(Serial.available()>0)
{
int inChar = Serial.read();
inString += (char)inChar;
new_pos = inString.toInt();
if (Serial.available()=='\n')
{
break;
}
}
inString = "";
move_dist = new_pos - cur_pos;
if(move_dist>0)
{
for(int dist_count=0;dist_count<=move_dist;dist_count++)
{
int x = (mot_state + dist_count +1)%mod;
if(x==0){step_1();}
if(x==1){step_2();}
if(x==2){step_3();}
if(x==3){step_4();}
Serial.println(x);
}
cur_pos = cur_pos + move_dist;
Serial.print("new_pos: ");
Serial.println(new_pos);
Serial.print("cur_pos: ");
Serial.println(cur_pos);
mot_state = (mot_state+cur_pos)%mod;
Serial.print("mot_state: ");
Serial.println(mot_state);
}
else if(move_dist<0)
{
for(int dist_count=0;dist_count<=abs(move_dist);dist_count++)
{
int y = (mot_state + dist_count + 1)%mod;
if(y==0){step_1();}
if(y==1){step_2();}
if(y==2){step_3();}
if(y==3){step_4();}
Serial.println(y);
}
cur_pos = cur_pos + move_dist;
Serial.print("new_pos: ");
Serial.println(new_pos);
Serial.print("cur_pos: ");
Serial.println(cur_pos);
//modular substraction
mot_state = abs((mot_state-cur_pos)%mod);
Serial.print("mot_state: ");
Serial.println(mot_state);
}
else
{
motor_stop();
}
/*Serial.print("new_pos: ");
Serial.println(new_pos);
Serial.print("cur_pos: ");
Serial.println(cur_pos);
*/
}
void step_1()
{
digitalWrite(dirA,state);
digitalWrite(dirB,state);
analogWrite(pwmA,ms);
analogWrite(pwmB,st);
delay(dt);
}
void step_2()
{
digitalWrite(dirA,state);
digitalWrite(dirB,state);
analogWrite(pwmA,st);
analogWrite(pwmB,ms);
delay(dt);
}
void step_3()
{
digitalWrite(dirA,!state);
digitalWrite(dirB,state);
analogWrite(pwmA,ms);
analogWrite(pwmB,st);
delay(dt);
}
void step_4()
{
digitalWrite(dirA,state);
digitalWrite(dirB,!state);
analogWrite(pwmA,st);
analogWrite(pwmB,ms);
delay(dt);
}
void start_up()
{
for(int i=0;i<20;i++)
{
forward();
}
for(int j=0;j<15;j++)
{
reverse();
}
}
void forward()
{
step_1();
step_2();
step_3();
step_4();
}
void reverse()
{
step_4();
step_3();
step_2();
step_1();
}
void motor_stop()
{
digitalWrite(dirA,state);
digitalWrite(dirB,!state);
analogWrite(pwmA,st);
analogWrite(pwmB,st);
}