Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Adafruit-16-Ch-PWM-Servo-Driver HCSR04 PID PololuQik2 QEI Sharp mbed-rtos
Revision 16:8bb212df81b7, committed 2014-04-02
- 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
--- 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 ¤t)
{
- slightMove(FORWARD,6500);
+ slightMove(FORWARD,6600);
current+=(abs(leftEncoder.getPulses()*11.12/PPR) + abs(rightEncoder.getPulses()*11.12/PPR))/2;
}