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: FileSystem_POPS m3PI_TP_POPS_II2015v0 m3pi mbed
Fork of m3PI_TP_POPS_II2015v0 by
Revision 8:de6ca481b136, committed 2018-03-07
- Comitter:
- diogohideki
- Date:
- Wed Mar 07 10:24:57 2018 +0000
- Parent:
- 7:ca53c1bde37c
- Child:
- 9:5701616e3a2c
- Commit message:
- before change 7 mars;
Changed in this revision
| m3PI_TP_SETI.lib | Show annotated file Show diff for this revision Revisions of this file |
| main3.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/m3PI_TP_SETI.lib Tue Mar 06 08:35:43 2018 +0000 +++ b/m3PI_TP_SETI.lib Wed Mar 07 10:24:57 2018 +0000 @@ -1,1 +1,1 @@ -http://os.mbed.com/users/bouaziz/code/m3PI_TP_POPS_II2015v0/#b4b0c5219d2a +http://os.mbed.com/users/bouaziz/code/m3PI_TP_POPS_II2015v0/#ca53c1bde37c
--- a/main3.cpp Tue Mar 06 08:35:43 2018 +0000
+++ b/main3.cpp Wed Mar 07 10:24:57 2018 +0000
@@ -7,10 +7,12 @@
Serial xbee(p28,p27);
DigitalOut resetxbee(p26);
Serial pc(USBTX, USBRX); // For debugging and pc messages, uses commented out to prevent hanging
-//MSCFileSystem fs("fs");
+//MSCFileSystem fs("fs");
Timer t;
Ticker tick1;
-
+int cpt=0;
+char affichage[3]={0};
+char maze[100]={0};
BusOut myleds(LED1, LED2, LED3, LED4);
#define D_TERM 0.0
@@ -20,7 +22,7 @@
#define MAX 0.3
#define MIN -0.2
-#define seuil(x) (x>400 ? 1 : 0)
+#define seuil(x) (x>300 ? 1 : 0)
float current_pos_of_line,
previous_pos_of_line,
@@ -34,8 +36,8 @@
char chain[10];
int v;
-
-unsigned short tabsensor[5];
+
+unsigned short tabsensor[5];
volatile unsigned char sensors;
volatile char flag10ms;
@@ -57,8 +59,12 @@
void step() {
m3pi.forward(0.12);
- wait(0.18);
- // m3pi.stop();
+ wait(0.22);
+}
+
+void step2() {
+ m3pi.forward(0.12);
+ wait(0.06);
}
/*
@@ -73,62 +79,119 @@
char result;
current_state();
switch(sensors) {
- case 0x00:
+ case 0x00:
// Deadend
// Back
m3pi.cls();
- m3pi.print("Back", 5);
+ strcat(maze,"B");
+ cpt++;
+ //sprintf(affichage,"%d",cpt);
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ //m3pi.print("Case 7", 7);
m3pi.stop();
result = 2;
break;
- case 0x18: case 0x1C: case 0x1E:
+ case 0x1C: case 0x18: case 0x10:
// Forward/Left or Left Only
- step();
+ // m3pi.stop();
+ step();
current_state();
- if ((sensors == 0x04) || (sensors == 0x06) || (sensors == 0x0C) || (sensors == 0x14) || (sensors == 0x16) || (sensors == 0x07)) {
+ if ((sensors == 0x00) || (sensors == 0x10)) {
+ // Turn Left
+ m3pi.cls();
+ strcat(maze,"L");
+ //sprintf(affichage,"%d",cpt);
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ //m3pi.print("Left", 5);
+ result = 3;
+ } else {
// Forward
m3pi.cls();
- m3pi.print("Forw2", 5);
+ strcat(maze,"F");
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
result = 1;
- } else if (sensors == 0x1F) {
- // End
- m3pi.cls();
- m3pi.print("The End2", 8);
- result = 0;
- } else if((sensors == 0x00) || (sensors == 0x10) || (sensors == 0x18)) {
- // Turn Left
- m3pi.cls();
- m3pi.print("Left", 5);
- result = 3;
- } else {
- // Turn Right
- m3pi.cls();
- m3pi.print("Right2", 6);
- result = 4;
}
break;
- case 0x07: case 0x03:
+ case 0x07: case 0x03: case 0x01:
// Forward/Right or Right Only -> RF
// m3pi.stop();
m3pi.cls();
- m3pi.print("Right", 6);
+ strcat(maze,"R");
+ //sprintf(affichage,"%d",cpt);
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ //m3pi.print("Right", 6);
step();
result = 4;
break;
- case 0x1F: case 0x0F:
+ case 0x1F:
// 'T' or Intersection or End -> LR or RFL
// m3pi.stop();
step();
current_state();
+ // m3pi.print("End", 4);
if (sensors == 0x1F) {
// End
m3pi.cls();
- m3pi.print("The End", 8);
- result = 0;
+ strcat(maze,"E");
+ cpt++;
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ result = 6;
} else {
// Turn Right
m3pi.cls();
- m3pi.print("Inter", 6);
+ strcat(maze, "R");
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ result = 4;
+ }
+ break;
+ case 0x0F: case 0x1E:
+ // 'T' or Intersection or End -> LR or RFL
+ // m3pi.stop();
+ step2();
+ current_state();
+ // m3pi.print("End", 4);
+ if (sensors == 0x1F) {
+ // End
+ step2();
+ step2();
+ m3pi.cls();
+ strcat(maze,"E");
+ cpt++;
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ result = 0;
+ } else if ((sensors == 0x10) || (sensors == 0x18)) {
+ // Turn Left
+ step2();
+ step2();
+ m3pi.cls();
+ strcat(maze,"L");
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ result = 3;
+ } else if ((sensors == 0x14) || (sensors == 0x16) || (sensors == 0x06) || (sensors == 0x1C)) {
+ // Forward
+ step2();
+ step2();
+ m3pi.cls();
+ strcat(maze,"F");
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
+ result = 1;
+ } else {
+ // Turn Right
+ step2();
+ step2();
+ m3pi.cls();
+ strcat(maze, "R");
+ m3pi.locate(0,1);
+ m3pi.printf(maze);
result = 4;
}
break;
@@ -162,7 +225,7 @@
result = 0;
break;
}
- return result;
+ return result;
}
}
@@ -181,56 +244,192 @@
switch(command) {
case 2:
// Turn Back
+ //m3pi.cls();
+ //m3pi.print("Back", 5);
if(sensors != 0x01) {
m3pi.right(speed);
result = 2;
} else {
- m3pi.right(0.12);
- wait(0.12);
+ do{
+ current_state();
+ m3pi.right(0.4*speed);
+ }while(sensors!=0x04 && sensors!=0x0E && sensors!=0x0A && sensors!=0x1B && sensors!=0x1F);
+ //wait(0.12);
m3pi.stop();
result = 1;
}
break;
case 3:
// Turn Left
+ //m3pi.cls();
+ //m3pi.print("Left", 5);
if(sensors != 0x10) {
m3pi.left(speed);
result = 3;
} else {
- m3pi.left(0.12);
- wait(0.1);
+ do{
+ current_state();
+ m3pi.left(0.4*speed);
+ }while(sensors!=0x04);
+ //wait(0.1);
m3pi.stop();
result = 1;
}
break;
case 4:
// Turn Right
+ //m3pi.cls();
+ //m3pi.print("Right", 6);
if(sensors != 0x01) {
m3pi.right(speed);
result = 4;
} else {
- m3pi.right(0.12);
- wait(0.1);
+ do{
+ current_state();
+ m3pi.right(0.4*speed);
+ }while(sensors!=0x04 && sensors!=0x0E && sensors!=0x0A && sensors!=0x1B && sensors!=0x1F);
+ //wait(0.1);
m3pi.stop();
result = 1;
}
- break;
+ break;
}
return result;
}
}
-
+void optimiser(char s[])
+{
+ char buffer[3];
+ for(int i = 0; i < 1; i++)
+ {
+
+ }
+}
+
+/* 1 -> PID
+ * 2 -> Turn back
+ * 3 -> Turn left
+ * 4 -> Turn right
+ */
+char labyrinth(char result)
+{
+ if(result==6)
+ {
+ char s[100];
+ int j=0;
+ strcpy(s,maze);
+ optimiser(s);
+ current_state();
+ if((sensors == 0x00) ||(sensors == 0x1C) ||(sensors == 0x18) ||(sensors == 0x10) ||(sensors == 0x07) ||(sensors == 0x03) ||(sensors == 0x1F) ||(sensors == 0x0F) ||(sensors == 0x1E) )
+ {
+ switch (s[j])
+ {
+ case 'R':
+ result=4;
+ break;
+ case 'B':
+ result=2;
+ break;
+ case 'L':
+ result=3;
+ break;
+ case 'F':
+ result=1;
+ break;
+ default:
+ result=0;
+ break;
+ }
+ j++;
+ }
+
+ }
+ return result;
+}
+
+char *replaceWord(const char *s, const char *oldW, const char *newW) {
+ char *result;
+ int i, cnt = 0;
+ int newWlen = strlen(newW);
+ int oldWlen = strlen(oldW);
+
+ // Counting the number of times old word
+ // occur in the string
+ for (i = 0; s[i] != '\0'; i++){
+ if (strstr(&s[i], oldW) == &s[i]){
+ cnt++;
+
+ // Jumping to index after the old word.
+ i += oldWlen - 1;
+ }
+ }
+
+ // Making new string of enough length
+ result = (char *)malloc(i + cnt * (newWlen - oldWlen) + 1);
+
+ i = 0;
+ while (*s){
+ // compare the substring with the result
+ if (strstr(s, oldW) == s){
+ strcpy(&result[i], newW);
+ i += newWlen;
+ s += oldWlen;
+ } else
+ result[i++] = *s++;
+ }
+
+ result[i] = '\0';
+ return result;
+}
+
+int find(char str[], char c) {
+ unsigned char len = strlen(str);
+ int i;
+
+ for(i = 0; i < len; i++){
+ if(str[i] == c)
+ return 1;
+ }
+
+ return 0;
+}
+
+char *optimisation(char *str) {
+ char *buf1 = str;
+ char *buf2;
+
+ while(find(buf1,'B'))
+ {
+ buf2 = replaceWord(buf1, "RBR", "F");
+ buf1 = replaceWord(buf2, "RBL", "B");
+ buf2 = replaceWord(buf1, "RBF", "L");
+
+ buf1 = replaceWord(buf2, "LBR", "B");
+ buf2 = replaceWord(buf1, "LBL", "F");
+ buf1 = replaceWord(buf2, "LBF", "R");
+
+ buf2 = replaceWord(buf1, "FBR", "L");
+ buf1 = replaceWord(buf2, "FBL", "R");
+ buf2 = replaceWord(buf1, "FBF", "B");
+
+ buf1 = buf2;
+ }
+
+ return buf1;
+}
+
int main() {
+#if 1
resetxbee=0;
wait(0.01);
resetxbee =1;
-
+
// FILE *p= fopen("/fs/tt.txt","a+");
m3pi.sensor_auto_calibrate();
wait(1.);
tick1.attach(&inter1,0.01);
-
+
// fprintf(p,"ecrire dans la cle USB\r\n");
// fclose(p);
@@ -251,7 +450,31 @@
// 4 -> Right
command = turn(command);
break;
- }
+ case 6:
+ command = labyrinth(command);
+ break;
+ }
}
}
-}
\ No newline at end of file
+#else
+ char str[] = "xxforxx";
+ char c[] = "xx";
+ char d[] = "y";
+
+ char *result = NULL;
+
+ // oldW string
+ m3pi.cls();
+ m3pi.printf("Old: %sn", str);
+
+ result = replaceWord(str, c, d);
+ m3pi.cls();
+ m3pi.printf("%s", result);
+
+ free(result);
+ return 0;
+
+
+#endif
+}
+
