Dependencies:   mbed Motor_Driver Sensors MMA8451Q LocalPositionSystem

Fork of TDP_main by Ivelin Kozarev

Revision:
27:fc0fd2c0eebb
Parent:
25:bec5dc4c9f5e
Child:
28:d1e7daeb240e
--- a/main.cpp	Mon Mar 23 14:03:29 2015 +0000
+++ b/main.cpp	Mon Mar 23 14:07:35 2015 +0000
@@ -29,7 +29,7 @@
 int sensorsCheckSum; //varibale used for sensors mapping access
 int passedTime1,passedTime2;
 int oldValues[5] = {0};
-int cursor = 0;
+int cursor = 0, k = 0;
 
 
 void measureSensors () {
@@ -73,7 +73,7 @@
     wait(1); //give time to set up the system
     
     sensorTimer.start(); // start timer for sensors
-    float normalSpeed = 0.01f;
+//    float normalSpeed = 0.01f;
 /*
     while(1){
         if (pc.getc() == 'r') {
@@ -98,109 +98,135 @@
 //        }
     }
 */
-    int testOtherCases = 0; //needed for control statements
+//    int testOtherCases = 0; //needed for control statements
     while (1) {
        
         if (driveMode == REGULAR) {
-            measureSensors(); 
-            switch (sensorsCheckSum) {
+                measureSensors();
+                switch (sensorsCheckSum) {
                 case 0: // all black, turn around by 180 degrees or a possible turn on the left
-                        for (int k=0;k<5;k++) {        //left turn situation
-                            if (oldValues[k] == 194) {
-                                motors.stop();
-                                motors.setSteeringMode(NORMAL);
-                                motors.reverse();
-                                motors.setSpeed(0.1f);
-                                 motors.start();
-                                wait(1);
-                                motors.stop();
-                            } 
-                            else {            
-                                motors.stop();
-                                motors.setSteeringMode(NORMAL);
-                                motors.reverse();
-                                motors.setSpeed(0.1f);
-                                motors.start();
-                                wait(2);
-                                motors.stop();
-                                motors.setSteeringMode(PIVOT_CCW);
-                                motors.setSpeed(0.1f);
-                                    do
-                                    {
-                                         motors.start();
-                                         measureSensors();
-                                    } while (sensorsCheckSum != 96);
-                                    motors.stop();
-                                    motors.setSteeringMode(NORMAL);
-                             } 
-                        }
-                    break;
-                case 30: //all right are white, left all black >> turn right(move left wheel)
-                    motors.setSteeringMode(NORMAL);
-                    motors.forward();
-                    motors.setRightSpeed(0.15f);
-                    motors.setLeftSpeed(0.5f);
-                    break;
-        //        case 46: //left 5 white, right only 3 black >> turn right
-        //            motors.setRightSpeed(0.15f);
-        //            motors.setLeftSpeed(0.1f);
-        //            break;
-                case 94: //normal <<STARTING POSITION>>, half of right and half of left are white
-                    motors.setSteeringMode(NORMAL);
-                    motors.forward();
-                    motors.setSpeed(0.1f);
-                    motors.start();
-                    break;
-                case 104: //right all white, left half white >> turn right
-                    motors.setRightSpeed(0.1f);
-                    motors.setLeftSpeed(0.15f);
-                    break;
-        //        case 154: //right 4 white, left only 6 black >> turn left
-        //            break;
-                case 174: //left all white, right all black >> turn left (move right wheel)
-                    motors.setRightSpeed(0.05f);
-                    motors.setLeftSpeed(0.15f);
-                    break;
-                case 194 : //left all white, right half white >> go straight, turn right if 194 goes to 204        
-                    break;
-                case 204 : //all sensors are white
-                               
-                    for (int k=0;k<5;k++) {                 //situation when a square is entered, need to follow right line
-                        if (oldValues[k] == 194) {      //checks whether  black line on the right was present before
-                        motors.setRightSpeed(0.15f);
-                        motors.setLeftSpeed(0.05f);
-                        }
-                    
-                        if (oldValues[k] == 104) {          //right turn 90 situation
-                        motors.stop();
-                        motors.setSteeringMode(PIVOT_CW);
-                        motors.setRightSpeed(0.1f);
-                        motors.setLeftSpeed(0.1f);
+                    for (k=0;k<5;k++) {                             //left turn situation >> stop, go backwards
+                        if (oldValues[k] == 194) {
+                            motors.stop();
+                            motors.setSteeringMode(NORMAL);
+                            motors.reverse();
+                            motors.setSpeed(0.1f);
+                            motors.start();
+                            wait(2);
+                            motors.stop();
+                        } else {                                    //dead end situation >> stop, go a bit backwards so there is space for turning and turn CCW
+                            motors.stop();
+                            motors.setSteeringMode(NORMAL);
+                            motors.reverse();
+                            motors.setSpeed(0.1f);
+                            motors.start();
+                            wait(2);
+                            motors.stop();
+                            motors.setSteeringMode(PIVOT_CCW);
+                            motors.setSpeed(0.1f);
                             do
-                            {
+                            {   
                             motors.start();
                             measureSensors();
-                            } while (sensorsCheckSum != 94);
+                            } while (sensorsCheckSum != 96);
                             motors.stop();
-                            motors.setSteeringMode(NORMAL);
-                    }            
-                break;              
-                default: //checksum is zero , all are black    
-                testOtherCases = 1;
-                break;
+                        }
+                    } 
+            break;
+          case 30:                                                  //all right are white, left all black >> turn right(move left wheel faster)
+            motors.setSteeringMode(NORMAL);
+            motors.forward();
+            motors.setRightSpeed(0.1f);
+            motors.setLeftSpeed(0.05f);
+            do
+            {   
+            motors.start();
+            measureSensors();
+            } while (sensorsCheckSum == 30);
+            motors.stop();
+            break;
+
+        case 94: //normal <<STARTING POSITION>>, half of right and half of left are white
+            motors.setSteeringMode(NORMAL);
+            motors.forward();
+            motors.setSpeed(0.1f);
+            do
+            {   
+            motors.start();
+            measureSensors();
+            } while (sensorsCheckSum == 94);
+            motors.start();
+            break;
+        case 104: //right all white, left half white >> turn right
+            motors.setSteeringMode(NORMAL);
+            motors.forward();
+            motors.setSpeed(0.1f);
+            motors.start();
+            wait(1);
+            motors.stop();
+            motors.setRightSpeed(0.2f);
+            motors.setLeftSpeed(0.0f);
+            do
+            {   
+            motors.start();
+            measureSensors();
+            } while (sensorsCheckSum <= 94);
+            motors.stop();
+            break;
+        case 174: //left all white, right all black >> turn left (move right wheel)
+            motors.setSteeringMode(NORMAL);
+            motors.forward();
+            motors.setRightSpeed(0.05f);
+            motors.setLeftSpeed(0.1f);
+            do
+            {   
+            motors.start();
+            measureSensors();
+            } while (sensorsCheckSum == 174);
+            break;
+        case 194 : //left all white, right half white >> go straight, turn right if 194 goes to 204
+            motors.setSteeringMode(NORMAL);
+            motors.forward();
+            motors.setRightSpeed(0.05f);
+            motors.setLeftSpeed(0.1f);
+            do
+            {   
+            motors.start();
+            measureSensors();
+            } while (sensorsCheckSum == 194);
+            motors.stop();       //do while left is white
+            break;
+        case 204 : //all sensors are white                 
+            for (k=0;k<6;k++) {                 //situation when a square is entered, need to follow right line
+                if (oldValues[k] == 194) {      //checks whether  black line on the right was present before
+                    motors.setSteeringMode(NORMAL);
+                    motors.setRightSpeed(0.05f);
+                    motors.setLeftSpeed(0.1f);
+                    do
+                    {   
+                    motors.start();
+                    measureSensors();
+                    } while (sensorsCheckSum == 204);
+                    motors.stop();
                 }
-            
-            if (testOtherCases == 1) {
-                if (sensorsCheckSum < 96){ // adjust right
-                    }   
-                else   {//adjust left
-                    }
-                testOtherCases = 0;
-            }   
-            
-        }
-        else {// if driveMode == SQUARE)
+                if (oldValues[k] == 104) {          //right turn 90 situation
+                    motors.setSteeringMode(PIVOT_CW);
+                    motors.setRightSpeed(0.1f);
+                    motors.setLeftSpeed(0.1f);
+                    do
+                    {
+                    motors.start();
+                    measureSensors();
+                    } while (sensorsCheckSum != 94);
+                    motors.stop();
+                }            
+        break;              
+        default:
+            measureSensors(); 
+            break;
         }
     }
 }
+}
+}