Thomas Ashworth / theRobot

Dependencies:   Adafruit-16-Ch-PWM-Servo-Driver HCSR04 PID PololuQik2 QEI Sharp mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
tashworth
Date:
Wed Apr 02 23:54:05 2014 +0000
Parent:
15:78f5e937f6ab
Child:
17:a5bb85ee205d
Commit message:
4-2-14

Changed in this revision

ShapeDetect.cpp Show annotated file Show diff for this revision Revisions of this file
ShapeDetect.h 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
--- a/ShapeDetect.cpp	Wed Apr 02 04:04:28 2014 +0000
+++ b/ShapeDetect.cpp	Wed Apr 02 23:54:05 2014 +0000
@@ -285,10 +285,13 @@
     pc.printf("Center of Mass is at X: %d    Y: %d\n\r", xcoord_val, ycoord_val, s_area_val);
     pc.printf("The area of the Mass is: %d\n\r", s_area_val);
     
-    if( (s_area_val > (SQUARE_AREA - AREA_TOLERANCE)) && (s_area_val < (SQUARE_AREA + AREA_TOLERANCE)) ) {
+    //if( (s_area_val > (SQUARE_AREA - AREA_TOLERANCE)) && (s_area_val < (SQUARE_AREA + AREA_TOLERANCE)) ) {
+    if( (s_area_val > 3500) ) {
         pc.printf("\nSQUARE DETECTECD\n\r");
         return 1;
-    } else if ((s_area_val > (TRIANGLE_AREA - AREA_TOLERANCE)) && (s_area_val < (TRIANGLE_AREA + AREA_TOLERANCE)) ) {
+    } 
+    //else if ((s_area_val > (TRIANGLE_AREA - AREA_TOLERANCE)) && (s_area_val < (TRIANGLE_AREA + AREA_TOLERANCE)) ) {
+        else if (s_area_val < 2600) {
         pc.printf("\nTRIANGLE DETECTECD\n\r");
         return 2;
     } else {
--- a/ShapeDetect.h	Wed Apr 02 04:04:28 2014 +0000
+++ b/ShapeDetect.h	Wed Apr 02 23:54:05 2014 +0000
@@ -2,11 +2,11 @@
 #define SHAPEDETECT_H_
 
 /* theshold for setting binary output */
-#define THRESHOLD 90 
+#define THRESHOLD 80 
 
 //areas from camera 11" from ground
-#define TRIANGLE_AREA        3000
-#define SQUARE_AREA         3400  
+#define TRIANGLE_AREA       2100
+#define SQUARE_AREA         3600  
 #define AREA_TOLERANCE      100         
 
 /* modes for image processing */
--- a/main.cpp	Wed Apr 02 04:04:28 2014 +0000
+++ b/main.cpp	Wed Apr 02 23:54:05 2014 +0000
@@ -82,11 +82,11 @@
 //******* TODO ********//
 //*********************//
 //Oil Rig distance thresholds
-#define OILRIG1_MAX     3000
+#define OILRIG1_MAX     2200
 #define OILRIG1_MIN     1000
-#define OILRIG2_MAX     5000
+#define OILRIG2_MAX     2200
 #define OILRIG2_MIN     1000
-#define OILRIG3_MAX     5000
+#define OILRIG3_MAX     2200
 #define OILRIG3_MIN     1000
 
 //for servo normalization
@@ -99,6 +99,7 @@
 DigitalOut myled2(LED2);
 DigitalOut myled3(LED3);
 DigitalOut myled4(LED4);
+InterruptIn startBtn(p7);
 
 void errFunction(void);
 bool cRc;
@@ -130,6 +131,7 @@
 void setServoPulseNo_delay(uint8_t n, int angle);
 void servoPosition(int set);
 int fire_checker(int rig);
+int button_start = 0;
 
 
 //Navigation Functions
@@ -154,6 +156,7 @@
 void alignWithWall(int section);
 void UntilWall(int dir);
 
+extern "C" void mbed_reset();
 
 /************
 Main Variables
@@ -192,7 +195,7 @@
 
 //increase in number 5 rotates gripper
 
-    {STORE_POSITION, 85, 5, 0, 165, 175, 0},              // storing position
+    {STORE_POSITION, 85, 10, 0, 165, 90, 0},              // storing position
     {OIL_RIG1, 160, 20, 60, 45, 175, 0},                 // point laser at oilrig1
     {OIL_RIG2, 163, 20, 60, 45, 175, 0},                // point laser at oilrig2
     {OIL_RIG3, 130, 90, 90, 52, 175, 0},                // point laser at oilrig2
@@ -202,9 +205,9 @@
     {TOOL_3, 57, 50, 80, 109, 175, 0},                  // Look over third tool
     {DRIVE_POSITION_TOOL, 55, 70, 102, 74, 0, 0},     // Drive with tool loaded
     {ORIENT_TOOL, 135, 60, 75, 60, 90, 90},             // position tool to be inserted
-    {PU_TOOL_1, 98, 50, 82, 118, 90, 0},                // STATIC Pickup tool POSITION
-    {PU_TOOL_2, 78, 50, 82, 108, 90, 0},                // STATIC Pickup tool POSITION
-    {PU_TOOL_3, 53, 50, 82, 118, 90, 0},                // STATIC Pickup tool POSITION
+    {PU_TOOL_1, 96, 46, 78, 104, 90, 0},               // STATIC Pickup tool POSITION
+    {PU_TOOL_2, 74, 47, 80, 105, 90, 0},                // STATIC Pickup tool POSITION
+    {PU_TOOL_3, 57, 44, 76, 104, 90, 0},                // STATIC Pickup tool POSITION
     {PU_TOOL_1_STAB, 98, 50, 90, 118, 90, 0},           // STAB TOOL 1
     {PU_TOOL_2_STAB, 78, 50, 90, 108, 90, 0},           // STAB TOOL 2
     {PU_TOOL_3_STAB, 53, 50, 90, 118, 90, 0},           // STAB TOOL 3
@@ -217,6 +220,7 @@
 int area;
 int shape;
 int shape_alignX_done = 0;
+int shape_alignY_done = 0;
 
 
 /* Variables for distance sensor*/
@@ -224,6 +228,18 @@
 int fire_detected = 0;
 int fire_not_detected = 0;
 
+void button_int(void)
+{
+    if(!button_start) {
+        button_start = 1;
+        wait(1.0);
+    } else {
+        button_start = 0;
+        mbed_reset();
+    }
+    return;
+}
+
 
 int main()
 {
@@ -240,6 +256,7 @@
     //Laser Range Finder Initialization
     lrf_baudCalibration();
     motors.begin();
+    startBtn.rise(&button_int);
 
     //Servo initialization
     initServoDriver();
@@ -247,414 +264,417 @@
     //ServoOutputDisable = 0;
 
 
-    /*******************
-    WHILE LOOP FOR TESTING
-    ********************/
-    //while(1) {
-    /*
-            pc.scanf("%d %d", &servoNum, &servoAngle);
-            if(servoAngle > 175) {
-                servoAngle = 175;
-            }
-            if(servoNum > 5 ) {
-                servoNum = 0;
-                servoAngle = 90;
-            }
-            setServoPulse(servoNum, servoAngle);
-            distLaser = getDistance();
-            pc.printf("Distance %d", distLaser);
-    */
-
-    /*
-            int shape_alignX_done = 0;
-            int shape_alignY_done = 0;
-
-
-            //pc.scanf("%d", &posNum);
-
-            while(pc.getc() != 'g');
-            servoPosition(TOOL_1);
-            while(pc.getc() != 'g');
-            //shape_detected = shapeDetection();
-
-            ImageToArray(GREYSCALE);
-            //clearBounds();
-            printImageToFile(GREYSCALE);
-            while(1);
-
-            while(shape_alignY_done == 0)  {
-                shape_detected = shapeDetection();
-                pc.printf("\nY movement\n");
-                if(get_com_y() >= 80) {
-                    setServoPulse(1, Arm_Table[TOOL_1].base_arm-=2);
-                    setServoPulse(2, Arm_Table[TOOL_1].big_arm-=1);
-                    //setServoPulse(3, Arm_Table[TOOL_1].claw_arm+=2);
-                } else if(get_com_y() > 70 && get_com_y() < 90) {
-                    setServoPulse(1, Arm_Table[TOOL_1].base_arm-=1);
-                    setServoPulse(2, Arm_Table[TOOL_1].big_arm-=1);
-                    //setServoPulse(3, Arm_Table[TOOL_1].claw_arm+=1);
-                } else if(get_com_y() <= 35 ) {
-                    setServoPulse(1, Arm_Table[TOOL_1].base_arm+=2);
-                    setServoPulse(2, Arm_Table[TOOL_1].big_arm+=1);
-                    //setServoPulse(3, Arm_Table[TOOL_1].claw_arm-=2);
-                } else if(get_com_y() < 50 && get_com_y() > 20) {
-                    setServoPulse(1, Arm_Table[TOOL_1].base_arm+=1);
-                    setServoPulse(2, Arm_Table[TOOL_1].big_arm+=1);
-                    //setServoPulse(3, Arm_Table[TOOL_1].claw_arm-=1);
-                } else {
-                    shape_alignY_done = 1;
-                }
-                }
-
-                while( shape_alignX_done == 0){
-                shape_detected = shapeDetection();
-                pc.printf("\nX movement\n");
-                if(get_com_x() > 95) {
-                    Arm_Table[TOOL_1].base_rotate+=1;
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate);
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate-1);
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate+1);
-
-
-                } else if(get_com_x() < 65) {
-                    Arm_Table[TOOL_1].base_rotate-=1;
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate);
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate-1);
-                    setServoPulse(0, Arm_Table[TOOL_1].base_rotate+1);
-
-                } else {
-                    shape_alignX_done = 1;
-                }
-
-
-            }
-            printImageToFile(BINARY);*/
-
-    // }
-
-
-
-
 
     /********************************
     MAIN WHILE LOOP FOR COMPETITION
     *********************************/
     while(1) {
+        if(button_start == 1) {
 
-        switch (state) {
+
+            switch (state) {
 
-                /**************************************************
-                *           STAGE 0
-                *
-                *          - START OF THE COMETITION
-                *
-                **************************************************/
-            case START :
-                myled1 = 1;
-                while(pc.getc() != 'g'); //waits for the letter g before starting program
-                myled1 = 0;
-                state = OILRIG1_POS;
-                break;
+                    /**************************************************
+                    *           STAGE 0
+                    *
+                    *          - START OF THE COMETITION
+                    *
+                    **************************************************/
+                case START :
+                    myled1 = 1;
+                    state = OILRIG1_POS;
+                    break;
 
 
-                /**************************************************
-                *           STAGE 1
-                *
-                *          - DETERMINE OIL RIG ON FIRE
-                *
-                **************************************************/
-            case OILRIG1_POS:                   //aims arm at square oil rig
+                    /**************************************************
+                    *           STAGE 1
+                    *
+                    *          - DETERMINE OIL RIG ON FIRE
+                    *
+                    **************************************************/
 
-                servoPosition(OIL_RIG1);
-                wait(3); //wait for servo to settle before laser distance
+                case OILRIG1_POS:                   //aims arm at square oil rig
 
-                fire = fire_checker(OIL_RIG1);  //determines if oil rig is on fire
+                    servoPosition(OIL_RIG1);
+                    wait(3); //wait for servo to settle before laser distance
+
+                    fire = fire_checker(OIL_RIG1);  //determines if oil rig is on fire
 
-                //determines what tool is needed
-                if (fire == 1) {
-                    pc.printf("FIRE FOUND!!!!!!!!\n\r");
-                    tool_needed = SQUARE;
-                    state = GOTO_TOOLS1;
-                } else {
-                    pc.printf("XXXXXX   FIRE NOT FOUND    XXXXXX");
-                    state = OILRIG2_POS;
-                }
-                break;
+                    //determines what tool is needed
+                    if (fire == 1) {
+                        pc.printf("FIRE FOUND!!!!!!!!\n\r");
+                        tool_needed = SQUARE;
+                        state = GOTO_TOOLS1;
+                    } else {
+                        pc.printf("XXXXXX   FIRE NOT FOUND    XXXXXX");
+                        state = OILRIG2_POS;
+                    }
+                    break;
+
+                case OILRIG2_POS:
 
-            case OILRIG2_POS:
-
-                servoPosition(DRIVE_POSITION_NOTOOL);
-                wait(3);                                //wait for servos to settle
+                    setServoPulse(2, Arm_Table[DRIVE_POSITION_NOTOOL].big_arm);
+                    setServoPulse(3, Arm_Table[DRIVE_POSITION_NOTOOL].claw_arm);
+                    setServoPulse(1, Arm_Table[DRIVE_POSITION_NOTOOL].base_arm);
+                    setServoPulse(0, Arm_Table[DRIVE_POSITION_NOTOOL].base_rotate);
+                    setServoPulse(4, Arm_Table[DRIVE_POSITION_NOTOOL].claw_rotate);
+                    setServoPulse(5, Arm_Table[DRIVE_POSITION_NOTOOL].claw_open);
+                    wait(3);                                //wait for servos to settle
 
-                to_tools_section2(location, current);   // moves to second rig
+                    to_tools_section2(location, current);   // moves to second rig
 
-                servoPosition(OIL_RIG2);    //position arm to point at first oilrig
-                wait(3);
+                    servoPosition(OIL_RIG2);    //position arm to point at first oilrig
+                    wait(3);
 
-                fire = fire_checker(OIL_RIG2);
-                if (fire == 1) {
-                    pc.printf("FIRE FOUND!!!!!!!!");
-                    tool_needed = TRIANGLE;
-                    state = GOTO_TOOLS2;
-                } else {
-                    pc.printf("XXXXXX   FIRE NOT FOUND    XXXXXX");
-                    tool_needed = CIRCLE;
-                    state = GOTO_TOOLS2;
-                }
-                break;
+                    fire = fire_checker(OIL_RIG2);
+                    if (fire == 1) {
+                        pc.printf("FIRE FOUND!!!!!!!!");
+                        tool_needed = TRIANGLE;
+                        state = GOTO_TOOLS2;
+                    } else {
+                        pc.printf("XXXXXX   FIRE NOT FOUND    XXXXXX");
+                        tool_needed = CIRCLE;
+                        state = GOTO_TOOLS2;
+                    }
+                    break;
 
-                /**************************************************
-                *           STAGE 2
-                *
-                *          - TRAVEL TO TOOLS
-                *
-                **************************************************/
-            case GOTO_TOOLS1:
+                    /**************************************************
+                    *           STAGE 2
+                    *
+                    *          - TRAVEL TO TOOLS
+                    *
+                    **************************************************/
+                case GOTO_TOOLS1:
+                    setServoPulse(2, Arm_Table[DRIVE_POSITION_NOTOOL].big_arm);
+                    setServoPulse(3, Arm_Table[DRIVE_POSITION_NOTOOL].claw_arm);
+                    setServoPulse(1, Arm_Table[DRIVE_POSITION_NOTOOL].base_arm);
+                    setServoPulse(0, Arm_Table[DRIVE_POSITION_NOTOOL].base_rotate);
+                    setServoPulse(4, Arm_Table[DRIVE_POSITION_NOTOOL].claw_rotate);
+                    setServoPulse(5, Arm_Table[DRIVE_POSITION_NOTOOL].claw_open);
+                    wait(3);                                //wait for servos to settle
+                    to_tools_section1(location, current);
+                    state = IDENTIFY_TOOLS;
+                    break;
 
-                servoPosition(DRIVE_POSITION_NOTOOL);
-                wait(3);                                //wait for servos to settle
-                to_tools_section1(location, current);
-                state = IDENTIFY_TOOLS;
-                break;
-
-            case GOTO_TOOLS2:
+                case GOTO_TOOLS2:
 
-                servoPosition(DRIVE_POSITION_NOTOOL);
-                wait(3);                                //wait for servos to settle
+                    setServoPulse(2, Arm_Table[DRIVE_POSITION_NOTOOL].big_arm);
+                    setServoPulse(3, Arm_Table[DRIVE_POSITION_NOTOOL].claw_arm);
+                    setServoPulse(1, Arm_Table[DRIVE_POSITION_NOTOOL].base_arm);
+                    setServoPulse(0, Arm_Table[DRIVE_POSITION_NOTOOL].base_rotate);
+                    setServoPulse(4, Arm_Table[DRIVE_POSITION_NOTOOL].claw_rotate);
+                    setServoPulse(5, Arm_Table[DRIVE_POSITION_NOTOOL].claw_open);
+                    wait(3);                                //wait for servos to settle
 
-                slightMove(FORWARD,3100);
-                current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
+                    slightMove(FORWARD,3100);
+                    current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
 
-                state = IDENTIFY_TOOLS;
-                break;
+                    state = IDENTIFY_TOOLS;
+                    break;
 
 
 
-                /**************************************************
-                *           STAGE 3
-                *
-                *           - Determine order of tools
-                *           - Aquire appropriate tool
-                *
-                **************************************************/
-            case IDENTIFY_TOOLS:
-
-                servoPosition(TOOL_2);              //arm/camera looks over tool
-                wait(5);                            //wait for servos to settle
-
-                //shape_detected = shapeDetection();  //determines the shape
-                //clearBounds();
-                //printImageToFile(BINARY);
+                    /**************************************************
+                    *           STAGE 3
+                    *
+                    *           - Determine order of tools
+                    *           - Aquire appropriate tool
+                    *
+                    **************************************************/
+                case IDENTIFY_TOOLS:
 
-                while( shape_alignX_done == 0) {
-                    shape_detected = shapeDetection();
-                    pc.printf("X - Adjust to center tool\n\r");
-                    if(get_com_x() > 95) {
-                        Arm_Table[TOOL_1].base_rotate+=1;
-
-                    } else if(get_com_x() < 65) {
-                        Arm_Table[TOOL_1].base_rotate-=1;
+                    wait(5);
+                    servoPosition(TOOL_2);              //arm/camera looks over tool
+                    wait(5);                            //wait for servos to settle
 
-                    } else {
-                        shape_alignX_done = 1;
-                    }
-                }
-
+                    //shape_detected = shapeDetection();  //determines the shape
+                    //clearBounds();
+                    //printImageToFile(BINARY);
+                    shape_alignX_done = 0;
+                    shape_alignY_done = 0;
 
-                //either goes to aquire the tool or look at the next shape
-                if(shape_detected == tool_needed) {
-                    state = AQUIRE_TOOL2;
-                } else {
-                    servoPosition(TOOL_1);
-                    wait(3);                        //wait for servos to settle
+                    while( shape_alignX_done == 0) {
+                        wait(1);
+                        shape_detected = shapeDetection();
 
-                    shape_alignX_done = 0;
-                    while( shape_alignX_done == 0) {
-
-                        shape_detected = shapeDetection();
                         pc.printf("X - Adjust to center tool\n\r");
                         if(get_com_x() > 95) {
-                            Arm_Table[TOOL_1].base_rotate+=1;
+                            setServoPulse(0,Arm_Table[TOOL_2].base_rotate+=1);
 
                         } else if(get_com_x() < 65) {
-                            Arm_Table[TOOL_1].base_rotate-=1;
+                            setServoPulse(0,Arm_Table[TOOL_2].base_rotate-=1);
 
                         } else {
                             shape_alignX_done = 1;
                         }
                     }
 
-                    if (shape_detected == tool_needed) {
-                        state = AQUIRE_TOOL1;
+                    //either goes to aquire the tool or look at the next shape
+                    if(shape_detected == tool_needed) {
+                        state = AQUIRE_TOOL2;
+                        break;
                     } else {
-                        servoPosition(TOOL_3);
-                        wait(3);                            //wait for servos to settle
+                        slightMove(FORWARD,25);
+                        current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
+
+
+                        servoPosition(TOOL_1);
+                        wait(5);                        //wait for servos to settle
+                        shape_alignX_done = 0;
+                        shape_alignY_done = 0;
+
+                        while( shape_alignY_done == 0) {
+                            wait(1);
+                            shape_detected = shapeDetection();
+
+                            pc.printf("Y - Adjust to center tool\n\r");
+
+                            if(get_com_y() < 40) {
+                                wait(1);
+                                slightMove(FORWARD,25);
+                                current-=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
+
+                            } else if(get_com_y() > 80) {
+                                wait(1);
+                                slightMove(BACKWARD,25);
+                                current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
+
+                            } else {
+                                shape_alignY_done = 1;
+                            }
+                        }
 
                         while( shape_alignX_done == 0) {
+                            wait(1);
                             shape_detected = shapeDetection();
+
                             pc.printf("X - Adjust to center tool\n\r");
-                            if(get_com_x() > 95) {
-                                Arm_Table[TOOL_1].base_rotate+=1;
+                            if(get_com_x() > 100) {
+                                setServoPulse(0,Arm_Table[TOOL_1].base_rotate+=1);
 
-                            } else if(get_com_x() < 65) {
-                                Arm_Table[TOOL_1].base_rotate-=1;
+                            } else if(get_com_x() < 60) {
+                                setServoPulse(0,Arm_Table[TOOL_1].base_rotate-=1);
 
                             } else {
                                 shape_alignX_done = 1;
                             }
                         }
 
-                        state = AQUIRE_TOOL3;
+                        if (shape_detected == tool_needed) {
+                            state = AQUIRE_TOOL1;
+                            break;
+                        } else {
+                            servoPosition(TOOL_3);
+                            wait(3);                            //wait for servos to settle
+                            state = AQUIRE_TOOL3;
+                        }
                     }
-                }
 
-                while(1);
-                break;
+                    break;
+
+                case AQUIRE_TOOL1:
 
-            case AQUIRE_TOOL1:
+                    servoPosition(PU_TOOL_1);
+                    setServoPulse(4, 130);
+                    wait(5);
+                    setServoPulse(0, Arm_Table[PU_TOOL_1].base_rotate );
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_1].base_arm - 5);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_1].base_arm - 6);
+                    wait(.5);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_1].base_arm - 8);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_1].base_arm);
 
-                servoPosition(PU_TOOL_1_STAB);
-                wait(2);
+                    while(1);
 
-                servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
-                state  = NAVIGATE_WAVES_ROW1;
-                break;
+                    servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
+                    state  = NAVIGATE_WAVES_ROW1;
+                    break;
 
-            case AQUIRE_TOOL2:
-                servoPosition(PU_TOOL_2_STAB);
-                wait(2);
+                case AQUIRE_TOOL2:
+                    servoPosition(PU_TOOL_2);
+                    setServoPulse(4, 170);
+                    wait(5);
+                    setServoPulse(0, Arm_Table[PU_TOOL_2].base_rotate );
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_2].base_arm - 5);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_2].base_arm - 6);
+                    wait(.5);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_2].base_arm - 8);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_2].base_arm);
+                    while(1);
 
-                servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
-                state  = NAVIGATE_WAVES_ROW1;
-                break;
+                    servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
+                    state  = NAVIGATE_WAVES_ROW1;
+                    break;
 
-            case AQUIRE_TOOL3:
-                servoPosition(PU_TOOL_3_STAB);
-                wait(2);
+                case AQUIRE_TOOL3:
+                    servoPosition(PU_TOOL_3);
+                    setServoPulse(4, 130);
+                    wait(5);
+                    setServoPulse(0, Arm_Table[PU_TOOL_3].base_rotate );
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_3].base_arm - 5);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_3].base_arm - 6);
+                    wait(.5);
+                    setServoPulse(5, 105);
+                    wait(.5);
+                    setServoPulse(5, 00);
+                    setServoPulse(1, Arm_Table[PU_TOOL_3].base_arm - 8);
+                    wait(1);
+                    setServoPulse(5, 105);
+                    wait(1);
+                    setServoPulse(1, Arm_Table[PU_TOOL_3].base_arm);
+                    while(1);
 
-
-                servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
-                state  = NAVIGATE_WAVES_ROW1;
-                break;
+                    servoPosition(DRIVE_POSITION_TOOL);     //arm position for driving with the tool
+                    state  = NAVIGATE_WAVES_ROW1;
+                    break;
 
 
-                /**************************************************
-                *           STAGE 4
-                *
-                *           - Navigate through the ocean
-                *
-                **************************************************/
+                    /**************************************************
+                    *           STAGE 4
+                    *
+                    *           - Navigate through the ocean
+                    *
+                    **************************************************/
 
-            case NAVIGATE_WAVES_ROW1:
-                //*********************//
-                //******* TODO ********//
-                //*********************//
-                // CODE TO NAVIGATE ROW1
-                state = NAVIGATE_WAVES_ROW2;
-                break;
+                case NAVIGATE_WAVES_ROW1:
+                    //*********************//
+                    //******* TODO ********//
+                    //*********************//
+                    // CODE TO NAVIGATE ROW1
+                    state = NAVIGATE_WAVES_ROW2;
+                    break;
+
+                case NAVIGATE_WAVES_ROW2:
+                    //*********************//
+                    //******* TODO ********//
+                    //*********************//
+                    // CODE TO NAVIGATE ROW2
+                    state = NAVIGATE_WAVES_ROW3;
+                    break;
+
+                case NAVIGATE_WAVES_ROW3:
+                    //*********************//
+                    //******* TODO ********//
+                    //*********************//
+                    // CODE TO NAVIGATE ROW3
 
-            case NAVIGATE_WAVES_ROW2:
-                //*********************//
-                //******* TODO ********//
-                //*********************//
-                // CODE TO NAVIGATE ROW2
-                state = NAVIGATE_WAVES_ROW3;
-                break;
+                    //goes to appropriate rig
+                    if(shape_detected == 1) {
+                        state = NAVIGATE_TO_SQUARE_RIG;
+                    } else if(shape_detected == 2) {
+                        state = NAVIGATE_TO_TRIANGLE_RIG;
+                    } else {
+                        state = NAVIGATE_TO_CIRCLE_RIG;
+                    }
+                    break;
 
-            case NAVIGATE_WAVES_ROW3:
-                //*********************//
-                //******* TODO ********//
-                //*********************//
-                // CODE TO NAVIGATE ROW3
-
-                //goes to appropriate rig
-                if(shape_detected == 1) {
-                    state = NAVIGATE_TO_SQUARE_RIG;
-                } else if(shape_detected == 2) {
-                    state = NAVIGATE_TO_TRIANGLE_RIG;
-                } else {
-                    state = NAVIGATE_TO_CIRCLE_RIG;
-                }
-                break;
+                    /**************************************************
+                    *           STAGE 5
+                    *
+                    *           - Travel to appropriate rig
+                    *
+                    **************************************************/
+                case NAVIGATE_TO_SQUARE_RIG:
+                    //NAVIGATION CODE HERE
+                    state = RIG_ALIGN;
+                    break;
+                case NAVIGATE_TO_TRIANGLE_RIG:
+                    //NAVIGATION CODE HERE
+                    state = RIG_ALIGN;
+                    break;
+                case NAVIGATE_TO_CIRCLE_RIG:
+                    //NAVIGATION CODE HERE
+                    state = RIG_ALIGN;
+                    break;
 
-                /**************************************************
-                *           STAGE 5
-                *
-                *           - Travel to appropriate rig
-                *
-                **************************************************/
-            case NAVIGATE_TO_SQUARE_RIG:
-                //NAVIGATION CODE HERE
-                state = RIG_ALIGN;
-                break;
-            case NAVIGATE_TO_TRIANGLE_RIG:
-                //NAVIGATION CODE HERE
-                state = RIG_ALIGN;
-                break;
-            case NAVIGATE_TO_CIRCLE_RIG:
-                //NAVIGATION CODE HERE
-                state = RIG_ALIGN;
-                break;
+                    /**************************************************
+                    *           STAGE 6
+                    *
+                    *           - Align with appropriate rig
+                    *
+                    **************************************************/
+                case RIG_ALIGN:
+
+                    //*********************//
+                    //******* TODO ********//
+                    //*********************//
+                    // CODE TO ALIGN ROBOT WITH RIG
 
-                /**************************************************
-                *           STAGE 6
-                *
-                *           - Align with appropriate rig
-                *
-                **************************************************/
-            case RIG_ALIGN:
+                    servoPosition(ORIENT_TOOL);
+                    wait(1);                        //wait for servos to settle
+                    state = INSERT_TOOL;
+                    break;
 
-                //*********************//
-                //******* TODO ********//
-                //*********************//
-                // CODE TO ALIGN ROBOT WITH RIG
-
-                servoPosition(ORIENT_TOOL);
-                wait(1);                        //wait for servos to settle
-                state = INSERT_TOOL;
-                break;
+                    /**************************************************
+                    *           STAGE 7
+                    *
+                    *           - Insert Tool
+                    *           - Extenguish fire
+                    *           - win contest
+                    *
+                    **************************************************/
 
-                /**************************************************
-                *           STAGE 7
-                *
-                *           - Insert Tool
-                *           - Extenguish fire
-                *           - win contest
-                *
-                **************************************************/
-
-            case INSERT_TOOL:
-                //*********************//
-                //******* TODO ********//
-                //*********************//
-                // CODE TO INSERT TOOL
-                break;
+                case INSERT_TOOL:
+                    //*********************//
+                    //******* TODO ********//
+                    //*********************//
+                    // CODE TO INSERT TOOL
+                    break;
 
-                /**************************************************
-                *           STAGE 8
-                *
-                *           - END COMPETITION
-                *
-                **************************************************/
-            case END:
-                servoPosition(STORE_POSITION);
-                myled1 = 1;
-                wait(.2);
-                myled2 = 1;
-                wait(.2);
-                myled3 = 1;
-                wait(.2);
-                myled4 = 1;
-                wait(.2);
-                break;
-            default:
+                    /**************************************************
+                    *           STAGE 8
+                    *
+                    *           - END COMPETITION
+                    *
+                    **************************************************/
+                case END:
+                    servoPosition(STORE_POSITION);
+                    myled1 = 1;
+                    wait(.2);
+                    myled2 = 1;
+                    wait(.2);
+                    myled3 = 1;
+                    wait(.2);
+                    myled4 = 1;
+                    wait(.2);
+                    break;
+                default:
 
-                break;
-        }
-    }
+                    break;
+            }
+        }   // End while loop
+
+    }   // End if for start button
 
 
-}
+}   // main loop
 
 
 
@@ -701,7 +721,13 @@
 void servoBegin(void)
 {
     pc.printf("Setting Initial Servo Position\n\r");
-    servoPosition(STORE_POSITION);
+    setServoPulseNo_delay(3, Arm_Table[STORE_POSITION].claw_arm);
+    setServoPulseNo_delay(2, Arm_Table[STORE_POSITION].big_arm);
+    wait(2);
+    setServoPulseNo_delay(1, Arm_Table[STORE_POSITION].base_arm);
+    setServoPulseNo_delay(0, Arm_Table[STORE_POSITION].base_rotate);
+    setServoPulseNo_delay(4, Arm_Table[STORE_POSITION].claw_rotate);
+    setServoPulseNo_delay(5, Arm_Table[STORE_POSITION].claw_open);
 }
 
 void setServoPulseNo_delay(uint8_t n, int angle)
@@ -1287,7 +1313,7 @@
 
 void to_tools_section1(float* location, float &current)
 {
-    slightMove(FORWARD,6500);
+    slightMove(FORWARD,6600);
     current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
 
 }