ksdflsjdfljas

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

Fork of theRobot by Thomas Ashworth

Revision:
16:8bb212df81b7
Parent:
14:784acd735b8c
Child:
17:a5bb85ee205d
--- 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;
 
 }