Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.

Dependencies:   debug mbed

CtrlBridge

  • fonction quelquonque pour communiquer avec les module
  • fonction quelquonque pour faire des recherche dans les module dispo
  • autre fonction pour jouer avec MemRegistre

Version 1.2.0

  • Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32
Committer:
salco
Date:
Mon Oct 05 23:46:11 2015 +0000
Revision:
38:57d5f36a0333
Parent:
37:f53e9f7a14df
Child:
39:34d7802e8d15
analise du labirinte pas fini pas implementer mais le plus gros de la carcasse est mont? reste a faire les point technique

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 2:4c5b0f6d0a6b 1
salco 2:4c5b0f6d0a6b 2 #include "directive.h"
salco 36:474d4795aafa 3
salco 31:ed23647fd16e 4 Serial pc(SERIAL_TX, SERIAL_RX);
salco 28:ac5c6350ed9a 5 int tabIR[12][2]= {
salco 28:ac5c6350ed9a 6 {80, 400},{50, 600},{40, 700},{30, 900},{25,1100},
salco 28:ac5c6350ed9a 7 {20,1300},{15,1600},{10,2400},{ 8,2700},{ 7,3000},
salco 28:ac5c6350ed9a 8 { 6,3200},{ 5,3100}
salco 28:ac5c6350ed9a 9 };
salco 28:ac5c6350ed9a 10
salco 28:ac5c6350ed9a 11
salco 28:ac5c6350ed9a 12
salco 28:ac5c6350ed9a 13
salco 28:ac5c6350ed9a 14
salco 2:4c5b0f6d0a6b 15
salco 2:4c5b0f6d0a6b 16 Directive::Directive():TTask(0)//on veux que cette tache sois exec toute les fois que TTaskGen sexecute.
salco 2:4c5b0f6d0a6b 17 {
salco 28:ac5c6350ed9a 18 /* initialize random seed: */
salco 31:ed23647fd16e 19 srand (time(NULL));
salco 33:c8b4e5a392e6 20 myMaze = new Labyrinthe();
salco 33:c8b4e5a392e6 21
salco 28:ac5c6350ed9a 22 myMaze->setDirection(UP);
salco 28:ac5c6350ed9a 23 //c=0;
salco 35:d81f6b927932 24 ssc32 = new Serial(PB_6, PB_7);
salco 27:ea60d12dccdf 25 ctrDesPattes = new Faculter_motrice(ssc32/*pc*/);
salco 28:ac5c6350ed9a 26 m_valueCapteurUltrasonic = 0;
salco 28:ac5c6350ed9a 27 m_valueCapteurIR = 0;
salco 28:ac5c6350ed9a 28 m_valueCapteurProximiter = 0;
salco 28:ac5c6350ed9a 29 for(int i =0; i<10; i++)tableauDeCommange[i]= 0;
salco 28:ac5c6350ed9a 30 size_tableauDeCommange=0;
salco 36:474d4795aafa 31 debug("\n\r set explorer \n\r");
salco 36:474d4795aafa 32 myMaze->setMyPos(Labyrinthe::explorer);
salco 35:d81f6b927932 33 //myMaze->setC(EXPLORER,C5);
salco 19:0ac80045ba4c 34 //m_CtrlBridge = m_CtrlBridge->getInstance();
salco 19:0ac80045ba4c 35 //a enlever de commentaire//m_ListDesModules = m_CtrlBridge->findModule(0,1,0,0);
salco 27:ea60d12dccdf 36
salco 27:ea60d12dccdf 37 //Serial pc(USBTX, USBRX);
salco 27:ea60d12dccdf 38
salco 27:ea60d12dccdf 39 //ssc32->set_flow_control(0);
salco 31:ed23647fd16e 40
salco 35:d81f6b927932 41
salco 35:d81f6b927932 42 //debug("\n\r directive Init");
salco 27:ea60d12dccdf 43 m_ListDesModules = m_CtrlBridge->findModule(0,CAPTEUR,DISTANCE,0);
salco 27:ea60d12dccdf 44 m_ListDesModules.append(m_CtrlBridge->findModule(0,CAPTEUR,PROXIMITEE,0));
salco 28:ac5c6350ed9a 45
salco 27:ea60d12dccdf 46 m_capteurUltrasonic= m_CtrlBridge->findModule(0,CAPTEUR,ULTRASONIQUE,0x27/*0b100111*/);
salco 35:d81f6b927932 47 if(!(m_capteurUltrasonic.empty())) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurUltrasonic found");
salco 35:d81f6b927932 48 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurUltrasonic not found");
salco 27:ea60d12dccdf 49 m_capteurIR= m_CtrlBridge->findModule(0,CAPTEUR,DISTANCE,0x27/*0b100111*/);
salco 35:d81f6b927932 50 if(!(m_capteurIR.empty())) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurIR found");
salco 34:dfd82c744b26 51 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurIR not found");
salco 27:ea60d12dccdf 52 m_capteurProximiter= m_CtrlBridge->findModule(0,CAPTEUR,PROXIMITEE,0x0E/*0b001110*/);
salco 36:474d4795aafa 53 if(!(m_capteurProximiter.empty()))debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurProximiter found\n\r");
salco 36:474d4795aafa 54 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurProximiter not found\n\r");
salco 28:ac5c6350ed9a 55
salco 28:ac5c6350ed9a 56 ctrDesPattes->moveUp();
salco 28:ac5c6350ed9a 57
salco 28:ac5c6350ed9a 58 bool getUp=true;
salco 28:ac5c6350ed9a 59 while((getUp)&& (! ctrDesPattes->isSeqComplet())) {
salco 28:ac5c6350ed9a 60 ctrDesPattes->exec();
salco 28:ac5c6350ed9a 61
salco 28:ac5c6350ed9a 62 if(ctrDesPattes->get_idFrame() >= 5)
salco 28:ac5c6350ed9a 63 getUp = false;
salco 28:ac5c6350ed9a 64
salco 28:ac5c6350ed9a 65 }
salco 31:ed23647fd16e 66
salco 28:ac5c6350ed9a 67 ctrDesPattes->calibre();
salco 31:ed23647fd16e 68
salco 35:d81f6b927932 69 #ifdef DEBUG_DIRECTIVE_GRAPHICAL_INTERFACE
salco 38:57d5f36a0333 70 //analiseMaze();
salco 38:57d5f36a0333 71 ///wait(2);
salco 38:57d5f36a0333 72 //debug("\x1B[2J"); //clear screen
salco 35:d81f6b927932 73 /*debug("\x1B[25l");//hide cursor
salco 35:d81f6b927932 74 debug("\x1B[;H");*/ //cursor default position
salco 31:ed23647fd16e 75
salco 35:d81f6b927932 76 //createSLbox(0,0,5,15,"Mode");
salco 35:d81f6b927932 77 /*createDLbox(0,0,10,20,"Menu");//(1,12,10,20,"test2");
salco 31:ed23647fd16e 78 setText(1,3,"1) BrainControle");
salco 35:d81f6b927932 79 setText(1,4,"2) Show Maze");*/
salco 31:ed23647fd16e 80 //createDLbox(16,0,5,15,"Stage");
salco 31:ed23647fd16e 81
salco 38:57d5f36a0333 82 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C1);
salco 38:57d5f36a0333 83 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C2);
salco 38:57d5f36a0333 84 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C3);
salco 38:57d5f36a0333 85 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C4);
salco 38:57d5f36a0333 86 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C5);
salco 38:57d5f36a0333 87 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C6);
salco 38:57d5f36a0333 88 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C7);
salco 38:57d5f36a0333 89 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C8);
salco 38:57d5f36a0333 90 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C9);
salco 35:d81f6b927932 91
salco 38:57d5f36a0333 92 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C1);
salco 38:57d5f36a0333 93 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C2);
salco 38:57d5f36a0333 94 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C3);
salco 38:57d5f36a0333 95 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C4);
salco 38:57d5f36a0333 96 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C5);
salco 38:57d5f36a0333 97 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C6);
salco 38:57d5f36a0333 98 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C7);
salco 38:57d5f36a0333 99 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C8);
salco 38:57d5f36a0333 100 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C9);
salco 38:57d5f36a0333 101
salco 38:57d5f36a0333 102 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C1);
salco 38:57d5f36a0333 103 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C2);
salco 38:57d5f36a0333 104 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C3);
salco 38:57d5f36a0333 105 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C4);
salco 38:57d5f36a0333 106 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C5);
salco 38:57d5f36a0333 107 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C6);
salco 38:57d5f36a0333 108 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C7);
salco 38:57d5f36a0333 109 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C8);
salco 38:57d5f36a0333 110 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C9);
salco 38:57d5f36a0333 111
salco 38:57d5f36a0333 112 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C1);
salco 38:57d5f36a0333 113 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C2);
salco 38:57d5f36a0333 114 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C3);
salco 38:57d5f36a0333 115 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C4);
salco 38:57d5f36a0333 116 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C5);
salco 38:57d5f36a0333 117 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C6);
salco 38:57d5f36a0333 118 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C7);
salco 38:57d5f36a0333 119 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C8);
salco 38:57d5f36a0333 120 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C9);
salco 38:57d5f36a0333 121
salco 38:57d5f36a0333 122 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C1);
salco 38:57d5f36a0333 123 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C2);
salco 38:57d5f36a0333 124 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C3);
salco 38:57d5f36a0333 125 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C4);
salco 38:57d5f36a0333 126 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C5);
salco 38:57d5f36a0333 127 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C6);
salco 38:57d5f36a0333 128 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C7);
salco 38:57d5f36a0333 129 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C8);
salco 38:57d5f36a0333 130 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C9);
salco 38:57d5f36a0333 131
salco 38:57d5f36a0333 132 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C1);
salco 38:57d5f36a0333 133 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C2);
salco 38:57d5f36a0333 134 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C3);
salco 38:57d5f36a0333 135 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C4);
salco 38:57d5f36a0333 136 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C5);
salco 38:57d5f36a0333 137 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C6);
salco 38:57d5f36a0333 138 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C7);
salco 38:57d5f36a0333 139 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C8);
salco 38:57d5f36a0333 140 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C9);
salco 31:ed23647fd16e 141 #endif
salco 2:4c5b0f6d0a6b 142 }
salco 2:4c5b0f6d0a6b 143 Directive::~Directive()
salco 2:4c5b0f6d0a6b 144 {
salco 11:496453b45e25 145
salco 3:e0d6e081a9d3 146 if(ctrDesPattes)
salco 3:e0d6e081a9d3 147 delete ctrDesPattes;
salco 19:0ac80045ba4c 148 if(ssc32)
salco 19:0ac80045ba4c 149 delete ssc32;
salco 31:ed23647fd16e 150 if(myMaze)
salco 28:ac5c6350ed9a 151 delete myMaze;
salco 2:4c5b0f6d0a6b 152 }
salco 3:e0d6e081a9d3 153 void Directive::task(void)//ALL CODE HERE//
salco 2:4c5b0f6d0a6b 154 {
salco 31:ed23647fd16e 155
salco 31:ed23647fd16e 156 #ifdef DEBUG_BOOT_GRAPHICAL_INTERFACE
salco 37:f53e9f7a14df 157 debug("\x1B[2J"); //clear screen
salco 37:f53e9f7a14df 158 debug("\x1B[25l");//hide cursor
salco 37:f53e9f7a14df 159 debug("\x1B[;H"); //cursor default position
salco 38:57d5f36a0333 160 debug("\n\r--------In task directive--------");
salco 37:f53e9f7a14df 161 /*
salco 37:f53e9f7a14df 162 createDLbox(0,0,10,25,"BrainControle");
salco 37:f53e9f7a14df 163 setText(1,3,"1) Move Up");
salco 37:f53e9f7a14df 164 setText(1,4,"2) Move Down");
salco 37:f53e9f7a14df 165 setText(1,5,"3) Move Left");
salco 37:f53e9f7a14df 166 setText(1,6,"4) Move Right");
salco 37:f53e9f7a14df 167
salco 37:f53e9f7a14df 168 int idCommand;
salco 37:f53e9f7a14df 169 do{
salco 37:f53e9f7a14df 170 if(pc.readable()){
salco 37:f53e9f7a14df 171 idCommand = fgetc(pc) - '0';
salco 37:f53e9f7a14df 172 switch(idCommand)
salco 37:f53e9f7a14df 173 {
salco 37:f53e9f7a14df 174 case 1:
salco 37:f53e9f7a14df 175 myMaze->goUp();
salco 37:f53e9f7a14df 176 break;
salco 37:f53e9f7a14df 177 case 2:
salco 37:f53e9f7a14df 178 myMaze->goDown();
salco 37:f53e9f7a14df 179 break;
salco 37:f53e9f7a14df 180 case 3:
salco 37:f53e9f7a14df 181 myMaze->goLeft();
salco 37:f53e9f7a14df 182 break;
salco 37:f53e9f7a14df 183 case 4:
salco 37:f53e9f7a14df 184 myMaze->goRight();
salco 37:f53e9f7a14df 185 break;
salco 37:f53e9f7a14df 186 }
salco 37:f53e9f7a14df 187 myMaze->setMyPos(Labyrinthe::explorer);
salco 37:f53e9f7a14df 188
salco 37:f53e9f7a14df 189 string mymap = myMaze->showMap();
salco 37:f53e9f7a14df 190 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r Labyrinthe map: X:%02x Y:%02x \n\r",myMaze->getX(),myMaze->getY());
salco 37:f53e9f7a14df 191 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i+6]);
salco 37:f53e9f7a14df 192 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 37:f53e9f7a14df 193 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i+3]);
salco 37:f53e9f7a14df 194 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 37:f53e9f7a14df 195 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i]);
salco 37:f53e9f7a14df 196 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 37:f53e9f7a14df 197
salco 37:f53e9f7a14df 198 #ifdef DBG_MAIN_DELAY_SEC
salco 37:f53e9f7a14df 199 debug("\n\r\n wait \n\r\n");
salco 37:f53e9f7a14df 200 wait(DBG_MAIN_DELAY_SEC);
salco 37:f53e9f7a14df 201 #endif
salco 37:f53e9f7a14df 202
salco 37:f53e9f7a14df 203 debug("\x1B[2J"); //clear screen
salco 37:f53e9f7a14df 204 debug("\x1B[;H"); //cursor default position
salco 37:f53e9f7a14df 205 createDLbox(0,0,10,25,"BrainControle");
salco 37:f53e9f7a14df 206 setText(1,3,"1) Move Up");
salco 37:f53e9f7a14df 207 setText(1,4,"2) Move Down");
salco 37:f53e9f7a14df 208 setText(1,5,"3) Move Left");
salco 37:f53e9f7a14df 209 setText(1,6,"4) Move Right");
salco 37:f53e9f7a14df 210 }
salco 37:f53e9f7a14df 211 }while(1); */
salco 31:ed23647fd16e 212 #endif
salco 36:474d4795aafa 213
salco 28:ac5c6350ed9a 214 //debug(DEBUG_DIRECTIVE_TEST,"\n\rIn task directive");
salco 37:f53e9f7a14df 215 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 216 if(ctrDesPattes->isSeqComplet()) {
salco 37:f53e9f7a14df 217
salco 28:ac5c6350ed9a 218 if((tableauDeCommange[0] == 6) && (size_tableauDeCommange == 1)) {
salco 28:ac5c6350ed9a 219 //addTableauDeCommande(0x81);
salco 28:ac5c6350ed9a 220 //addTableauDeCommande(0x82);
salco 28:ac5c6350ed9a 221 //mabey//addTableauDeCommande(0x83);
salco 28:ac5c6350ed9a 222 addTableauDeCommande(0x84);
salco 28:ac5c6350ed9a 223
salco 28:ac5c6350ed9a 224 //addTableauDeCommande(0x85);
salco 28:ac5c6350ed9a 225 //mabey//addTableauDeCommande(0x86);
salco 28:ac5c6350ed9a 226 addTableauDeCommande(0x87);
salco 28:ac5c6350ed9a 227 addTableauDeCommande(0x88);
salco 28:ac5c6350ed9a 228 }
salco 37:f53e9f7a14df 229
salco 37:f53e9f7a14df 230
salco 28:ac5c6350ed9a 231 if(tableauDeCommange[0] == 0) {
salco 28:ac5c6350ed9a 232 //pas sur que c'Est tout ce qui doit etre ici mais je vois pas quoi d'autre pour le moment.
salco 28:ac5c6350ed9a 233
salco 28:ac5c6350ed9a 234 ////////////////
salco 28:ac5c6350ed9a 235 // Inspection //
salco 28:ac5c6350ed9a 236 ////////////////
salco 28:ac5c6350ed9a 237 //flag.append(1,0);//0x02);
salco 28:ac5c6350ed9a 238 /*for(int i=0; i<m_ListDesModules.length(); ++i) {
salco 28:ac5c6350ed9a 239 wait_us(300);
salco 28:ac5c6350ed9a 240 flag.clear();
salco 28:ac5c6350ed9a 241 flag.append(1,7);
salco 28:ac5c6350ed9a 242 data.clear();
salco 28:ac5c6350ed9a 243 debug("\n\r result: %d",m_CtrlBridge->send(m_ListDesModules.at(i),flag,data));
salco 28:ac5c6350ed9a 244
salco 28:ac5c6350ed9a 245 debug("\n\r flag: %d",flag[0]);
salco 28:ac5c6350ed9a 246 debug("\n\r data: %x",data[0]);
salco 28:ac5c6350ed9a 247 }*/
salco 37:f53e9f7a14df 248
salco 28:ac5c6350ed9a 249 updateModuleValue();
salco 28:ac5c6350ed9a 250
salco 28:ac5c6350ed9a 251 //////////////////////////////
salco 28:ac5c6350ed9a 252 // Traitement du Labyrinthe //
salco 28:ac5c6350ed9a 253 //////////////////////////////
salco 28:ac5c6350ed9a 254 debug(DEBUG_DIRECTIVE_TEST,"\n\r -IRToCm(%02f): %02f",ADCTomv(m_valueCapteurIR),IRToCm(ADCTomv(m_valueCapteurIR)));
salco 28:ac5c6350ed9a 255 debug(DEBUG_DIRECTIVE_TEST,"\n\r -ultrasonicToInch: %02f",ultrasonicToInch(m_valueCapteurUltrasonic));
salco 28:ac5c6350ed9a 256 debug(DEBUG_DIRECTIVE_TEST,"\n\r -m_valueCapteurProximiter: %02d",m_valueCapteurProximiter);
salco 37:f53e9f7a14df 257 #endif //DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 258 analiseMaze();
salco 28:ac5c6350ed9a 259 char nextCase=0;
salco 38:57d5f36a0333 260 /*switch(myMaze->getDirection()) {
salco 31:ed23647fd16e 261 case UP:
salco 31:ed23647fd16e 262 nextCase = myMaze->getC(myMaze->getX(),myMaze->getY()+1);
salco 31:ed23647fd16e 263 break;
salco 31:ed23647fd16e 264
salco 31:ed23647fd16e 265 case DOWN:
salco 31:ed23647fd16e 266 nextCase = myMaze->getC(myMaze->getX(),myMaze->getY()-1);
salco 31:ed23647fd16e 267 break;
salco 31:ed23647fd16e 268
salco 31:ed23647fd16e 269 case LEFT:
salco 31:ed23647fd16e 270 nextCase = myMaze->getC(myMaze->getX()-1,myMaze->getY());
salco 31:ed23647fd16e 271 break;
salco 31:ed23647fd16e 272
salco 31:ed23647fd16e 273 case RIGHT:
salco 31:ed23647fd16e 274 nextCase = myMaze->getC(myMaze->getX()+1,myMaze->getY());
salco 31:ed23647fd16e 275 break;
salco 38:57d5f36a0333 276 }*/
salco 38:57d5f36a0333 277
salco 38:57d5f36a0333 278 nextCase = myMaze->getC_Foward();
salco 38:57d5f36a0333 279
salco 38:57d5f36a0333 280 debug("\n\r nextCase: [%02x]",nextCase);
salco 31:ed23647fd16e 281 switch(nextCase ) {
salco 37:f53e9f7a14df 282 case Labyrinthe::vide :
salco 37:f53e9f7a14df 283 #ifdef DEBUG_DIRECTIVE_LEG_DISABLE
salco 37:f53e9f7a14df 284 debug("nextCase Vide\n\r");
salco 37:f53e9f7a14df 285 #endif
salco 31:ed23647fd16e 286 debug(DEBUG_DIRECTIVE_TEST," Javance");
salco 37:f53e9f7a14df 287 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 288 addTableauDeCommande(6);
salco 37:f53e9f7a14df 289 #endif
salco 38:57d5f36a0333 290 myMaze->moveFoward();
salco 38:57d5f36a0333 291 myMaze->setMyPos(Labyrinthe::explorer);
salco 31:ed23647fd16e 292 break;
salco 31:ed23647fd16e 293
salco 37:f53e9f7a14df 294 case Labyrinthe::explorer :// ici pt amiliorer
salco 38:57d5f36a0333 295 debug(DEBUG_DIRECTIVE_TEST," \n\rnext case deja explorer");
salco 38:57d5f36a0333 296 if(rand()%2)
salco 38:57d5f36a0333 297 {
salco 38:57d5f36a0333 298 debug(DEBUG_DIRECTIVE_TEST,"\n\r jeverifie si alternative");
salco 38:57d5f36a0333 299
salco 38:57d5f36a0333 300 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 38:57d5f36a0333 301 addTableauDeCommande(6);
salco 38:57d5f36a0333 302 #endif
salco 38:57d5f36a0333 303 nextCase = checkOtherWay(myMaze->getDirection(),1);
salco 38:57d5f36a0333 304 debug("\n\rnextcase: %i",nextCase);
salco 38:57d5f36a0333 305 switch(nextCase)// on verifie si on a une direction possible
salco 38:57d5f36a0333 306 {
salco 38:57d5f36a0333 307 case UP:
salco 38:57d5f36a0333 308 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne UP");
salco 38:57d5f36a0333 309 myMaze->setDirection(UP);
salco 38:57d5f36a0333 310
salco 38:57d5f36a0333 311 break;
salco 38:57d5f36a0333 312 case DOWN:
salco 38:57d5f36a0333 313 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne DOWN");
salco 38:57d5f36a0333 314 myMaze->setDirection(DOWN);
salco 38:57d5f36a0333 315
salco 38:57d5f36a0333 316 break;
salco 38:57d5f36a0333 317 case LEFT:
salco 38:57d5f36a0333 318 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne LEFT");
salco 38:57d5f36a0333 319 myMaze->setDirection(LEFT);
salco 38:57d5f36a0333 320
salco 38:57d5f36a0333 321 break;
salco 38:57d5f36a0333 322 case RIGHT:
salco 38:57d5f36a0333 323 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne RIGHT");
salco 38:57d5f36a0333 324 myMaze->setDirection(RIGHT);
salco 38:57d5f36a0333 325
salco 38:57d5f36a0333 326 break;
salco 38:57d5f36a0333 327 default://aucun autre chemin
salco 38:57d5f36a0333 328 debug(DEBUG_DIRECTIVE_TEST,"\n\r aucune autre place alors J'avance");
salco 38:57d5f36a0333 329 myMaze->moveFoward();
salco 38:57d5f36a0333 330 myMaze->setMyPos(Labyrinthe::explorer);
salco 38:57d5f36a0333 331 break;
salco 38:57d5f36a0333 332 }
salco 38:57d5f36a0333 333 }
salco 38:57d5f36a0333 334 else
salco 38:57d5f36a0333 335 {
salco 38:57d5f36a0333 336 debug(DEBUG_DIRECTIVE_TEST,"\n\r jeverifie pas si alternative");
salco 38:57d5f36a0333 337 myMaze->moveFoward();
salco 38:57d5f36a0333 338 }
salco 38:57d5f36a0333 339 //myMaze->moveFoward();
salco 38:57d5f36a0333 340 //myMaze->setMyPos(Labyrinthe::explorer);
salco 38:57d5f36a0333 341 break;
salco 38:57d5f36a0333 342
salco 38:57d5f36a0333 343 case Labyrinthe::mur:
salco 38:57d5f36a0333 344
salco 38:57d5f36a0333 345 switch(checkOtherWay(myMaze->getDirection()))// on verifie si on a une direction possible
salco 38:57d5f36a0333 346 {
salco 38:57d5f36a0333 347 case UP:
salco 38:57d5f36a0333 348 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne UP ");
salco 38:57d5f36a0333 349 myMaze->setDirection(UP);
salco 38:57d5f36a0333 350 //myMaze->moveFoward();
salco 38:57d5f36a0333 351 break;
salco 38:57d5f36a0333 352 case DOWN:
salco 38:57d5f36a0333 353 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne DOWN ");
salco 38:57d5f36a0333 354 myMaze->setDirection(DOWN);
salco 38:57d5f36a0333 355 //myMaze->moveFoward();
salco 38:57d5f36a0333 356 break;
salco 38:57d5f36a0333 357 case LEFT:
salco 38:57d5f36a0333 358 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne LEFT");
salco 38:57d5f36a0333 359 myMaze->setDirection(LEFT);
salco 38:57d5f36a0333 360 //myMaze->moveFoward();
salco 38:57d5f36a0333 361 break;
salco 38:57d5f36a0333 362 case RIGHT:
salco 38:57d5f36a0333 363 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne RIGHT");
salco 38:57d5f36a0333 364 myMaze->setDirection(RIGHT);
salco 38:57d5f36a0333 365 //myMaze->moveFoward();
salco 38:57d5f36a0333 366 break;
salco 38:57d5f36a0333 367 default://aucun autre chemin
salco 38:57d5f36a0333 368 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne completement ");
salco 38:57d5f36a0333 369 if(myMaze->getDirection() %2)
salco 38:57d5f36a0333 370 myMaze->setDirection(myMaze->getDirection()+1);
salco 38:57d5f36a0333 371 else
salco 38:57d5f36a0333 372 myMaze->setDirection(myMaze->getDirection()-1);
salco 38:57d5f36a0333 373
salco 38:57d5f36a0333 374 //myMaze->moveFoward();
salco 38:57d5f36a0333 375 break;
salco 38:57d5f36a0333 376 }
salco 38:57d5f36a0333 377 myMaze->setMyPos(Labyrinthe::explorer);
salco 31:ed23647fd16e 378 break;
salco 31:ed23647fd16e 379
salco 38:57d5f36a0333 380 case Labyrinthe::pasExplorer ://pas sur
salco 38:57d5f36a0333 381 debug(DEBUG_DIRECTIVE_TEST," pasExplorer");
salco 37:f53e9f7a14df 382 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 31:ed23647fd16e 383 addTableauDeCommande(6);
salco 37:f53e9f7a14df 384 #endif
salco 31:ed23647fd16e 385 break;
salco 28:ac5c6350ed9a 386 }
salco 38:57d5f36a0333 387 #ifdef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 38:57d5f36a0333 388 string mymap = myMaze->showMap();
salco 38:57d5f36a0333 389 //char caseCaract = 0;
salco 38:57d5f36a0333 390 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 391 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 38:57d5f36a0333 392 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 393 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 38:57d5f36a0333 394 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 395 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 38:57d5f36a0333 396 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 397 #endif
salco 37:f53e9f7a14df 398 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 399 /*if((ultrasonicToInch(m_valueCapteurUltrasonic)< 1) && (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80)) //capteur ultrasson embrouiller/imprecis
salco 28:ac5c6350ed9a 400 {
salco 28:ac5c6350ed9a 401 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 28:ac5c6350ed9a 402 addTableauDeCommande(6);
salco 31:ed23647fd16e 403 }
salco 28:ac5c6350ed9a 404 else if(ultrasonicToInch(m_valueCapteurUltrasonic) < 10) { //plus proche que 10pouce
salco 28:ac5c6350ed9a 405 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche");
salco 28:ac5c6350ed9a 406 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 10) {
salco 28:ac5c6350ed9a 407 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 28:ac5c6350ed9a 408 addTableauDeCommande(7);
salco 28:ac5c6350ed9a 409
salco 19:0ac80045ba4c 410
salco 28:ac5c6350ed9a 411 //ici potentielle scaning
salco 28:ac5c6350ed9a 412 } else {
salco 28:ac5c6350ed9a 413 addTableauDeCommande(4);
salco 28:ac5c6350ed9a 414 addTableauDeCommande(4);
salco 28:ac5c6350ed9a 415 addTableauDeCommande(4);
salco 28:ac5c6350ed9a 416 }
salco 28:ac5c6350ed9a 417 } else {
salco 28:ac5c6350ed9a 418 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Nothing:");
salco 28:ac5c6350ed9a 419 addTableauDeCommande(6);
salco 31:ed23647fd16e 420
salco 31:ed23647fd16e 421
salco 28:ac5c6350ed9a 422 int randomNbr = rand() % 4;
salco 28:ac5c6350ed9a 423 switch(randomNbr)
salco 28:ac5c6350ed9a 424 {
salco 28:ac5c6350ed9a 425 case 1:
salco 28:ac5c6350ed9a 426 debug(DEBUG_DIRECTIVE_TEST," Javance");
salco 28:ac5c6350ed9a 427 addTableauDeCommande(6);
salco 28:ac5c6350ed9a 428 break;
salco 28:ac5c6350ed9a 429 case 2:
salco 28:ac5c6350ed9a 430 debug(DEBUG_DIRECTIVE_TEST," Je tourne a gauche");
salco 28:ac5c6350ed9a 431 addTableauDeCommande(4);
salco 28:ac5c6350ed9a 432 break;
salco 28:ac5c6350ed9a 433 case 3:
salco 28:ac5c6350ed9a 434 debug(DEBUG_DIRECTIVE_TEST," Je tourne a droite");
salco 28:ac5c6350ed9a 435 addTableauDeCommande(5);
salco 28:ac5c6350ed9a 436 break;
salco 28:ac5c6350ed9a 437 default:
salco 28:ac5c6350ed9a 438 debug(DEBUG_DIRECTIVE_TEST," Jattend");
salco 28:ac5c6350ed9a 439 break;
salco 28:ac5c6350ed9a 440 }
salco 31:ed23647fd16e 441
salco 31:ed23647fd16e 442
salco 28:ac5c6350ed9a 443 //addTableauDeCommande(6);
salco 28:ac5c6350ed9a 444 }*/
salco 37:f53e9f7a14df 445
salco 28:ac5c6350ed9a 446 ///////////////
salco 28:ac5c6350ed9a 447 // Mouvement //
salco 28:ac5c6350ed9a 448 ///////////////
salco 37:f53e9f7a14df 449 }
salco 37:f53e9f7a14df 450 else {
salco 37:f53e9f7a14df 451
salco 28:ac5c6350ed9a 452 switch(tableauDeCommange[0]) {
salco 28:ac5c6350ed9a 453 case 11:
salco 28:ac5c6350ed9a 454 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_calibre");
salco 28:ac5c6350ed9a 455 ctrDesPattes->calibre();
salco 28:ac5c6350ed9a 456 break;
salco 28:ac5c6350ed9a 457 case 2:
salco 28:ac5c6350ed9a 458 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveUp");
salco 28:ac5c6350ed9a 459 ctrDesPattes->moveUp();
salco 28:ac5c6350ed9a 460 break;
salco 28:ac5c6350ed9a 461 case 3:
salco 28:ac5c6350ed9a 462 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveDown");
salco 28:ac5c6350ed9a 463 ctrDesPattes->moveDown();
salco 28:ac5c6350ed9a 464 break;
salco 28:ac5c6350ed9a 465 case 4:
salco 28:ac5c6350ed9a 466 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_turnLeft");
salco 28:ac5c6350ed9a 467 ctrDesPattes->turnLeft();
salco 28:ac5c6350ed9a 468 break;
salco 28:ac5c6350ed9a 469 case 5:
salco 28:ac5c6350ed9a 470 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_trunRight");
salco 28:ac5c6350ed9a 471 ctrDesPattes->trunRight();
salco 28:ac5c6350ed9a 472 break;
salco 28:ac5c6350ed9a 473 case 6:
salco 28:ac5c6350ed9a 474 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveFront");
salco 28:ac5c6350ed9a 475 ctrDesPattes->moveFront();
salco 28:ac5c6350ed9a 476 break;
salco 28:ac5c6350ed9a 477 case 7:
salco 28:ac5c6350ed9a 478 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveBack");
salco 28:ac5c6350ed9a 479 ctrDesPattes->moveBack();
salco 28:ac5c6350ed9a 480 break;
salco 28:ac5c6350ed9a 481 /*case 8:
salco 28:ac5c6350ed9a 482 ctrDesPattes->moveBack();
salco 28:ac5c6350ed9a 483 break;*/
salco 28:ac5c6350ed9a 484 case 0x81:
salco 28:ac5c6350ed9a 485 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 1");
salco 28:ac5c6350ed9a 486 ctrDesPattes->repositioner(1);
salco 28:ac5c6350ed9a 487 break;
salco 28:ac5c6350ed9a 488 case 0x82:
salco 28:ac5c6350ed9a 489 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 2");
salco 28:ac5c6350ed9a 490 ctrDesPattes->repositioner(2);
salco 28:ac5c6350ed9a 491 break;
salco 28:ac5c6350ed9a 492 case 0x83:
salco 28:ac5c6350ed9a 493 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 3");
salco 28:ac5c6350ed9a 494 ctrDesPattes->repositioner(3);
salco 28:ac5c6350ed9a 495 break;
salco 28:ac5c6350ed9a 496 case 0x84:
salco 28:ac5c6350ed9a 497 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 4");
salco 28:ac5c6350ed9a 498 ctrDesPattes->repositioner(4);
salco 28:ac5c6350ed9a 499 break;
salco 28:ac5c6350ed9a 500 case 0x85:
salco 28:ac5c6350ed9a 501 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 5");
salco 28:ac5c6350ed9a 502 ctrDesPattes->repositioner(5);
salco 28:ac5c6350ed9a 503 break;
salco 28:ac5c6350ed9a 504 case 0x86:
salco 28:ac5c6350ed9a 505 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 6");
salco 28:ac5c6350ed9a 506 ctrDesPattes->repositioner(6);
salco 28:ac5c6350ed9a 507 break;
salco 28:ac5c6350ed9a 508 case 0x87:
salco 28:ac5c6350ed9a 509 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 7");
salco 28:ac5c6350ed9a 510 ctrDesPattes->repositioner(7);
salco 28:ac5c6350ed9a 511 break;
salco 28:ac5c6350ed9a 512 case 0x88:
salco 28:ac5c6350ed9a 513 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 8");
salco 28:ac5c6350ed9a 514 ctrDesPattes->repositioner(8);
salco 28:ac5c6350ed9a 515 break;
salco 28:ac5c6350ed9a 516 }
salco 28:ac5c6350ed9a 517 debug(DEBUG_DIRECTIVE_TEST,"\n\r -TAB:");
salco 28:ac5c6350ed9a 518 for(int i =0; i<10; i++) debug(DEBUG_DIRECTIVE_TEST,"[%02x]",tableauDeCommange[i]);
salco 28:ac5c6350ed9a 519 for(int i =0; i<9; i++)tableauDeCommange[i]= tableauDeCommange[i+1];
salco 28:ac5c6350ed9a 520 tableauDeCommange[9]=0;
salco 28:ac5c6350ed9a 521 if(size_tableauDeCommange != 0) size_tableauDeCommange--;
salco 28:ac5c6350ed9a 522 }
salco 37:f53e9f7a14df 523
salco 37:f53e9f7a14df 524 } else {
salco 28:ac5c6350ed9a 525 ctrDesPattes->exec();
salco 28:ac5c6350ed9a 526 }
salco 37:f53e9f7a14df 527 #endif //DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 528 ////////////////////
salco 28:ac5c6350ed9a 529 // Update memoire //
salco 28:ac5c6350ed9a 530 ////////////////////
salco 28:ac5c6350ed9a 531
salco 28:ac5c6350ed9a 532 ////////////
salco 28:ac5c6350ed9a 533 // Autre? //
salco 28:ac5c6350ed9a 534 ////////////
salco 28:ac5c6350ed9a 535
salco 28:ac5c6350ed9a 536
salco 28:ac5c6350ed9a 537 //debug(DEBUG_DIRECTIVE_TEST,"\n\rOut task directive");
salco 37:f53e9f7a14df 538 #ifdef DEBUG_BOOT_GRAPHICAL_INTERFACE
salco 37:f53e9f7a14df 539 #ifdef DBG_MAIN_DELAY_SEC
salco 37:f53e9f7a14df 540 debug("\n\r\n wait \n\r\n");
salco 37:f53e9f7a14df 541 wait(DBG_MAIN_DELAY_SEC);
salco 37:f53e9f7a14df 542 #endif
salco 38:57d5f36a0333 543 debug("\n\r---------------------");
salco 37:f53e9f7a14df 544 #endif
salco 28:ac5c6350ed9a 545 }
salco 28:ac5c6350ed9a 546 double Directive::IRToCm (double miliVolt)
salco 28:ac5c6350ed9a 547 {
salco 28:ac5c6350ed9a 548 double result=0;
salco 28:ac5c6350ed9a 549
salco 28:ac5c6350ed9a 550 if(miliVolt < tabIR[0][1])result = tabIR[0][0];
salco 28:ac5c6350ed9a 551 else if(miliVolt > tabIR[11][1])result = tabIR[11][0];
salco 28:ac5c6350ed9a 552
salco 28:ac5c6350ed9a 553 for(int i =1; (result==0)&&(i<12); i++) {
salco 28:ac5c6350ed9a 554 if((tabIR[i-1][1]<=miliVolt) && (tabIR[i][1]>miliVolt)) {
salco 28:ac5c6350ed9a 555 result=tabIR[i-1][0]+((tabIR[i][0]-tabIR[i-1][0])*((tabIR[i-1][1]-miliVolt)/(tabIR[i-1][1]-tabIR[i][1])));
salco 28:ac5c6350ed9a 556 }
salco 28:ac5c6350ed9a 557 }
salco 28:ac5c6350ed9a 558 return result;
salco 28:ac5c6350ed9a 559 }
salco 28:ac5c6350ed9a 560 void Directive::addTableauDeCommande(unsigned char value)
salco 28:ac5c6350ed9a 561 {
salco 28:ac5c6350ed9a 562 if(size_tableauDeCommange!=10) {
salco 28:ac5c6350ed9a 563 tableauDeCommange[size_tableauDeCommange]=value;
salco 28:ac5c6350ed9a 564 size_tableauDeCommange++;
salco 28:ac5c6350ed9a 565
salco 28:ac5c6350ed9a 566 }
salco 28:ac5c6350ed9a 567 }
salco 28:ac5c6350ed9a 568
salco 28:ac5c6350ed9a 569 void Directive::updateModuleValue(void)
salco 28:ac5c6350ed9a 570 {
salco 28:ac5c6350ed9a 571 string flag,data;
salco 28:ac5c6350ed9a 572 flag.clear();
salco 28:ac5c6350ed9a 573 data.clear();
salco 28:ac5c6350ed9a 574 flag.append(1,7);
salco 28:ac5c6350ed9a 575 if(m_CtrlBridge->send(m_capteurUltrasonic[0],flag,data))
salco 28:ac5c6350ed9a 576 m_valueCapteurUltrasonic = data[0];
salco 28:ac5c6350ed9a 577
salco 28:ac5c6350ed9a 578
salco 28:ac5c6350ed9a 579 flag.clear();
salco 28:ac5c6350ed9a 580 data.clear();
salco 28:ac5c6350ed9a 581 flag.append(1,7);
salco 28:ac5c6350ed9a 582 if(m_CtrlBridge->send(m_capteurIR[0],flag,data)) {
salco 28:ac5c6350ed9a 583 if(data.size() == 2) {
salco 28:ac5c6350ed9a 584 m_valueCapteurIR = data[0];
salco 28:ac5c6350ed9a 585 m_valueCapteurIR = (m_valueCapteurIR<<8) + data[1];
salco 28:ac5c6350ed9a 586 } else
salco 28:ac5c6350ed9a 587 m_valueCapteurIR = data[0];
salco 28:ac5c6350ed9a 588 }
salco 28:ac5c6350ed9a 589
salco 28:ac5c6350ed9a 590 flag.clear();
salco 28:ac5c6350ed9a 591 data.clear();
salco 28:ac5c6350ed9a 592 flag.append(1,7);
salco 28:ac5c6350ed9a 593 if(m_CtrlBridge->send(m_capteurProximiter[0],flag,data))
salco 28:ac5c6350ed9a 594 m_valueCapteurProximiter = data[0];
salco 28:ac5c6350ed9a 595 }
salco 28:ac5c6350ed9a 596
salco 28:ac5c6350ed9a 597 void Directive::analiseMaze(void)
salco 28:ac5c6350ed9a 598 {
salco 28:ac5c6350ed9a 599 char areaLatt =0;
salco 28:ac5c6350ed9a 600 char areaVert =0;
salco 28:ac5c6350ed9a 601 string mymap = myMaze->showMap();
salco 38:57d5f36a0333 602 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 37:f53e9f7a14df 603
salco 37:f53e9f7a14df 604 debug("Direction: ");
salco 37:f53e9f7a14df 605 switch(myMaze->getDirection()) {
salco 37:f53e9f7a14df 606 case UP:
salco 37:f53e9f7a14df 607 debug(DEBUG_DIRECTIVE_LABYRINTH,"Up \n\r");
salco 37:f53e9f7a14df 608 break;
salco 37:f53e9f7a14df 609 case DOWN:
salco 37:f53e9f7a14df 610 debug(DEBUG_DIRECTIVE_LABYRINTH,"Down \n\r");
salco 37:f53e9f7a14df 611 break;
salco 37:f53e9f7a14df 612 case LEFT:
salco 37:f53e9f7a14df 613 debug(DEBUG_DIRECTIVE_LABYRINTH,"Left \n\r");
salco 37:f53e9f7a14df 614 break;
salco 37:f53e9f7a14df 615 case RIGHT:
salco 37:f53e9f7a14df 616 debug(DEBUG_DIRECTIVE_LABYRINTH,"Right \n\r");
salco 37:f53e9f7a14df 617 break;
salco 37:f53e9f7a14df 618 }
salco 37:f53e9f7a14df 619
salco 38:57d5f36a0333 620 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 28:ac5c6350ed9a 621 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 622 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 28:ac5c6350ed9a 623 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 624 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 28:ac5c6350ed9a 625 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 31:ed23647fd16e 626
salco 31:ed23647fd16e 627
salco 37:f53e9f7a14df 628 #ifndef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 31:ed23647fd16e 629 if((ultrasonicToInch(m_valueCapteurUltrasonic)< 1) && (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80)) { //capteur ultrasson embrouiller/imprecis
salco 31:ed23647fd16e 630 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 31:ed23647fd16e 631 //addTableauDeCommande(6);
salco 31:ed23647fd16e 632 } else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=24) { //plus proche que 10pouce
salco 31:ed23647fd16e 633 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 31:ed23647fd16e 634 areaLatt =2;
salco 31:ed23647fd16e 635 areaVert =2;
salco 31:ed23647fd16e 636 } else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=12) { //plus proche que 10pouce
salco 31:ed23647fd16e 637 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 31:ed23647fd16e 638 areaLatt =1;
salco 31:ed23647fd16e 639 areaVert =1;
salco 31:ed23647fd16e 640 }
salco 37:f53e9f7a14df 641 debug(DEBUG_DIRECTIVE_TEST,": %i",ultrasonicToInch(m_valueCapteurUltrasonic));
salco 37:f53e9f7a14df 642
salco 31:ed23647fd16e 643 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 60) {
salco 31:ed23647fd16e 644 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 31:ed23647fd16e 645 areaVert =2;
salco 31:ed23647fd16e 646 } else if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 30) {
salco 31:ed23647fd16e 647 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 31:ed23647fd16e 648 areaVert =1;
salco 31:ed23647fd16e 649 }
salco 37:f53e9f7a14df 650 debug(DEBUG_DIRECTIVE_TEST,": %i",IRToCm(ADCTomv(m_valueCapteurIR));
salco 37:f53e9f7a14df 651 #endif
salco 31:ed23647fd16e 652
salco 37:f53e9f7a14df 653 #ifdef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 37:f53e9f7a14df 654 debug("\n\r---analise maze(manualy CTRL)---\n\r");
salco 37:f53e9f7a14df 655 int idCommand = -1;
salco 37:f53e9f7a14df 656 do{
salco 37:f53e9f7a14df 657 debug("\n\r Enter areaVert [0,1,2]: "); idCommand = fgetc(pc) - '0';
salco 37:f53e9f7a14df 658 debug(" %i",idCommand);
salco 37:f53e9f7a14df 659 }while((idCommand < 0) && (idCommand > 2));
salco 37:f53e9f7a14df 660 areaVert = idCommand;
salco 37:f53e9f7a14df 661
salco 37:f53e9f7a14df 662 do{
salco 37:f53e9f7a14df 663 debug("\n\r Enter areaLatt [0,1,2]: "); idCommand = fgetc(pc) - '0';
salco 37:f53e9f7a14df 664 debug(" %i",idCommand);
salco 37:f53e9f7a14df 665 }while((idCommand < 0) && (idCommand > 2));
salco 37:f53e9f7a14df 666 areaLatt = idCommand;
salco 31:ed23647fd16e 667
salco 37:f53e9f7a14df 668 debug("\n\r");
salco 37:f53e9f7a14df 669 #endif
salco 37:f53e9f7a14df 670 //changer lalgoritme ici
salco 37:f53e9f7a14df 671
salco 37:f53e9f7a14df 672 /*
salco 37:f53e9f7a14df 673 /---\
salco 37:f53e9f7a14df 674 |?M?| //vert 0
salco 37:f53e9f7a14df 675 |.X.| //latt 0
salco 37:f53e9f7a14df 676 |...|
salco 37:f53e9f7a14df 677 \---/
salco 31:ed23647fd16e 678
salco 37:f53e9f7a14df 679 /-M-\
salco 37:f53e9f7a14df 680 |?V?| //vert 1
salco 37:f53e9f7a14df 681 |.X.| //latt 0
salco 37:f53e9f7a14df 682 |...|
salco 37:f53e9f7a14df 683 \---/
salco 37:f53e9f7a14df 684
salco 37:f53e9f7a14df 685 /?M?\
salco 37:f53e9f7a14df 686 |VVV| //vert 1
salco 37:f53e9f7a14df 687 |.X.| //latt 1
salco 37:f53e9f7a14df 688 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 689 \---/
salco 31:ed23647fd16e 690
salco 37:f53e9f7a14df 691 /?M?\
salco 37:f53e9f7a14df 692 |VVV| //vert 1
salco 37:f53e9f7a14df 693 |.X.| //latt 2
salco 37:f53e9f7a14df 694 |...| // cas impossible
salco 37:f53e9f7a14df 695 \---/
salco 31:ed23647fd16e 696
salco 37:f53e9f7a14df 697 /?V?\
salco 37:f53e9f7a14df 698 |?V?| //vert 2
salco 37:f53e9f7a14df 699 |.X.| //latt 0
salco 37:f53e9f7a14df 700 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 701 \---/
salco 37:f53e9f7a14df 702
salco 37:f53e9f7a14df 703 /?V?\
salco 37:f53e9f7a14df 704 |VVV| //vert 2
salco 37:f53e9f7a14df 705 |.X.| //latt 1
salco 37:f53e9f7a14df 706 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 707 \---/
salco 31:ed23647fd16e 708
salco 37:f53e9f7a14df 709 /VVV\
salco 37:f53e9f7a14df 710 |VVV| //vert 2
salco 37:f53e9f7a14df 711 |.X.| //latt 2
salco 37:f53e9f7a14df 712 |...|
salco 37:f53e9f7a14df 713 \---/
salco 37:f53e9f7a14df 714 */
salco 37:f53e9f7a14df 715 //vertical==0 latt==0 //mur devant
salco 37:f53e9f7a14df 716 //vertical==1 latt==1
salco 37:f53e9f7a14df 717 ////////////////////////////////////
salco 37:f53e9f7a14df 718 //345 415
salco 37:f53e9f7a14df 719 //012 203| numerotation des case
salco 37:f53e9f7a14df 720 ///////////////////////////////////
salco 37:f53e9f7a14df 721 signed char fieldX[6]={0,0,0,0,0,0};
salco 37:f53e9f7a14df 722 signed char fieldY[6]={0,0,0,0,0,0};
salco 37:f53e9f7a14df 723 bool fieldSet = false;
salco 31:ed23647fd16e 724
salco 37:f53e9f7a14df 725 switch(myMaze->getDirection())
salco 37:f53e9f7a14df 726 {
salco 37:f53e9f7a14df 727 case UP:
salco 37:f53e9f7a14df 728 fieldX[0] = myMaze->getX()-1;
salco 37:f53e9f7a14df 729 fieldY[0] = myMaze->getY()+1;
salco 37:f53e9f7a14df 730 fieldX[1] = myMaze->getX();
salco 37:f53e9f7a14df 731 fieldY[1] = myMaze->getY()+1;
salco 37:f53e9f7a14df 732 fieldX[2] = myMaze->getX()+1;
salco 37:f53e9f7a14df 733 fieldY[2] = myMaze->getY()+1;
salco 37:f53e9f7a14df 734 fieldX[3] = myMaze->getX()-1;
salco 37:f53e9f7a14df 735 fieldY[3] = myMaze->getY()+2;
salco 37:f53e9f7a14df 736 fieldX[4] = myMaze->getX();
salco 37:f53e9f7a14df 737 fieldY[4] = myMaze->getY()+2;
salco 37:f53e9f7a14df 738 fieldX[5] = myMaze->getX()+1;
salco 37:f53e9f7a14df 739 fieldY[5] = myMaze->getY()+2;
salco 37:f53e9f7a14df 740 break;
salco 37:f53e9f7a14df 741
salco 37:f53e9f7a14df 742 case DOWN:
salco 37:f53e9f7a14df 743 fieldX[0] = myMaze->getX()-1;
salco 37:f53e9f7a14df 744 fieldY[0] = myMaze->getY()-1;
salco 37:f53e9f7a14df 745 fieldX[1] = myMaze->getX();
salco 37:f53e9f7a14df 746 fieldY[1] = myMaze->getY()-1;
salco 37:f53e9f7a14df 747 fieldX[2] = myMaze->getX()+1;
salco 37:f53e9f7a14df 748 fieldY[2] = myMaze->getY()-1;
salco 37:f53e9f7a14df 749 fieldX[3] = myMaze->getX()-1;
salco 37:f53e9f7a14df 750 fieldY[3] = myMaze->getY()-2;
salco 37:f53e9f7a14df 751 fieldX[4] = myMaze->getX();
salco 37:f53e9f7a14df 752 fieldY[4] = myMaze->getY()-2;
salco 37:f53e9f7a14df 753 fieldX[5] = myMaze->getX()+1;
salco 37:f53e9f7a14df 754 fieldY[5] = myMaze->getY()-2;
salco 37:f53e9f7a14df 755 break;
salco 37:f53e9f7a14df 756
salco 37:f53e9f7a14df 757 case LEFT:
salco 37:f53e9f7a14df 758 fieldX[0] = myMaze->getX()-1;
salco 37:f53e9f7a14df 759 fieldY[0] = myMaze->getY()-1;
salco 37:f53e9f7a14df 760 fieldX[1] = myMaze->getX()-1;
salco 37:f53e9f7a14df 761 fieldY[1] = myMaze->getY();
salco 37:f53e9f7a14df 762 fieldX[2] = myMaze->getX()-1;
salco 37:f53e9f7a14df 763 fieldY[2] = myMaze->getY()+1;
salco 37:f53e9f7a14df 764 fieldX[3] = myMaze->getX()-2;
salco 37:f53e9f7a14df 765 fieldY[3] = myMaze->getY()-1;
salco 37:f53e9f7a14df 766 fieldX[4] = myMaze->getX()-2;
salco 37:f53e9f7a14df 767 fieldY[4] = myMaze->getY();
salco 37:f53e9f7a14df 768 fieldX[5] = myMaze->getX()-2;
salco 37:f53e9f7a14df 769 fieldY[5] = myMaze->getY()+1;
salco 37:f53e9f7a14df 770 break;
salco 37:f53e9f7a14df 771
salco 37:f53e9f7a14df 772 case RIGHT:
salco 37:f53e9f7a14df 773 fieldX[0] = myMaze->getX()+1;
salco 37:f53e9f7a14df 774 fieldY[0] = myMaze->getY()-1;
salco 37:f53e9f7a14df 775 fieldX[1] = myMaze->getX()+1;
salco 37:f53e9f7a14df 776 fieldY[1] = myMaze->getY();
salco 37:f53e9f7a14df 777 fieldX[2] = myMaze->getX()+1;
salco 37:f53e9f7a14df 778 fieldY[2] = myMaze->getY()+1;
salco 37:f53e9f7a14df 779 fieldX[3] = myMaze->getX()+2;
salco 37:f53e9f7a14df 780 fieldY[3] = myMaze->getY()-1;
salco 37:f53e9f7a14df 781 fieldX[4] = myMaze->getX()+2;
salco 37:f53e9f7a14df 782 fieldY[4] = myMaze->getY();
salco 37:f53e9f7a14df 783 fieldX[5] = myMaze->getX()+2;
salco 37:f53e9f7a14df 784 fieldY[5] = myMaze->getY()+1;
salco 37:f53e9f7a14df 785 break;
salco 37:f53e9f7a14df 786 }
salco 37:f53e9f7a14df 787 if(areaVert >= areaLatt)
salco 37:f53e9f7a14df 788 {
salco 37:f53e9f7a14df 789 switch(areaVert)
salco 37:f53e9f7a14df 790 {
salco 37:f53e9f7a14df 791 case 0:
salco 37:f53e9f7a14df 792 /*
salco 37:f53e9f7a14df 793 /---\
salco 37:f53e9f7a14df 794 |?M?| //vert 0
salco 37:f53e9f7a14df 795 |.X.| //latt 0
salco 37:f53e9f7a14df 796 |...|
salco 37:f53e9f7a14df 797 \---/
salco 37:f53e9f7a14df 798 */
salco 37:f53e9f7a14df 799 myMaze->setC(Labyrinthe::mur,fieldX[1],fieldY[1]);
salco 37:f53e9f7a14df 800 fieldSet = true;
salco 28:ac5c6350ed9a 801 break;
salco 37:f53e9f7a14df 802 case 1:
salco 37:f53e9f7a14df 803 /*
salco 37:f53e9f7a14df 804 /-M-\
salco 37:f53e9f7a14df 805 |?V?| //vert 1
salco 37:f53e9f7a14df 806 |.X.| //latt 0
salco 37:f53e9f7a14df 807 |...|
salco 37:f53e9f7a14df 808 \---/
salco 37:f53e9f7a14df 809 */
salco 37:f53e9f7a14df 810 myMaze->setC(Labyrinthe::vide,fieldX[1],fieldY[1]);
salco 37:f53e9f7a14df 811 myMaze->setC(Labyrinthe::mur,fieldX[4],fieldY[4]);
salco 37:f53e9f7a14df 812 fieldSet = true;
salco 37:f53e9f7a14df 813
salco 37:f53e9f7a14df 814 if(areaLatt == 1)
salco 37:f53e9f7a14df 815 {
salco 37:f53e9f7a14df 816 /*
salco 37:f53e9f7a14df 817 /?M?\
salco 37:f53e9f7a14df 818 |VVV| //vert 1
salco 37:f53e9f7a14df 819 |.X.| //latt 1
salco 37:f53e9f7a14df 820 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 821 \---/
salco 37:f53e9f7a14df 822 */
salco 37:f53e9f7a14df 823 myMaze->setC(Labyrinthe::vide,fieldX[0],fieldY[0]);
salco 37:f53e9f7a14df 824 myMaze->setC(Labyrinthe::vide,fieldX[2],fieldY[2]);
salco 28:ac5c6350ed9a 825 }
salco 28:ac5c6350ed9a 826 break;
salco 37:f53e9f7a14df 827 case 2:
salco 37:f53e9f7a14df 828 fieldSet = true;
salco 37:f53e9f7a14df 829 switch(areaLatt)
salco 37:f53e9f7a14df 830 {
salco 37:f53e9f7a14df 831 case 0:
salco 37:f53e9f7a14df 832 /*
salco 37:f53e9f7a14df 833 /?V?\
salco 37:f53e9f7a14df 834 |?V?| //vert 2
salco 37:f53e9f7a14df 835 |.X.| //latt 0
salco 37:f53e9f7a14df 836 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 837 \---/
salco 37:f53e9f7a14df 838 */
salco 37:f53e9f7a14df 839 myMaze->setC(Labyrinthe::vide,fieldX[1],fieldY[1]);
salco 37:f53e9f7a14df 840 myMaze->setC(Labyrinthe::vide,fieldX[4],fieldY[4]);
salco 37:f53e9f7a14df 841 break;
salco 37:f53e9f7a14df 842 case 1:
salco 37:f53e9f7a14df 843 /*
salco 37:f53e9f7a14df 844 /?V?\
salco 37:f53e9f7a14df 845 |VVV| //vert 2
salco 37:f53e9f7a14df 846 |.X.| //latt 1
salco 37:f53e9f7a14df 847 |...| // objet possiblement a proximiter
salco 37:f53e9f7a14df 848 \---/
salco 37:f53e9f7a14df 849 */
salco 37:f53e9f7a14df 850 for(int i = 0;i<3;i++)myMaze->setC(Labyrinthe::vide,fieldX[i],fieldY[i]);
salco 37:f53e9f7a14df 851 myMaze->setC(Labyrinthe::vide,fieldX[4],fieldY[4]);
salco 37:f53e9f7a14df 852 break;
salco 37:f53e9f7a14df 853 case 2:
salco 37:f53e9f7a14df 854 /*
salco 37:f53e9f7a14df 855 /VVV\
salco 37:f53e9f7a14df 856 |VVV| //vert 2
salco 37:f53e9f7a14df 857 |.X.| //latt 2
salco 37:f53e9f7a14df 858 |...|
salco 37:f53e9f7a14df 859 \---/
salco 37:f53e9f7a14df 860 */
salco 37:f53e9f7a14df 861 for(int i = 0;i<6;i++)myMaze->setC( Labyrinthe::vide,fieldX[i],fieldY[i]);
salco 37:f53e9f7a14df 862 break;
salco 37:f53e9f7a14df 863 }
salco 28:ac5c6350ed9a 864 break;
salco 37:f53e9f7a14df 865 }
salco 37:f53e9f7a14df 866 }
salco 37:f53e9f7a14df 867
salco 37:f53e9f7a14df 868 if(fieldSet == false)// on a un cas impossible
salco 37:f53e9f7a14df 869 {
salco 38:57d5f36a0333 870 //myMaze->setC(Labyrinthe::error,fieldX[1],fieldY[1]);
salco 37:f53e9f7a14df 871 }
salco 31:ed23647fd16e 872
salco 37:f53e9f7a14df 873 ////////////////////////////////////
salco 31:ed23647fd16e 874
salco 31:ed23647fd16e 875
salco 37:f53e9f7a14df 876 #ifdef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 37:f53e9f7a14df 877 mymap = myMaze->showMap();
salco 38:57d5f36a0333 878 //char caseCaract = 0;
salco 38:57d5f36a0333 879 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 37:f53e9f7a14df 880 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 881 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 37:f53e9f7a14df 882 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 38:57d5f36a0333 883 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 37:f53e9f7a14df 884 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 37:f53e9f7a14df 885
salco 37:f53e9f7a14df 886 debug("\n\r-------------------\n\r");
salco 37:f53e9f7a14df 887 #endif
salco 38:57d5f36a0333 888 }
salco 38:57d5f36a0333 889
salco 38:57d5f36a0333 890 char Directive::checkOtherWay(char dir, bool checkExplorer)
salco 38:57d5f36a0333 891 {
salco 38:57d5f36a0333 892 char result = 0;
salco 38:57d5f36a0333 893 char order[3];
salco 38:57d5f36a0333 894
salco 38:57d5f36a0333 895
salco 38:57d5f36a0333 896
salco 38:57d5f36a0333 897 bool fini = false;
salco 38:57d5f36a0333 898
salco 38:57d5f36a0333 899 switch(rand() % 6)
salco 38:57d5f36a0333 900 {
salco 38:57d5f36a0333 901 case 0://[0],[1],[2]
salco 38:57d5f36a0333 902 order[0] = 0;
salco 38:57d5f36a0333 903 order[1] = 1;
salco 38:57d5f36a0333 904 order[2] = 2;
salco 38:57d5f36a0333 905 break;
salco 38:57d5f36a0333 906 case 1://[0],[2],[1]
salco 38:57d5f36a0333 907 order[0] = 0;
salco 38:57d5f36a0333 908 order[1] = 2;
salco 38:57d5f36a0333 909 order[2] = 1;
salco 38:57d5f36a0333 910 break;
salco 38:57d5f36a0333 911 case 2://[1],[0],[2]
salco 38:57d5f36a0333 912 order[0] = 1;
salco 38:57d5f36a0333 913 order[1] = 0;
salco 38:57d5f36a0333 914 order[2] = 2;
salco 38:57d5f36a0333 915 break;
salco 38:57d5f36a0333 916 case 3://[2],[0],[1]
salco 38:57d5f36a0333 917 order[0] = 2;
salco 38:57d5f36a0333 918 order[1] = 0;
salco 38:57d5f36a0333 919 order[2] = 1;
salco 38:57d5f36a0333 920 break;
salco 38:57d5f36a0333 921 case 4://[1],[2],[0]
salco 38:57d5f36a0333 922 order[0] = 1;
salco 38:57d5f36a0333 923 order[1] = 2;
salco 38:57d5f36a0333 924 order[2] = 0;
salco 38:57d5f36a0333 925 break;
salco 38:57d5f36a0333 926 case 5://[2],[1],[0]
salco 38:57d5f36a0333 927 order[0] = 2;
salco 38:57d5f36a0333 928 order[1] = 1;
salco 38:57d5f36a0333 929 order[2] = 0;
salco 38:57d5f36a0333 930 break;
salco 38:57d5f36a0333 931 }
salco 38:57d5f36a0333 932 debug("\n\rresult: ");
salco 38:57d5f36a0333 933 for(int i=0;(i<3)&&(!fini);i++)
salco 38:57d5f36a0333 934 {
salco 38:57d5f36a0333 935 switch(order[i])// inclure un état memoir affin que si il a le choix entre une case vide et une explorer il priorise la vide// pt faire de meme avec pas explorer
salco 38:57d5f36a0333 936 {
salco 38:57d5f36a0333 937 case 0:
salco 38:57d5f36a0333 938 result = myMaze->getC_ToLeft();
salco 38:57d5f36a0333 939 debug("\n\r getC_ToLeft: %i %i ****",result,myMaze->getC_ToLeft());
salco 38:57d5f36a0333 940 //if(((Labyrinthe::case_t)result != Labyrinthe::error)&&((Labyrinthe::case_t)result != Labyrinthe::mur) &&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1) )
salco 38:57d5f36a0333 941 if(((Labyrinthe::case_t)result == Labyrinthe::vide)&&((Labyrinthe::case_t)result != Labyrinthe::mur) &&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1) )
salco 38:57d5f36a0333 942 {
salco 38:57d5f36a0333 943 fini = true;
salco 38:57d5f36a0333 944 result = LEFT;
salco 38:57d5f36a0333 945 }
salco 38:57d5f36a0333 946 break;
salco 38:57d5f36a0333 947 case 1:
salco 38:57d5f36a0333 948 result = myMaze->getC_Backward();
salco 38:57d5f36a0333 949 debug("\n\r getC_Backward: %i %i ****",result,myMaze->getC_Backward());
salco 38:57d5f36a0333 950 if(((Labyrinthe::case_t)result != Labyrinthe::error)&&((Labyrinthe::case_t)result != Labyrinthe::mur)&&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1))
salco 38:57d5f36a0333 951 {
salco 38:57d5f36a0333 952 fini = true;
salco 38:57d5f36a0333 953 result = DOWN;
salco 38:57d5f36a0333 954 }
salco 38:57d5f36a0333 955 break;
salco 38:57d5f36a0333 956 case 2:
salco 38:57d5f36a0333 957 result = myMaze->getC_ToRight();
salco 38:57d5f36a0333 958 debug("\n\r getC_ToRight: %i %i ****",result,myMaze->getC_ToRight());
salco 38:57d5f36a0333 959 if(((Labyrinthe::case_t)result != Labyrinthe::error)&&((Labyrinthe::case_t)result != Labyrinthe::mur)&&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1))
salco 38:57d5f36a0333 960 {
salco 38:57d5f36a0333 961 fini = true;
salco 38:57d5f36a0333 962 result = RIGHT;
salco 38:57d5f36a0333 963 }
salco 38:57d5f36a0333 964 break;
salco 38:57d5f36a0333 965 }
salco 38:57d5f36a0333 966 }
salco 38:57d5f36a0333 967
salco 38:57d5f36a0333 968 if(fini)
salco 38:57d5f36a0333 969 {
salco 38:57d5f36a0333 970 switch(dir)
salco 38:57d5f36a0333 971 {
salco 38:57d5f36a0333 972 /*case UP:
salco 38:57d5f36a0333 973 break;*/
salco 38:57d5f36a0333 974 case DOWN:
salco 38:57d5f36a0333 975 switch(result)
salco 38:57d5f36a0333 976 {
salco 38:57d5f36a0333 977 case LEFT:
salco 38:57d5f36a0333 978 result = RIGHT;
salco 38:57d5f36a0333 979 break;
salco 38:57d5f36a0333 980 case DOWN:
salco 38:57d5f36a0333 981 result = UP;
salco 38:57d5f36a0333 982 break;
salco 38:57d5f36a0333 983 case RIGHT:
salco 38:57d5f36a0333 984 result = LEFT;
salco 38:57d5f36a0333 985 break;
salco 38:57d5f36a0333 986 }
salco 38:57d5f36a0333 987 break;
salco 38:57d5f36a0333 988 case LEFT:
salco 38:57d5f36a0333 989 switch(result)
salco 38:57d5f36a0333 990 {
salco 38:57d5f36a0333 991 case LEFT:
salco 38:57d5f36a0333 992 result = DOWN;
salco 38:57d5f36a0333 993 break;
salco 38:57d5f36a0333 994 case DOWN:
salco 38:57d5f36a0333 995 result = RIGHT;
salco 38:57d5f36a0333 996 break;
salco 38:57d5f36a0333 997 case RIGHT:
salco 38:57d5f36a0333 998 result = UP;
salco 38:57d5f36a0333 999 break;
salco 38:57d5f36a0333 1000 }
salco 38:57d5f36a0333 1001 break;
salco 38:57d5f36a0333 1002 case RIGHT:
salco 38:57d5f36a0333 1003 switch(result)
salco 38:57d5f36a0333 1004 {
salco 38:57d5f36a0333 1005 case LEFT:
salco 38:57d5f36a0333 1006 result = UP;
salco 38:57d5f36a0333 1007 break;
salco 38:57d5f36a0333 1008 case DOWN:
salco 38:57d5f36a0333 1009 result = LEFT;
salco 38:57d5f36a0333 1010 break;
salco 38:57d5f36a0333 1011 case RIGHT:
salco 38:57d5f36a0333 1012 result = DOWN;
salco 38:57d5f36a0333 1013 break;
salco 38:57d5f36a0333 1014 }
salco 38:57d5f36a0333 1015 break;
salco 38:57d5f36a0333 1016 }
salco 38:57d5f36a0333 1017
salco 38:57d5f36a0333 1018 }
salco 38:57d5f36a0333 1019 else
salco 38:57d5f36a0333 1020 result =0;
salco 38:57d5f36a0333 1021 return result;
salco 38:57d5f36a0333 1022 }
salco 38:57d5f36a0333 1023
salco 38:57d5f36a0333 1024 bool Directive::searchNewWay(void)
salco 38:57d5f36a0333 1025 {
salco 38:57d5f36a0333 1026 bool result=false;
salco 38:57d5f36a0333 1027 string backupMap = myMaze->getAllMap();
salco 38:57d5f36a0333 1028 signed char backupPosX = myMaze->getX();
salco 38:57d5f36a0333 1029 signed char backupPosY = myMaze->getY();
salco 38:57d5f36a0333 1030 string searchMap = backupMap;
salco 38:57d5f36a0333 1031 char tempdir,nextCase=0;
salco 38:57d5f36a0333 1032 positionXY tempPosition;
salco 38:57d5f36a0333 1033
salco 38:57d5f36a0333 1034 bool noOtherWay = false;//si apres un moment tu est entourer de mur
salco 38:57d5f36a0333 1035 bool wrongWay = false; //si jamais vien un moment que tu est pris /doit rebrousser chemin
salco 38:57d5f36a0333 1036
salco 38:57d5f36a0333 1037 bufferNewWay.clear();
salco 38:57d5f36a0333 1038 tempPosition.posX = myMaze->getX();
salco 38:57d5f36a0333 1039 tempPosition.posY = myMaze->getY();
salco 38:57d5f36a0333 1040 bufferNewWay.push_back(tempPosition);
salco 38:57d5f36a0333 1041
salco 38:57d5f36a0333 1042 while(!result)
salco 38:57d5f36a0333 1043 {
salco 38:57d5f36a0333 1044 // nextCase = 0;
salco 38:57d5f36a0333 1045
salco 38:57d5f36a0333 1046 nextCase = myMaze->getC_Foward();
salco 38:57d5f36a0333 1047
salco 38:57d5f36a0333 1048 debug("\n\r nextCase: [%02x]",nextCase);
salco 38:57d5f36a0333 1049 switch(nextCase ) {
salco 38:57d5f36a0333 1050
salco 38:57d5f36a0333 1051 case Labyrinthe::pasExplorer :
salco 38:57d5f36a0333 1052 case Labyrinthe::vide :
salco 38:57d5f36a0333 1053 result = true;
salco 38:57d5f36a0333 1054 break;
salco 38:57d5f36a0333 1055
salco 38:57d5f36a0333 1056 case Labyrinthe::explorer :// ici pt amiliorer
salco 38:57d5f36a0333 1057 //add position a la liste
salco 38:57d5f36a0333 1058 myMaze->moveFoward();
salco 38:57d5f36a0333 1059 myMaze->setMyPos(Labyrinthe::error);
salco 38:57d5f36a0333 1060 break;
salco 38:57d5f36a0333 1061
salco 38:57d5f36a0333 1062 case Labyrinthe::mur:
salco 38:57d5f36a0333 1063 if(rand() % 2)
salco 38:57d5f36a0333 1064 {
salco 38:57d5f36a0333 1065 tempdir = myMaze->getC_ToLeft();
salco 38:57d5f36a0333 1066 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 38:57d5f36a0333 1067 myMaze->turnLeft();
salco 38:57d5f36a0333 1068 else
salco 38:57d5f36a0333 1069 {
salco 38:57d5f36a0333 1070 tempdir = myMaze->getC_ToRight();
salco 38:57d5f36a0333 1071 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 38:57d5f36a0333 1072 myMaze->turnRight();
salco 38:57d5f36a0333 1073 else
salco 38:57d5f36a0333 1074 {
salco 38:57d5f36a0333 1075 wrongWay = true; // verifie dans la liste
salco 38:57d5f36a0333 1076 }
salco 38:57d5f36a0333 1077 }
salco 38:57d5f36a0333 1078
salco 38:57d5f36a0333 1079 }
salco 38:57d5f36a0333 1080 else
salco 38:57d5f36a0333 1081 {
salco 38:57d5f36a0333 1082 tempdir = myMaze->getC_ToRight();
salco 38:57d5f36a0333 1083 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 38:57d5f36a0333 1084 myMaze->turnRight();
salco 38:57d5f36a0333 1085 else
salco 38:57d5f36a0333 1086 {
salco 38:57d5f36a0333 1087 tempdir = myMaze->getC_ToLeft();
salco 38:57d5f36a0333 1088 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 38:57d5f36a0333 1089 myMaze->turnLeft();
salco 38:57d5f36a0333 1090 else
salco 38:57d5f36a0333 1091 {
salco 38:57d5f36a0333 1092 wrongWay = true; // verifie dans la liste
salco 38:57d5f36a0333 1093 }
salco 38:57d5f36a0333 1094 }
salco 38:57d5f36a0333 1095 }
salco 38:57d5f36a0333 1096
salco 38:57d5f36a0333 1097 myMaze->setMyPos(Labyrinthe::error);
salco 38:57d5f36a0333 1098 break;
salco 38:57d5f36a0333 1099 }
salco 38:57d5f36a0333 1100
salco 38:57d5f36a0333 1101 tempPosition.posX = myMaze->getX();
salco 38:57d5f36a0333 1102 tempPosition.posY = myMaze->getY();
salco 38:57d5f36a0333 1103 bufferNewWay.push_back(tempPosition);
salco 38:57d5f36a0333 1104
salco 38:57d5f36a0333 1105 if(wrongWay)
salco 38:57d5f36a0333 1106 { do{
salco 38:57d5f36a0333 1107 tempPosition.posX = (bufferNewWay.back()).posX;
salco 38:57d5f36a0333 1108 tempPosition.posY = bufferNewWay.back().posY;
salco 38:57d5f36a0333 1109 myMaze->setC(Labyrinthe::error,tempPosition.posX,tempPosition.posY);
salco 38:57d5f36a0333 1110
salco 38:57d5f36a0333 1111
salco 38:57d5f36a0333 1112 }while((wrongWay) && (!noOtherWay));
salco 38:57d5f36a0333 1113 }
salco 38:57d5f36a0333 1114
salco 38:57d5f36a0333 1115 }
salco 38:57d5f36a0333 1116
salco 38:57d5f36a0333 1117 myMaze->setX(backupPosX);
salco 38:57d5f36a0333 1118 myMaze->setY(backupPosY);
salco 38:57d5f36a0333 1119 myMaze->setAllMap(backupMap);
salco 38:57d5f36a0333 1120 return result;
salco 38:57d5f36a0333 1121 }
salco 38:57d5f36a0333 1122
salco 38:57d5f36a0333 1123 bool Directive::isAnotherWay(void)
salco 38:57d5f36a0333 1124 {
salco 38:57d5f36a0333 1125 bool result=false;
salco 38:57d5f36a0333 1126
salco 38:57d5f36a0333 1127 return result;
salco 2:4c5b0f6d0a6b 1128 }