PositionStops
/* IF HORIZPOT REACHES MIN 235 OR MAX 700 STOP MOTOR"B" FROM DRIVING PAST MIN OR MAX BUT ALLOW MOTOR TO DRIVE BACK THE OPPOSITE WAY
* IF VERTPOT REACHES MIN 285 OR MAX 555 DO SAME AS ABOVE FOR MOTOR"A"
*/
bool PositionStopUp(){
if(vertPotVal <= 285){
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
return true;
}
return false;
}
bool PositionStopDown(){
if(vertPotVal >= 555){
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
return true;
}
return false;
}
bool PositionStopLeft(){
if(horizPotVal <= 235){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
return true;
}
return false;
}
bool PositionStopRight(){
if(horizPotVal >= 700){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
return true;
}
return false;
}
void StopVert(){
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
}
void StopHoriz(){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
}
UpdatePosition
void UpdatePosition(){
startAlignMillis = millis();
if((motorAstate == true) || (motorBstate == true)){
digitalWrite(redLEDpin, HIGH); //WHEN MOVING INTO ALIGNMENT TURN
digitalWrite(blueLEDpin, LOW); // BLUE LED ON
digitalWrite(greenLEDpin, HIGH);
}
if(motorAstate == true){
// CHECK IF THE DIFFERENCE IS WITHIN THE TOLERANCE ELSE CHANGE THE VERTICAL ANGLE
if(-1*tolerance > dvert || dvert > tolerance){
digitalWrite(StandBy, HIGH);
analogWrite(APWM, 200);
if(avt > avb){ //DRIVE MOTOR DOWN
if(!PositionStopDown()){
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
}
}
else if(avt < avb){ //DRIVE MOTOR UP
if(!PositionStopUp()){
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
}
}
}
else{ // IF THE DIFFERENCE IS WITHIN THE TOLERANCE TURN OFF MOTOR
StopVert();
digitalWrite(APWM, LOW);
motorAstate = false;
}
}
if(motorBstate == true){
// CHECK IF THE DIFFERENCE IS WITHIN THE TOLERANCE ELSE CHANGE THE HORIZONTAL ANGLE
if(-1*tolerance > dhoriz || dhoriz > tolerance){
digitalWrite(StandBy, HIGH);
analogWrite(BPWM, 200);
if(avl > avr){ //DRIVE MOTOR RIGTH
if(!PositionStopRight()){
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
}
}
else if(avl < avr){ //DRIVE MOTOR LEFT
if(!PositionStopLeft()){
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
}
}
}
else{ // IF THE DIFFERENCE IS WITHIN THE TOLERANCE TURN OFF MOTOR
StopHoriz();
digitalWrite(BPWM, LOW);
motorBstate = false;
}
}
if((motorAstate == false) && (motorBstate == false)){
// WHEN ALINDED FADE GREEN LED ON AND OFF. TURN OFF MOTOR DRIVER FOR THE alingnedInterval
digitalWrite(redLEDpin, HIGH);
digitalWrite(blueLEDpin, HIGH);
time = millis();
value = 128+127*cos(2*PI/slowFlash*time);
analogWrite(greenLEDpin, value);
//Serial.print(" Aligned ");
digitalWrite(StandBy, LOW);
comingFromAligned = true;
if(isAlignFirstLoop == true){ //RESET THE TIMER
prevAlignMillis = startAlignMillis;
isAlignFirstLoop = false;
}
if((unsigned long)startAlignMillis - prevAlignMillis >= alignedInterval){
motorAstate = true; //ONCE THE ALIGNED INTERVAL HAS FINISHED SET MOTOR STATES TO HIGH
motorBstate = true;
isAlignFirstLoop = true; //SET PREVMILLIS TO CURRENTMILLIS
// Serial.print(" UPDATE PING !!!!!!!!!!!!! ");
}
}
}