Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Files at this revision

API Documentation at this revision

Comitter:
sahilmgandhi
Date:
Wed May 24 01:57:01 2017 +0000
Parent:
28:8126a4d620e8
Child:
30:11f4316a5ba7
Commit message:
Need to change ir2-ir3 to now be ir1 - ir4

Changed in this revision

irpair.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
--- a/irpair.cpp	Sun May 21 13:04:21 2017 +0000
+++ b/irpair.cpp	Wed May 24 01:57:01 2017 +0000
@@ -1,9 +1,12 @@
 #include "irpair.h"
 #include "mbed.h"
 
+Ticker toggleIr;
+
 void IRPair::calibrateSensor() {
 
     ir.write( 1 );
+    wait_us(70);
 
     for (int i = 0; i < samplesToTake; ++i) 
         sensorAvg += recv.read();
@@ -16,6 +19,8 @@
 {
     float z = 0;
     ir.write( 1 );
+    wait_us(70);
+    
     for( int i = 0; i < samples; ++i )
         z += recv.read();
     ir.write( 0 );
--- a/main.cpp	Sun May 21 13:04:21 2017 +0000
+++ b/main.cpp	Wed May 24 01:57:01 2017 +0000
@@ -12,44 +12,7 @@
 #include "stm32f4xx.h"
 #include "QEI.h"
  
-/* Constants for when HIGH_PWM_VOLTAGE = 0.2
-#define IP_CONSTANT 6
-#define II_CONSTANT 0
-#define ID_CONSTANT 1
-*/
- 
-// Constants for when HIGH_PWM_VOLTAGE = 0.1
-// #define IP_CONSTANT 8.85
-// #define II_CONSTANT 0.005
-// #define ID_CONSTANT 3.15
-#define IP_CONSTANT 8.15
-#define II_CONSTANT 0.06
-#define ID_CONSTANT 7.5
- 
-const int desiredCount180 = 2700;
-const int desiredCountR = 1575;
-const int desiredCountL = 1650;
- 
-const int oneCellCount = 5400;
-const int oneCellCountMomentum = 4450;//4800;      // one cell count is actually approximately 5400, but this value is considering momentum!
- 
-float receiverOneReading = 0.0;
-float receiverTwoReading = 0.0;
-float receiverThreeReading = 0.0;
-float receiverFourReading = 0.0;
 
-float ir1base = 0.0;
-float ir2base = 0.0;
-
-float ir3base = 0.0;
-
-float ir4base = 0.0;
-
-float initAverageL = 8.25;
-float averageDivL = 27.8; //blue
-float initAverageR = 8.75; //4.5
-float averageDivR = 28.5; //red
-float averageDivUpper = 0.5;
 
 //IRSAvg= >: 0.143701, 0.128285
  
@@ -70,200 +33,9 @@
         //0.003795, 
  
 //0.005297, 0.007064 
- 
-float noWallR = 0.007;
-float noWallL = 0.007;
- 
+
 void pidOnEncoders();
- 
- 
-void turnLeft()
-{
-    double speed0 = 0.11;
-    double speed1 = -0.13;
- 
-    int counter = 0;
-    int initial0 = encoder0.getPulses();
-    int initial1 = encoder1.getPulses();
- 
-    int desiredCount0 = initial0 - desiredCountL;
-    int desiredCount1 = initial1 + desiredCountL;
- 
-    int count0 = initial0;
-    int count1 = initial1;
- 
-    double error0 = count0 - desiredCount0;
-    double error1 = count1 - desiredCount1;
- 
-    while(1) {
- 
-        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
-            count0 = encoder0.getPulses();
-            count1 = encoder1.getPulses();
- 
-            error0 = count0 - desiredCount0;
-            error1 = count1 - desiredCount1;
- 
-            right_motor.move(speed0);
-            left_motor.move(speed1);
-            counter = 0;
-        } else {
-            counter++;
-            right_motor.brake();
-            left_motor.brake();
-        }
- 
-        if (counter > 60) {
-            break;
-        }
-    }
- 
-    right_motor.brake();
-    left_motor.brake();
-    turnFlag = 0;           // zeroing out the flags!
-    currDir -= 1;
-}
- 
-void turnRight()
-{
-    double speed0 = -0.11;
-    double speed1 = 0.13;
- 
-    int counter = 0;
-    int initial0 = encoder0.getPulses();
-    int initial1 = encoder1.getPulses();
- 
-    int desiredCount0 = initial0 + desiredCountR;
-    int desiredCount1 = initial1 - desiredCountR;
- 
-    int count0 = initial0;
-    int count1 = initial1;
- 
-    double error0 = count0 - desiredCount0;
-    double error1 = count1 - desiredCount1;
- 
-    while(1) {
- 
-        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
-            count0 = encoder0.getPulses();
-            count1 = encoder1.getPulses();
- 
-            error0 = count0 - desiredCount0;
-            error1 = count1 - desiredCount1;
- 
-            right_motor.move(speed0);
-            left_motor.move(speed1);
-            counter = 0;
-        } else {
-            counter++;
-            right_motor.brake();
-            left_motor.brake();
-        }
- 
-        if (counter > 60) {
-            break;
-        }
-    }
- 
-    right_motor.brake();
-    left_motor.brake();
-    turnFlag = 0;
-    currDir += 1;
-}
- 
-void turnLeft180()
-{
-    double speed0 = 0.15;
-    double speed1 = -0.15;
- 
-    int counter = 0;
-    int initial0 = encoder0.getPulses();
-    int initial1 = encoder1.getPulses();
- 
-    int desiredCount0 = initial0 - desiredCountL*2;
-    int desiredCount1 = initial1 + desiredCountL*2;
- 
-    int count0 = initial0;
-    int count1 = initial1;
- 
-    double error0 = count0 - desiredCount0;
-    double error1 = count1 - desiredCount1;
- 
- 
-    while(1) {
-    
-        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
-            count0 = encoder0.getPulses();
-            count1 = encoder1.getPulses();
- 
-            error0 = count0 - desiredCount0;
-            error1 = count1 - desiredCount1;
- 
-            right_motor.move(speed0);
-            left_motor.move(speed1);
-            counter = 0;
-        } else {
-            counter++;
-            right_motor.brake();
-            left_motor.brake();
-        }
- 
-        if (counter > 60) {
-            break;
-        }
-    }
- 
-    right_motor.brake();
-    left_motor.brake();
-    currDir -= 2;
-}
- 
-void turnRight180()
-{
-    double speed0 = -0.16;
-    double speed1 = 0.16;
- 
-    int counter = 0;
-    int initial0 = encoder0.getPulses();
-    int initial1 = encoder1.getPulses();
- 
-    int desiredCount0 = initial0 + desiredCount180;
-    int desiredCount1 = initial1 - desiredCount180;
- 
-    int count0 = initial0;
-    int count1 = initial1;
- 
-    double error0 = count0 - desiredCount0;
-    double error1 = count1 - desiredCount1;
- 
- 
-    while(1) {
- 
-        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
-            count0 = encoder0.getPulses();
-            count1 = encoder1.getPulses();
- 
-            error0 = count0 - desiredCount0;
-            error1 = count1 - desiredCount1;
- 
-            right_motor.move(speed0);
-            left_motor.move(speed1);
-            counter = 0;
-        } else {
-            counter++;
-            right_motor.brake();
-            left_motor.brake();
-        }
- 
-        if (counter > 60) {
-            break;
-        }
-    }
-    right_motor.brake();
-    left_motor.brake();
-    currDir += 2;
-}
- 
+
 void moveForwardCellEncoder(double cellNum){
     int desiredCount0 = encoder0.getPulses() + oneCellCountMomentum*cellNum;
     int desiredCount1 = encoder1.getPulses() + oneCellCountMomentum*cellNum;
@@ -583,15 +355,17 @@
     double derivError = 0;
     double sumError = 0;
 
-    double HIGH_PWM_VOLTAGE = 0.12;
-    double rightSpeed = 0.12;
-    double leftSpeed = 0.12;
+    double HIGH_PWM_VOLTAGE_R = 0.15;
+    double HIGH_PWM_VOLTAGE_L = 0.16;
+
+    double rightSpeed = 0.15;
+    double leftSpeed = 0.16;
 
     int desiredCount0 = encoder0.getPulses() + oneCellCountMomentum*cellCount;
     int desiredCount1 = encoder1.getPulses() + oneCellCountMomentum*cellCount;
 
-    left_motor.forward(0.12);
-    right_motor.forward(0.10);
+    left_motor.forward(0.16);
+    right_motor.forward(0.15);
 
     float ir2 = IRP_2.getSamples( SAMPLE_NUM );
     float ir3 = IRP_3.getSamples( SAMPLE_NUM );
@@ -602,10 +376,10 @@
     int state = 0;
 
     while (encoder0.getPulses() <= desiredCount0 && encoder1.getPulses() <= desiredCount1){
-        receiverTwoReading = IRP_2.getSamples(50);
-        receiverThreeReading = IRP_3.getSamples(50);
-        receiverOneReading = IRP_1.getSamples(50);
-        receiverFourReading = IRP_4.getSamples(50);
+        receiverTwoReading = IRP_2.getSamples(100);
+        receiverThreeReading = IRP_3.getSamples(100);
+        receiverOneReading = IRP_1.getSamples(100);
+        receiverFourReading = IRP_4.getSamples(100);
 
         if(  receiverOneReading > IRP_1.sensorAvg*0.70 || receiverFourReading > IRP_4.sensorAvg*0.70 ){
             if (currDir % 4 == 0){
@@ -715,11 +489,11 @@
         derivError = currentError - previousError;
         double PIDSum = IP_CONSTANT*currentError + II_CONSTANT*sumError + ID_CONSTANT*derivError;
         if (PIDSum > 0) { // this means the leftWheel is faster than the right. So right speeds up, left slows down
-            rightSpeed = HIGH_PWM_VOLTAGE - abs(PIDSum*HIGH_PWM_VOLTAGE);
-            leftSpeed = HIGH_PWM_VOLTAGE + abs(PIDSum*HIGH_PWM_VOLTAGE);
+            rightSpeed = HIGH_PWM_VOLTAGE_R - abs(PIDSum*HIGH_PWM_VOLTAGE_R);
+            leftSpeed = HIGH_PWM_VOLTAGE_L + abs(PIDSum*HIGH_PWM_VOLTAGE_L);
         } else { // r is faster than L. speed up l, slow down r
-            rightSpeed = HIGH_PWM_VOLTAGE + abs(PIDSum*HIGH_PWM_VOLTAGE);
-            leftSpeed = HIGH_PWM_VOLTAGE - abs(PIDSum*HIGH_PWM_VOLTAGE);
+            rightSpeed = HIGH_PWM_VOLTAGE_R + abs(PIDSum*HIGH_PWM_VOLTAGE_R);
+            leftSpeed = HIGH_PWM_VOLTAGE_L - abs(PIDSum*HIGH_PWM_VOLTAGE_L);
         }   
         if (leftSpeed > 0.30) leftSpeed = 0.30;
         if (leftSpeed < 0) leftSpeed = 0;
@@ -746,6 +520,7 @@
             mouseX -= 1;
         }
     }
+    
  
     left_motor.brake();
     right_motor.brake();
@@ -987,55 +762,59 @@
 
 void changeManhattanDistance(bool headCenter){
     if (headCenter){
-        for (int i = 0; i < MAZE_LEN / 2; i++) {
-            for (int j = 0; j < MAZE_LEN / 2; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(7 - j) + abs(7 - i);
+        for (int i = 0; i < MAZE_LEN; i++) {
+            for (int j = 0; j < MAZE_LEN; j++) {
+                distanceToCenter[i][j] = manhattanDistances[i][j];
             }
         }
-        for (int i = MAZE_LEN / 2; i < MAZE_LEN; i++) {
-            for (int j = 0; j < MAZE_LEN / 2; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(7 - j) + abs(8 - i);
-            }
-        }
-        for (int i = 0; i < MAZE_LEN / 2; i++) {
-            for (int j = MAZE_LEN / 2; j < MAZE_LEN; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(8 - j) + abs(7 - i);
-            }
-        }
-        for (int i = MAZE_LEN / 2; i < MAZE_LEN; i++) {
-            for (int j = MAZE_LEN / 2; j < MAZE_LEN; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(8 - j) + abs(8 - i);
+        for (int i = 0; i < MAZE_LEN; i++) {
+            for (int j = 0; j < MAZE_LEN; j++) {
+                manhattanDistances[i][j] = distanceToStart[i][j];
             }
         }
     }
     else {
-        for (int i = 0; i < MAZE_LEN / 2; i++) {
+         for (int i = 0; i < MAZE_LEN; i++) {
+            for (int j = 0; j < MAZE_LEN; j++) {
+                distanceToStart[i][j] = manhattanDistances[i][j];
+            }
+        }
+        for (int i = 0; i < MAZE_LEN; i++) {
+            for (int j = 0; j < MAZE_LEN; j++) {
+                manhattanDistances[i][j] = distanceToCenter[i][j];
+            }
+        }
+    }
+}
+
+void initializeDistances(){
+    for (int i = 0; i < MAZE_LEN / 2; i++) {
             for (int j = 0; j < MAZE_LEN / 2; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
+                distanceToStart[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
             }
         }
         for (int i = MAZE_LEN / 2; i < MAZE_LEN; i++) {
             for (int j = 0; j < MAZE_LEN / 2; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
+                distanceToStart[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
             }
         }
         for (int i = 0; i < MAZE_LEN / 2; i++) {
             for (int j = MAZE_LEN / 2; j < MAZE_LEN; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
+                distanceToStart[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
             }
         }
         for (int i = MAZE_LEN / 2; i < MAZE_LEN; i++) {
             for (int j = MAZE_LEN / 2; j < MAZE_LEN; j++) {
-                manhattanDistances[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
+                distanceToStart[MAZE_LEN - 1 - j][i] = abs(0 - j) + abs(0 - i);
             }
         }
-    }
 }
- 
+  
 int main()
 {
     //Set highest bandwidth.
     //gyro.setLpBandwidth(LPFBW_42HZ);
+    initializeDistances();
     serial.baud(9600);
     //serial.printf("The gyro's address is %s", gyro.getWhoAmI());
  
@@ -1119,49 +898,49 @@
     //wait_ms(1500);
     int nextMovement = 0;
     while (1) {
-        prevEncoder0Count = encoder0.getPulses();
-        prevEncoder1Count = encoder1.getPulses();
-
-        if (!overrideFloodFill){
-             nextMovement = chooseNextMovement();
-            if (nextMovement == 0){
-                nCellEncoderAndIR(1);
-            }
-            else if (nextMovement == 1){
-                justTurned = true;
-                turnRight();
-            }
-            else if (nextMovement == 2){
-                justTurned = true;
-                turnLeft();
-            }
-            else if (nextMovement == 3){
-                nCellEncoderAndIR(1);
-            }
-            else if (nextMovement == 4){
-                justTurned = true;
-                turnRight180();
-            }
-        }
-        else{
-            overrideFloodFill = false;
-            if ((rand()%2 + 1) == 1){
-                justTurned = true;
-                turnLeft();
-            }
-            else{
-                justTurned = true;
-                turnRight();
-            }
-        }
-        currEncoder0Count = encoder0.getPulses();
-        currEncoder1Count = encoder1.getPulses();
-       
-        if (!justTurned && (currEncoder0Count <= prevEncoder0Count + 100) && (currEncoder1Count <= prevEncoder1Count + 100) && !overrideFloodFill){
-            overrideFloodFill = true;
-        }
-
-        wait_ms(1000);                          // reduce this once we fine tune this!
+       // prevEncoder0Count = encoder0.getPulses();
+//        prevEncoder1Count = encoder1.getPulses();
+//
+//        if (!overrideFloodFill){
+//            nextMovement = chooseNextMovement();
+//            if (nextMovement == 0){
+//                nCellEncoderAndIR(1);
+//            }
+//            else if (nextMovement == 1){
+//                justTurned = true;
+//                turnRight();
+//            }
+//            else if (nextMovement == 2){
+//                justTurned = true;
+//                turnLeft();
+//            }
+//            else if (nextMovement == 3){
+//                nCellEncoderAndIR(1);
+//            }
+//            else if (nextMovement == 4){
+//                justTurned = true;
+//                turnRight180();
+//            }
+//        }
+//        else{
+//            overrideFloodFill = false;
+//            if ((rand()%2 + 1) == 1){
+//                justTurned = true;
+//                turnLeft();
+//            }
+//            else{
+//                justTurned = true;
+//                turnRight();
+//            }
+//        }
+//        currEncoder0Count = encoder0.getPulses();
+//        currEncoder1Count = encoder1.getPulses();
+//       
+//        if (!justTurned && (currEncoder0Count <= prevEncoder0Count + 100) && (currEncoder1Count <= prevEncoder1Count + 100) && !overrideFloodFill){
+//            overrideFloodFill = true;
+//        }
+//
+//        wait_ms(300);                          // reduce this once we fine tune this!
 
         //wait_ms(1500);
         //turnRight();
@@ -1263,10 +1042,9 @@
         //break;
         //pidOnEncoders();
        // moveForwardUntilWallIr();
-        //serial.printf("%i, %i, %i\n", gyro.getGyroX(), gyro.getGyroY(), gyro.getGyroZ());
         //serial.printf("Pulse Count=> e0:%d, e1:%d      \r\n", encoder0.getPulses(),encoder1.getPulses());
-        // double currentError = ( (IRP_2.getSamples( SAMPLE_NUM ) - IRP_2.sensorAvg) ) - ( (IRP_3.getSamples( SAMPLE_NUM ) - IRP_3.sensorAvg) ) ;
-        //serial.printf("IRS= >: %f, %f, %f, %f, %f \r\n", IRP_1.getSamples( 100 ), IRP_2.getSamples( 100 ), IRP_3.getSamples( 100 ), IRP_4.getSamples(100), currentError );
+         double currentError = ( (IRP_2.getSamples( SAMPLE_NUM ) - IRP_2.sensorAvg) ) - ( (IRP_3.getSamples( SAMPLE_NUM ) - IRP_3.sensorAvg) ) ;
+        serial.printf("IRS= >: %f, %f, %f, %f, %f \r\n", IRP_1.getSamples( 100 ), IRP_2.getSamples( 100 ), IRP_3.getSamples( 100 ), IRP_4.getSamples(100), currentError );
  
         //reading = Rec_4.read();
 //        serial.printf("reading: %f\n", reading);
--- a/main.h	Sun May 21 13:04:21 2017 +0000
+++ b/main.h	Wed May 24 01:57:01 2017 +0000
@@ -134,4 +134,257 @@
                                   {14, 13, 12, 11, 10, 9, 8, 7, 7, 8, 9, 10, 11, 12, 13, 14},
                           };
 
+int distanceToCenter[16][16] = {
+                                  {14, 13, 12, 11, 10, 9, 8, 7, 7, 8, 9, 10, 11, 12, 13, 14},
+                                  {13, 12, 11, 10, 9, 8, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13},
+                                  {12, 11, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 9, 10, 11, 12},
+                                  {11, 10, 9, 8, 7, 6, 5, 4, 4, 5, 6, 7, 8, 9, 10, 11},
+                                  {10, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 6, 7, 8, 9, 10},
+                                  {9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9},
+                                  {8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8},
+                                  {7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7},
+                                  {7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7},
+                                  {8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8},
+                                  {9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9},
+                                  {10, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 6, 7, 8, 9, 10},
+                                  {11, 10, 9, 8, 7, 6, 5, 4, 4, 5, 6, 7, 8, 9, 10, 11},
+                                  {12, 11, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 9, 10, 11, 12},
+                                  {13, 12, 11, 10, 9, 8, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13},
+                                  {14, 13, 12, 11, 10, 9, 8, 7, 7, 8, 9, 10, 11, 12, 13, 14},
+                          };
+
+int distanceToStart[16][16] = {0};
+                          
+    
+                          
+/* Constants for when HIGH_PWM_VOLTAGE = 0.2
+#define IP_CONSTANT 6
+#define II_CONSTANT 0
+#define ID_CONSTANT 1
+*/
+ 
+// Constants for when HIGH_PWM_VOLTAGE = 0.1
+// #define IP_CONSTANT 8.85
+// #define II_CONSTANT 0.005
+// #define ID_CONSTANT 3.15
+#define IP_CONSTANT 8.2
+#define II_CONSTANT 0.06
+#define ID_CONSTANT 7.55
+ 
+const int desiredCount180 = 2870;
+const int desiredCountR = 1700;
+const int desiredCountL = 1700;
+ 
+const int oneCellCount = 5400;
+const int oneCellCountMomentum = 4550;//4800;      // one cell count is actually approximately 5400, but this value is considering momentum!
+ 
+float receiverOneReading = 0.0;
+float receiverTwoReading = 0.0;
+float receiverThreeReading = 0.0;
+float receiverFourReading = 0.0;
+
+float ir1base = 0.0;
+float ir2base = 0.0;
+
+float ir3base = 0.0;
+
+float ir4base = 0.0;
+
+float initAverageL = 8.25;
+float averageDivL = 27.8; //blue
+float initAverageR = 8.75; //4.5
+float averageDivR = 28.5; //red
+float averageDivUpper = 0.5;
+
+float noWallR = 0.007;
+float noWallL = 0.007;
+                          
+inline void turnLeft()
+{
+    double speed0 = 0.11;
+    double speed1 = -0.13;
+ 
+    int counter = 0;
+    int initial0 = encoder0.getPulses();
+    int initial1 = encoder1.getPulses();
+ 
+    int desiredCount0 = initial0 - desiredCountL;
+    int desiredCount1 = initial1 + desiredCountL;
+ 
+    int count0 = initial0;
+    int count1 = initial1;
+ 
+    double error0 = count0 - desiredCount0;
+    double error1 = count1 - desiredCount1;
+ 
+    while(1) {
+ 
+        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
+            count0 = encoder0.getPulses();
+            count1 = encoder1.getPulses();
+ 
+            error0 = count0 - desiredCount0;
+            error1 = count1 - desiredCount1;
+ 
+            right_motor.move(speed0);
+            left_motor.move(speed1);
+            counter = 0;
+        } else {
+            counter++;
+            right_motor.brake();
+            left_motor.brake();
+        }
+ 
+        if (counter > 60) {
+            break;
+        }
+    }
+ 
+    right_motor.brake();
+    left_motor.brake();
+    turnFlag = 0;           // zeroing out the flags!
+    currDir -= 1;
+}
+
+
+inline void turnRight()
+{
+    double speed0 = -0.11;
+    double speed1 = 0.13;
+ 
+    int counter = 0;
+    int initial0 = encoder0.getPulses();
+    int initial1 = encoder1.getPulses();
+ 
+    int desiredCount0 = initial0 + desiredCountR;
+    int desiredCount1 = initial1 - desiredCountR;
+ 
+    int count0 = initial0;
+    int count1 = initial1;
+ 
+    double error0 = count0 - desiredCount0;
+    double error1 = count1 - desiredCount1;
+ 
+    while(1) {
+ 
+        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
+            count0 = encoder0.getPulses();
+            count1 = encoder1.getPulses();
+ 
+            error0 = count0 - desiredCount0;
+            error1 = count1 - desiredCount1;
+ 
+            right_motor.move(speed0);
+            left_motor.move(speed1);
+            counter = 0;
+        } else {
+            counter++;
+            right_motor.brake();
+            left_motor.brake();
+        }
+ 
+        if (counter > 60) {
+            break;
+        }
+    }
+ 
+    right_motor.brake();
+    left_motor.brake();
+    turnFlag = 0;
+    currDir += 1;
+}
+ 
+inline void turnLeft180()
+{
+    double speed0 = 0.15;
+    double speed1 = -0.15;
+ 
+    int counter = 0;
+    int initial0 = encoder0.getPulses();
+    int initial1 = encoder1.getPulses();
+ 
+    int desiredCount0 = initial0 - desiredCountL*2;
+    int desiredCount1 = initial1 + desiredCountL*2;
+ 
+    int count0 = initial0;
+    int count1 = initial1;
+ 
+    double error0 = count0 - desiredCount0;
+    double error1 = count1 - desiredCount1;
+ 
+ 
+    while(1) {
+    
+        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
+            count0 = encoder0.getPulses();
+            count1 = encoder1.getPulses();
+ 
+            error0 = count0 - desiredCount0;
+            error1 = count1 - desiredCount1;
+ 
+            right_motor.move(speed0);
+            left_motor.move(speed1);
+            counter = 0;
+        } else {
+            counter++;
+            right_motor.brake();
+            left_motor.brake();
+        }
+ 
+        if (counter > 60) {
+            break;
+        }
+    }
+ 
+    right_motor.brake();
+    left_motor.brake();
+    currDir -= 2;
+}
+ 
+inline void turnRight180()
+{
+    double speed0 = -0.16;
+    double speed1 = 0.16;
+ 
+    int counter = 0;
+    int initial0 = encoder0.getPulses();
+    int initial1 = encoder1.getPulses();
+ 
+    int desiredCount0 = initial0 + desiredCount180;
+    int desiredCount1 = initial1 - desiredCount180;
+ 
+    int count0 = initial0;
+    int count1 = initial1;
+ 
+    double error0 = count0 - desiredCount0;
+    double error1 = count1 - desiredCount1;
+ 
+ 
+    while(1) {
+ 
+        if(!(abs(error0) < 1) && !(abs(error1) < 1)) {
+            count0 = encoder0.getPulses();
+            count1 = encoder1.getPulses();
+ 
+            error0 = count0 - desiredCount0;
+            error1 = count1 - desiredCount1;
+ 
+            right_motor.move(speed0);
+            left_motor.move(speed1);
+            counter = 0;
+        } else {
+            counter++;
+            right_motor.brake();
+            left_motor.brake();
+        }
+ 
+        if (counter > 60) {
+            break;
+        }
+    }
+    right_motor.brake();
+    left_motor.brake();
+    currDir += 2;
+}
+
 #endif
\ No newline at end of file