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.
Revision 11:af3d70d153bb, committed 2014-06-02
- Comitter:
- vsal
- Date:
- Mon Jun 02 09:47:01 2014 +0000
- Parent:
- 10:86cb40bf1c17
- Commit message:
- Final from June 2
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 86cb40bf1c17 -r af3d70d153bb main.cpp
--- a/main.cpp Mon Jun 02 08:44:08 2014 +0000
+++ b/main.cpp Mon Jun 02 09:47:01 2014 +0000
@@ -126,73 +126,81 @@
}
}
-void smoothFollow(float position, float speed)//, int direction)
+void turnAround(float speed)
+{
+ float pos = myLinePos();
+ huey.right(speed/2);
+ while(pos > -0.1 && pos < 0.1)
+ {
+ pos = myLinePos();
+ }
+ pos = myLinePos();
+ while(pos > 0.05 || pos < -0.05)
+ {
+ pos = myLinePos();
+ }
+ while(pos > -0.1 && pos < 0.1)
+ {
+ pos = myLinePos();
+ }
+ pos = myLinePos();
+ while(pos > 0.05 || pos < -0.05)
+ {
+ pos = myLinePos();
+ }
+}
+
+//returns 1 for all turns, 0 for non turns, 2 for end of a task;
+int smoothFollow(float position, float speed, char direction)
{
float u = speed;
u = u * position;
-
- if(rightCorner() == 1)
+
+ if(rightCorner() == 1 && direction == 'R')
{
rightTurn(speed);
- /*int side = sideSensorsLight();
- huey.forward(speed/2);
- while(side == 0)
- {
- side = sideSensorsLight();
- }
- wait(0.20);
- float pos = myLinePos();
- huey.right(speed/2);
- while(pos > -0.1 && pos < 0.1)
- {
- pos = myLinePos();
- }
- pos = myLinePos();
- while(pos > 0.05 || pos < -0.05)
- {
- pos = myLinePos();
- }*/
+ huey.printf("R");
+ return 1;
}
- else if(leftCorner() == 1)
+ else if(leftCorner() == 1 && direction == 'L')
{
leftTurn(speed);
- /*
+ huey.printf("L");
+ return 1;
+ }
+ else if(sideSensorsDark() == 1 && direction == 'E')
+ {
+ turnAround(speed);
+ huey.stop();
+ return 2;
+ }
+ else if((rightCorner() == 1 || leftCorner() == 1) && direction == 'S')
+ {
int side = sideSensorsLight();
huey.forward(speed/2);
while(side == 0)
{
side = sideSensorsLight();
}
- wait(0.20);
-
- float pos = myLinePos();
- huey.left(speed/2);
- while(pos > -0.1 && pos < 0.1)
- {
- pos = myLinePos();
- }
- pos = myLinePos();
- while(pos > 0.05 || pos < -0.05)
- {
- pos = myLinePos();
- }*/
+ return 1;
}
else if(speed+u > 1)
{
huey.stop();
huey.printf("Fast Er");
- //return 0;
+ return 0;
}
else
{
huey.right_motor(speed-u);
huey.left_motor(speed+u);
+ return 0;
}
}
-
+/*
void slowStop(float speed, float waitTime, int steps)
{
float i;
@@ -204,7 +212,7 @@
}
huey.stop();
}
-
+*/
int pushToStart(void)
{
@@ -220,17 +228,17 @@
//Matrix of paths from one point to another: Right = R, Left = L, Straight = S
- char* map[6][6] =
+ char map[6][6][20] =
{
- {"", "LRLLR", "LRLSS", "LRLSRLL", "LRRLSLRRRL", "LRRLR"},
- {"LRRLR", "", "LLS", "LLRLL", "LSRLRRL", "LRSLR"},
- {"SSRLR", "SRR", "", "LLL", "LLRSRL", "SSSLR"},
- {"RLSRLR", "RLRR", "RR", "", "SSRL", "SRLRL"},
- {"RLLLRSRLLR", "RLLRLSR", "RLSLR", "RLSS", "", "RLLLRL"},
- {"LRLLR", "LRSLR", "LRSSS", "RLRLS", "RLRRRL", ""}
- };
+ {"", "LRLLRE", "LRLSSE", "LRLSRLLE", "LRRLSLRRRLE", "LRRLRE"},
+ {"LRRLRE", "", "LLSE", "LLRLLE", "LSRLRRLE", "LRSLRE"},
+ {"SSRLRE", "SRRE", "", "LLLE", "LLRSRLE", "SSSLRE"},
+ {"RLSRLRE", "RLRRE", "RRE", "", "SSRLE", "SRLRLE"},
+ {"RLLLRSRLLRE", "RLLRLSRE", "RLSLRE", "RLSSE", "", "RLLLRLE"},
+ {"LRLLRE", "LRSLRE", "LRSSSE", "RLRLSE", "RLRRRLE", ""}
+ };
-
+ int points[3] = {1,2,4};
@@ -333,14 +341,30 @@
{
-
- pos = myLinePos();
-
- smoothFollow(pos, speed);
-
+ huey.cls();
+ for(int p = 1; p < sizeof(points); p ++)
+ {
+ int s = points[p-1] - 1;
+ int f = points[p] - 1;
+ for(int i = 0; i < sizeof(map[s][f]); i++)
+ {
+ int change = 0;
+ while(change == 0)
+ {
+ pos = myLinePos();
+ change = smoothFollow(pos, speed, map[s][f][i]);
+ }
+ if(change == 2)
+ {
+ huey.stop();
+ wait(1);
+ break;
+ }
+ }
+ }
if(m3pi_IN[0]==0)
{
- slowStop(speed, 0.05, 3);
+ //slowStop(speed, 0.05, 3);
huey.stop();
btbee.printf("Object in Front");
while(m3pi_IN[0]==0)