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:
Tue Jan 31 13:15:42 2017 +0000
Revision:
41:0b5c14dda54a
Parent:
40:ecef15b1dfad
Tentative de modifier les commit inutile sur debug.h

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 40:ecef15b1dfad 18
salco 28:ac5c6350ed9a 19 /* initialize random seed: */
salco 31:ed23647fd16e 20 srand (time(NULL));
salco 33:c8b4e5a392e6 21 myMaze = new Labyrinthe();
salco 33:c8b4e5a392e6 22
salco 28:ac5c6350ed9a 23 myMaze->setDirection(UP);
salco 28:ac5c6350ed9a 24 //c=0;
salco 35:d81f6b927932 25 ssc32 = new Serial(PB_6, PB_7);
salco 27:ea60d12dccdf 26 ctrDesPattes = new Faculter_motrice(ssc32/*pc*/);
salco 28:ac5c6350ed9a 27 m_valueCapteurUltrasonic = 0;
salco 28:ac5c6350ed9a 28 m_valueCapteurIR = 0;
salco 28:ac5c6350ed9a 29 m_valueCapteurProximiter = 0;
salco 40:ecef15b1dfad 30 for(int i =0; i < DIRECTIVE_TABLEAUDECOMMANDE_SIZE; i++)tableauDeCommange[i]= 0;
salco 28:ac5c6350ed9a 31 size_tableauDeCommange=0;
salco 39:34d7802e8d15 32 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r set explorer \n\r");
salco 36:474d4795aafa 33 myMaze->setMyPos(Labyrinthe::explorer);
salco 35:d81f6b927932 34 //myMaze->setC(EXPLORER,C5);
salco 19:0ac80045ba4c 35 //m_CtrlBridge = m_CtrlBridge->getInstance();
salco 19:0ac80045ba4c 36 //a enlever de commentaire//m_ListDesModules = m_CtrlBridge->findModule(0,1,0,0);
salco 39:34d7802e8d15 37
salco 27:ea60d12dccdf 38 //Serial pc(USBTX, USBRX);
salco 39:34d7802e8d15 39
salco 27:ea60d12dccdf 40 //ssc32->set_flow_control(0);
salco 39:34d7802e8d15 41
salco 35:d81f6b927932 42
salco 35:d81f6b927932 43 //debug("\n\r directive Init");
salco 27:ea60d12dccdf 44 m_ListDesModules = m_CtrlBridge->findModule(0,CAPTEUR,DISTANCE,0);
salco 27:ea60d12dccdf 45 m_ListDesModules.append(m_CtrlBridge->findModule(0,CAPTEUR,PROXIMITEE,0));
salco 39:34d7802e8d15 46 for(int i=0; i < m_ListDesModules.size(); i++) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_ListDesModules[%i]:%i",i,m_ListDesModules[i]);
salco 39:34d7802e8d15 47
salco 27:ea60d12dccdf 48 m_capteurUltrasonic= m_CtrlBridge->findModule(0,CAPTEUR,ULTRASONIQUE,0x27/*0b100111*/);
salco 39:34d7802e8d15 49 if(!(m_capteurUltrasonic.empty()))
salco 39:34d7802e8d15 50 {
salco 39:34d7802e8d15 51 debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurUltrasonic found");
salco 39:34d7802e8d15 52 for(int i=0; i < m_capteurUltrasonic.size(); i++) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurUltrasonic[%i]:%i",i,m_capteurUltrasonic[i]);
salco 39:34d7802e8d15 53 }
salco 39:34d7802e8d15 54 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurUltrasonic not found");
salco 39:34d7802e8d15 55
salco 39:34d7802e8d15 56
salco 27:ea60d12dccdf 57 m_capteurIR= m_CtrlBridge->findModule(0,CAPTEUR,DISTANCE,0x27/*0b100111*/);
salco 39:34d7802e8d15 58 if(!(m_capteurIR.empty()))
salco 39:34d7802e8d15 59 {
salco 39:34d7802e8d15 60 debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurIR found");
salco 39:34d7802e8d15 61 for(int i=0; i < m_capteurIR.size(); i++) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurIR[%i]:%i",i,m_capteurIR[i]);
salco 39:34d7802e8d15 62 }
salco 39:34d7802e8d15 63 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurIR not found");
salco 39:34d7802e8d15 64
salco 27:ea60d12dccdf 65 m_capteurProximiter= m_CtrlBridge->findModule(0,CAPTEUR,PROXIMITEE,0x0E/*0b001110*/);
salco 39:34d7802e8d15 66 if(!(m_capteurProximiter.empty()))
salco 39:34d7802e8d15 67 {
salco 39:34d7802e8d15 68 debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurProximiter found");
salco 39:34d7802e8d15 69 for(int i=0; i < m_capteurProximiter.size(); i++) debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurProximiter[%i]:%i",i,m_capteurProximiter[i]);
salco 39:34d7802e8d15 70 }
salco 39:34d7802e8d15 71 else debug(DEBUG_DIRECTIVE_TEST,"\n\r m_capteurProximiter not found");
salco 39:34d7802e8d15 72
salco 28:ac5c6350ed9a 73 ctrDesPattes->moveUp();
salco 39:34d7802e8d15 74
salco 28:ac5c6350ed9a 75 bool getUp=true;
salco 39:34d7802e8d15 76 while((getUp)&& (! ctrDesPattes->isSeqComplet()))
salco 39:34d7802e8d15 77 {
salco 28:ac5c6350ed9a 78 ctrDesPattes->exec();
salco 39:34d7802e8d15 79
salco 28:ac5c6350ed9a 80 if(ctrDesPattes->get_idFrame() >= 5)
salco 39:34d7802e8d15 81 getUp = false;
salco 39:34d7802e8d15 82
salco 28:ac5c6350ed9a 83 }
salco 31:ed23647fd16e 84
salco 39:34d7802e8d15 85 followThePath = false;
salco 28:ac5c6350ed9a 86 ctrDesPattes->calibre();
salco 31:ed23647fd16e 87
salco 39:34d7802e8d15 88
salco 35:d81f6b927932 89 #ifdef DEBUG_DIRECTIVE_GRAPHICAL_INTERFACE
salco 39:34d7802e8d15 90 //analiseMaze();
salco 39:34d7802e8d15 91 ///wait(2);
salco 39:34d7802e8d15 92 //debug("\x1B[2J"); //clear screen
salco 39:34d7802e8d15 93 /*debug("\x1B[25l");//hide cursor
salco 39:34d7802e8d15 94 debug("\x1B[;H");*/ //cursor default position
salco 39:34d7802e8d15 95
salco 35:d81f6b927932 96 //createSLbox(0,0,5,15,"Mode");
salco 39:34d7802e8d15 97 /*createDLbox(0,0,10,20,"Menu");//(1,12,10,20,"test2");
salco 39:34d7802e8d15 98 setText(1,3,"1) BrainControle");
salco 39:34d7802e8d15 99 setText(1,4,"2) Show Maze");*/
salco 39:34d7802e8d15 100 //createDLbox(16,0,5,15,"Stage");
salco 39:34d7802e8d15 101
salco 39:34d7802e8d15 102 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C1);
salco 39:34d7802e8d15 103 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C2);
salco 39:34d7802e8d15 104 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C3);
salco 39:34d7802e8d15 105 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C4);
salco 39:34d7802e8d15 106 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C5);
salco 39:34d7802e8d15 107 myMaze->setC(Labyrinthe::vide,0,0,Labyrinthe::C6);
salco 39:34d7802e8d15 108 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C7);
salco 39:34d7802e8d15 109 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C8);
salco 39:34d7802e8d15 110 myMaze->setC(Labyrinthe::mur,0,0,Labyrinthe::C9);
salco 39:34d7802e8d15 111
salco 39:34d7802e8d15 112 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C1);
salco 39:34d7802e8d15 113 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C2);
salco 39:34d7802e8d15 114 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C3);
salco 39:34d7802e8d15 115 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C4);
salco 39:34d7802e8d15 116 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C5);
salco 39:34d7802e8d15 117 myMaze->setC(Labyrinthe::vide,3,0,Labyrinthe::C6);
salco 39:34d7802e8d15 118 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C7);
salco 39:34d7802e8d15 119 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C8);
salco 39:34d7802e8d15 120 myMaze->setC(Labyrinthe::mur ,3,0,Labyrinthe::C9);
salco 39:34d7802e8d15 121
salco 39:34d7802e8d15 122 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C1);
salco 39:34d7802e8d15 123 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C2);
salco 39:34d7802e8d15 124 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C3);
salco 39:34d7802e8d15 125 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C4);
salco 39:34d7802e8d15 126 myMaze->setC(Labyrinthe::vide,6,0,Labyrinthe::C5);
salco 39:34d7802e8d15 127 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C6);
salco 39:34d7802e8d15 128 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C7);
salco 39:34d7802e8d15 129 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C8);
salco 39:34d7802e8d15 130 myMaze->setC(Labyrinthe::mur ,6,0,Labyrinthe::C9);
salco 39:34d7802e8d15 131
salco 39:34d7802e8d15 132 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C1);
salco 39:34d7802e8d15 133 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C2);
salco 39:34d7802e8d15 134 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C3);
salco 39:34d7802e8d15 135 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C4);
salco 39:34d7802e8d15 136 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C5);
salco 39:34d7802e8d15 137 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C6);
salco 39:34d7802e8d15 138 myMaze->setC(Labyrinthe::mur ,0,-3,Labyrinthe::C7);
salco 39:34d7802e8d15 139 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C8);
salco 39:34d7802e8d15 140 myMaze->setC(Labyrinthe::vide,0,-3,Labyrinthe::C9);
salco 39:34d7802e8d15 141
salco 39:34d7802e8d15 142 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C1);
salco 39:34d7802e8d15 143 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C2);
salco 39:34d7802e8d15 144 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C3);
salco 39:34d7802e8d15 145 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C4);
salco 39:34d7802e8d15 146 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C5);
salco 39:34d7802e8d15 147 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C6);
salco 39:34d7802e8d15 148 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C7);
salco 39:34d7802e8d15 149 myMaze->setC(Labyrinthe::mur ,3,-3,Labyrinthe::C8);
salco 39:34d7802e8d15 150 myMaze->setC(Labyrinthe::vide,3,-3,Labyrinthe::C9);
salco 39:34d7802e8d15 151
salco 39:34d7802e8d15 152 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C1);
salco 39:34d7802e8d15 153 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C2);
salco 39:34d7802e8d15 154 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C3);
salco 39:34d7802e8d15 155 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C4);
salco 39:34d7802e8d15 156 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C5);
salco 39:34d7802e8d15 157 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C6);
salco 39:34d7802e8d15 158 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C7);
salco 39:34d7802e8d15 159 myMaze->setC(Labyrinthe::vide,6,-3,Labyrinthe::C8);
salco 39:34d7802e8d15 160 myMaze->setC(Labyrinthe::mur ,6,-3,Labyrinthe::C9);
salco 39:34d7802e8d15 161 #endif
salco 39:34d7802e8d15 162 myMaze->setMyPos(Labyrinthe::explorer);
salco 38:57d5f36a0333 163
salco 39:34d7802e8d15 164 #ifdef DEBUG_DIRECTIVE_TEST_CAPTEUR
salco 39:34d7802e8d15 165 debug("\x1B[2J"); //clear screen
salco 39:34d7802e8d15 166 char areaLatt =0;
salco 39:34d7802e8d15 167 char areaVert =0;
salco 39:34d7802e8d15 168 int idCommand = 0;
salco 39:34d7802e8d15 169 while(idCommand != 9)
salco 39:34d7802e8d15 170 {
salco 39:34d7802e8d15 171
salco 40:ecef15b1dfad 172
salco 39:34d7802e8d15 173 debug("\n\r press any key");
salco 39:34d7802e8d15 174 idCommand = fgetc(pc) - '0';
salco 40:ecef15b1dfad 175 debug("\x1B[;H"); //cursor default position
salco 39:34d7802e8d15 176 debug("\x1B[2J"); //clear screen
salco 39:34d7802e8d15 177
salco 39:34d7802e8d15 178 updateModuleValue();
salco 39:34d7802e8d15 179
salco 39:34d7802e8d15 180 //////////////////////////////
salco 39:34d7802e8d15 181 // Traitement du Labyrinthe //
salco 39:34d7802e8d15 182 //////////////////////////////
salco 39:34d7802e8d15 183 debug("\n\r -invert ultrasonicToCm: %02f ",inchToCm(ultrasonicToInch(m_valueCapteurIR)));
salco 39:34d7802e8d15 184 debug("\n\r -invert IRToCm(%02f): %02f ",ADCTomv(m_valueCapteurUltrasonic),IRToCm(ADCTomv(m_valueCapteurUltrasonic)));
salco 39:34d7802e8d15 185 //debug("\n\r -IR(value):%i ",m_valueCapteurIR);
salco 39:34d7802e8d15 186 debug("\n\r -IRToCm(%02f): %02f ",ADCTomv(m_valueCapteurIR),IRToCm(ADCTomv(m_valueCapteurIR)));
salco 39:34d7802e8d15 187
salco 39:34d7802e8d15 188 debug("\n\r -ultrasonic(value):%f ",m_valueCapteurUltrasonic);
salco 39:34d7802e8d15 189 debug("\n\r -ultrasonicToInch: %02f ",ultrasonicToInch(m_valueCapteurUltrasonic));
salco 39:34d7802e8d15 190 debug("\n\r -ultrasonicToCm: %02f ",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)));
salco 39:34d7802e8d15 191
salco 39:34d7802e8d15 192 debug("\n\r -m_valueCapteurProximiter: %02d ",m_valueCapteurProximiter);
salco 39:34d7802e8d15 193 //wait(.5);
salco 39:34d7802e8d15 194
salco 39:34d7802e8d15 195
salco 39:34d7802e8d15 196 if((inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic))<= 1) /*&& (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80)*/)//enlever parce que il est lock avec des limites
salco 39:34d7802e8d15 197 { //capteur ultrasson embrouiller/imprecis
salco 39:34d7802e8d15 198 debug("\n\r -Capteur Ultrasson brouiller");
salco 39:34d7802e8d15 199 //addTableauDeCommande(6);
salco 39:34d7802e8d15 200 }
salco 39:34d7802e8d15 201 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) <= DIRECTIVE_ULTRASONIC_LIMIT_SHORT)
salco 39:34d7802e8d15 202 { //plus proche que 1 case
salco 40:ecef15b1dfad 203 debug("\n\r -Objet proche %g <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_SHORT);
salco 39:34d7802e8d15 204
salco 39:34d7802e8d15 205 areaLatt =0;
salco 39:34d7802e8d15 206
salco 39:34d7802e8d15 207 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= DIRECTIVE_IR_LIMIT_SHORT)
salco 39:34d7802e8d15 208 {
salco 39:34d7802e8d15 209 /*
salco 39:34d7802e8d15 210 /---\
salco 39:34d7802e8d15 211 |?M?| //vert 0
salco 39:34d7802e8d15 212 |.X.| //latt 0
salco 39:34d7802e8d15 213 |...|
salco 39:34d7802e8d15 214 \---/
salco 39:34d7802e8d15 215 */
salco 39:34d7802e8d15 216 areaVert = 0;
salco 39:34d7802e8d15 217 }
salco 39:34d7802e8d15 218 else
salco 39:34d7802e8d15 219 {
salco 39:34d7802e8d15 220 /*
salco 39:34d7802e8d15 221 /-M-\
salco 39:34d7802e8d15 222 |?V?| //vert 1
salco 39:34d7802e8d15 223 |.X.| //latt 0
salco 39:34d7802e8d15 224 |...|
salco 39:34d7802e8d15 225 \---/
salco 39:34d7802e8d15 226 */
salco 39:34d7802e8d15 227 areaVert = 1;
salco 39:34d7802e8d15 228 }
salco 39:34d7802e8d15 229
salco 39:34d7802e8d15 230
salco 39:34d7802e8d15 231 }
salco 39:34d7802e8d15 232 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) <= DIRECTIVE_ULTRASONIC_LIMIT_MIDDLE)
salco 39:34d7802e8d15 233 { //plus proche que 2 case
salco 40:ecef15b1dfad 234 debug("\n\r -Objet proche %g <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_MIDDLE);
salco 39:34d7802e8d15 235 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 236 /*
salco 39:34d7802e8d15 237 /-M-\
salco 39:34d7802e8d15 238 |?V?| //vert 1
salco 39:34d7802e8d15 239 |.X.| //latt 0
salco 39:34d7802e8d15 240 |...|
salco 39:34d7802e8d15 241 \---/
salco 39:34d7802e8d15 242 */
salco 39:34d7802e8d15 243 areaLatt =0;
salco 39:34d7802e8d15 244 areaVert =1;
salco 39:34d7802e8d15 245 }
salco 39:34d7802e8d15 246 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) <= DIRECTIVE_ULTRASONIC_LIMIT_LONG)
salco 39:34d7802e8d15 247 { //plus proche que 2 case
salco 40:ecef15b1dfad 248 debug("\n\r -Objet proche %g <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_LONG);
salco 39:34d7802e8d15 249 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 250 /*
salco 39:34d7802e8d15 251 /-M-\
salco 39:34d7802e8d15 252 |?V?| //vert 1
salco 39:34d7802e8d15 253 |.X.| //latt 0
salco 39:34d7802e8d15 254 |...|
salco 39:34d7802e8d15 255 \---/
salco 39:34d7802e8d15 256 */
salco 39:34d7802e8d15 257 areaLatt =0;
salco 39:34d7802e8d15 258 areaVert =1;
salco 39:34d7802e8d15 259 }
salco 39:34d7802e8d15 260 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) > DIRECTIVE_ULTRASONIC_LIMIT_LONG)
salco 39:34d7802e8d15 261 { //plus proche que 2 case
salco 40:ecef15b1dfad 262 debug("\n\r -Objet proche %g >= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_LONG);
salco 39:34d7802e8d15 263 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 264 /*
salco 39:34d7802e8d15 265 /?V?\
salco 39:34d7802e8d15 266 |?V?| //vert 2
salco 39:34d7802e8d15 267 |.X.| //latt 0
salco 39:34d7802e8d15 268 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 269 \---/
salco 39:34d7802e8d15 270 */
salco 39:34d7802e8d15 271
salco 39:34d7802e8d15 272 areaLatt =0;
salco 39:34d7802e8d15 273 areaVert =2;
salco 39:34d7802e8d15 274 }
salco 39:34d7802e8d15 275
salco 39:34d7802e8d15 276
salco 39:34d7802e8d15 277
salco 39:34d7802e8d15 278 /*if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 60)
salco 39:34d7802e8d15 279 {
salco 39:34d7802e8d15 280 debug("\n\r -Confirmation IR");
salco 39:34d7802e8d15 281 areaVert =2;
salco 39:34d7802e8d15 282 }
salco 39:34d7802e8d15 283 else if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 30)
salco 39:34d7802e8d15 284 {
salco 39:34d7802e8d15 285 debug("\n\r -Confirmation IR");
salco 39:34d7802e8d15 286 areaVert =1;
salco 39:34d7802e8d15 287 }*/
salco 39:34d7802e8d15 288
salco 39:34d7802e8d15 289
salco 39:34d7802e8d15 290 if(areaVert >= areaLatt)
salco 39:34d7802e8d15 291 {
salco 39:34d7802e8d15 292 switch(areaVert)
salco 39:34d7802e8d15 293 {
salco 39:34d7802e8d15 294 case 0:
salco 39:34d7802e8d15 295 /*
salco 39:34d7802e8d15 296 /---\
salco 39:34d7802e8d15 297 |?M?| //vert 0
salco 39:34d7802e8d15 298 |.X.| //latt 0
salco 39:34d7802e8d15 299 |...|
salco 39:34d7802e8d15 300 \---/
salco 39:34d7802e8d15 301 */
salco 39:34d7802e8d15 302
salco 39:34d7802e8d15 303 debug("\n\r +---+ ");
salco 39:34d7802e8d15 304 debug("\n\r |?M?| //vert 0 ");
salco 39:34d7802e8d15 305 debug("\n\r |.X.| //latt 0 ");
salco 39:34d7802e8d15 306 debug("\n\r |...| ");
salco 39:34d7802e8d15 307 debug("\n\r +---+ ");
salco 39:34d7802e8d15 308 break;
salco 39:34d7802e8d15 309 case 1://impossible pour le moment IR trop instable//
salco 39:34d7802e8d15 310
salco 39:34d7802e8d15 311
salco 39:34d7802e8d15 312
salco 39:34d7802e8d15 313 if(areaLatt == 1)
salco 39:34d7802e8d15 314 {
salco 39:34d7802e8d15 315 /*
salco 39:34d7802e8d15 316 /?M?\
salco 39:34d7802e8d15 317 |VVV| //vert 1
salco 39:34d7802e8d15 318 |.X.| //latt 1
salco 39:34d7802e8d15 319 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 320 \---/
salco 39:34d7802e8d15 321 */
salco 39:34d7802e8d15 322 debug("\n\r +-M-+ ");
salco 39:34d7802e8d15 323 debug("\n\r |VVV| //vert 1 ");
salco 39:34d7802e8d15 324 debug("\n\r |.X.| //latt 1 ");
salco 39:34d7802e8d15 325 debug("\n\r |...| // objet possiblement a proximiter ");
salco 39:34d7802e8d15 326 debug("\n\r +---+ ");
salco 39:34d7802e8d15 327 }
salco 39:34d7802e8d15 328 else
salco 39:34d7802e8d15 329 {
salco 39:34d7802e8d15 330 /*
salco 39:34d7802e8d15 331 /-M-\
salco 39:34d7802e8d15 332 |?V?| //vert 1
salco 39:34d7802e8d15 333 |.X.| //latt 0
salco 39:34d7802e8d15 334 |...|
salco 39:34d7802e8d15 335 \---/
salco 39:34d7802e8d15 336 */
salco 39:34d7802e8d15 337
salco 39:34d7802e8d15 338 debug("\n\r +-M-+ ");
salco 39:34d7802e8d15 339 debug("\n\r |?V?| //vert 1 ");
salco 39:34d7802e8d15 340 debug("\n\r |.X.| //latt 0 ");
salco 39:34d7802e8d15 341 debug("\n\r |...| ");
salco 39:34d7802e8d15 342 debug("\n\r +---+ ");
salco 39:34d7802e8d15 343 }
salco 39:34d7802e8d15 344 break;
salco 39:34d7802e8d15 345 case 2:
salco 39:34d7802e8d15 346
salco 39:34d7802e8d15 347 switch(areaLatt)
salco 39:34d7802e8d15 348 {
salco 39:34d7802e8d15 349 case 0://impossible pour le moment IR trop instable//
salco 39:34d7802e8d15 350 /*
salco 39:34d7802e8d15 351 /?V?\
salco 39:34d7802e8d15 352 |?V?| //vert 2
salco 39:34d7802e8d15 353 |.X.| //latt 0
salco 39:34d7802e8d15 354 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 355 \---/
salco 39:34d7802e8d15 356 */
salco 39:34d7802e8d15 357 debug("\n\r +?V?+ ");
salco 39:34d7802e8d15 358 debug("\n\r |?V?| //vert 2 ");
salco 39:34d7802e8d15 359 debug("\n\r |.X.| //latt 0 ");
salco 39:34d7802e8d15 360 debug("\n\r |...| // objet possiblement a proximiter ");
salco 39:34d7802e8d15 361 debug("\n\r +---+ ");
salco 39:34d7802e8d15 362 break;
salco 39:34d7802e8d15 363 case 1://impossible pour le moment IR trop instable//
salco 39:34d7802e8d15 364 /*
salco 39:34d7802e8d15 365 /?V?\
salco 39:34d7802e8d15 366 |VVV| //vert 2
salco 39:34d7802e8d15 367 |.X.| //latt 1
salco 39:34d7802e8d15 368 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 369 \---/
salco 39:34d7802e8d15 370 */
salco 39:34d7802e8d15 371 debug("\n\r +-M-+ ");
salco 39:34d7802e8d15 372 debug("\n\r |VVV| //vert 2 ");
salco 39:34d7802e8d15 373 debug("\n\r |.X.| //latt 1 ");
salco 39:34d7802e8d15 374 debug("\n\r |...| // objet possiblement a proximiter ");
salco 39:34d7802e8d15 375 debug("\n\r +---+ ");
salco 39:34d7802e8d15 376 break;
salco 39:34d7802e8d15 377 case 2:
salco 39:34d7802e8d15 378 /*
salco 39:34d7802e8d15 379 /VVV\
salco 39:34d7802e8d15 380 |VVV| //vert 2
salco 39:34d7802e8d15 381 |.X.| //latt 2
salco 39:34d7802e8d15 382 |...|
salco 39:34d7802e8d15 383 \---/
salco 39:34d7802e8d15 384 */
salco 39:34d7802e8d15 385 debug("\n\r +VVV+ ");
salco 39:34d7802e8d15 386 debug("\n\r |VVV| //vert 2 ");
salco 39:34d7802e8d15 387 debug("\n\r |.X.| //latt 2 ");
salco 39:34d7802e8d15 388 debug("\n\r |...| ");
salco 39:34d7802e8d15 389 debug("\n\r +---+ ");
salco 39:34d7802e8d15 390 break;
salco 39:34d7802e8d15 391 }
salco 39:34d7802e8d15 392 break;
salco 39:34d7802e8d15 393 }
salco 39:34d7802e8d15 394 }
salco 39:34d7802e8d15 395 /*if((ultrasonicToInch(m_valueCapteurUltrasonic)< 1) && (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80))
salco 39:34d7802e8d15 396 { //capteur ultrasson embrouiller/imprecis
salco 39:34d7802e8d15 397 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 39:34d7802e8d15 398 //addTableauDeCommande(6);
salco 39:34d7802e8d15 399 }
salco 39:34d7802e8d15 400 else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=24)
salco 39:34d7802e8d15 401 { //plus proche que 10pouce
salco 39:34d7802e8d15 402 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 39:34d7802e8d15 403 areaLatt =2;
salco 39:34d7802e8d15 404 areaVert =2;
salco 39:34d7802e8d15 405 }
salco 39:34d7802e8d15 406 else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=12)
salco 39:34d7802e8d15 407 { //plus proche que 10pouce
salco 39:34d7802e8d15 408 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 39:34d7802e8d15 409 areaLatt =1;
salco 39:34d7802e8d15 410 areaVert =1;
salco 39:34d7802e8d15 411 }
salco 39:34d7802e8d15 412 debug(DEBUG_DIRECTIVE_TEST,": %i",ultrasonicToInch(m_valueCapteurUltrasonic));
salco 39:34d7802e8d15 413
salco 39:34d7802e8d15 414 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 60)
salco 39:34d7802e8d15 415 {
salco 39:34d7802e8d15 416 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 39:34d7802e8d15 417 areaVert =2;
salco 39:34d7802e8d15 418 }
salco 39:34d7802e8d15 419 else if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 30)
salco 39:34d7802e8d15 420 {
salco 39:34d7802e8d15 421 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 39:34d7802e8d15 422 areaVert =1;
salco 39:34d7802e8d15 423 }
salco 39:34d7802e8d15 424 debug(DEBUG_DIRECTIVE_TEST,": %i",IRToCm(ADCTomv(m_valueCapteurIR)));*/
salco 39:34d7802e8d15 425 }
salco 31:ed23647fd16e 426 #endif
salco 40:ecef15b1dfad 427
salco 2:4c5b0f6d0a6b 428 }
salco 2:4c5b0f6d0a6b 429 Directive::~Directive()
salco 2:4c5b0f6d0a6b 430 {
salco 39:34d7802e8d15 431
salco 3:e0d6e081a9d3 432 if(ctrDesPattes)
salco 39:34d7802e8d15 433 delete ctrDesPattes;
salco 19:0ac80045ba4c 434 if(ssc32)
salco 39:34d7802e8d15 435 delete ssc32;
salco 31:ed23647fd16e 436 if(myMaze)
salco 39:34d7802e8d15 437 delete myMaze;
salco 2:4c5b0f6d0a6b 438 }
salco 3:e0d6e081a9d3 439 void Directive::task(void)//ALL CODE HERE//
salco 2:4c5b0f6d0a6b 440 {
salco 40:ecef15b1dfad 441 #ifdef DEBUG_DIRECTIVE_MINIMAL_PRESENTATION
salco 40:ecef15b1dfad 442 if(pc.readable())
salco 40:ecef15b1dfad 443 {
salco 40:ecef15b1dfad 444 int idCommand=0;
salco 40:ecef15b1dfad 445 idCommand = fgetc(pc) - '0';
salco 40:ecef15b1dfad 446 string mymap;
salco 40:ecef15b1dfad 447 switch(idCommand)
salco 40:ecef15b1dfad 448 {
salco 40:ecef15b1dfad 449 case 1:
salco 40:ecef15b1dfad 450 debug("\n\r 1: Show Map ");
salco 40:ecef15b1dfad 451
salco 40:ecef15b1dfad 452 mymap = myMaze->showMap();
salco 40:ecef15b1dfad 453 debug("\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 40:ecef15b1dfad 454 //char caseCaract = 0;
salco 40:ecef15b1dfad 455 debug("\n\r");
salco 40:ecef15b1dfad 456 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 40:ecef15b1dfad 457 debug("\n\r");
salco 40:ecef15b1dfad 458 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 40:ecef15b1dfad 459 debug("\n\r");
salco 40:ecef15b1dfad 460 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 40:ecef15b1dfad 461 debug("\n\r");
salco 40:ecef15b1dfad 462 break;
salco 40:ecef15b1dfad 463
salco 40:ecef15b1dfad 464 case 2:
salco 40:ecef15b1dfad 465 debug("\n\r *2: Show tableauDeCommange[]");
salco 40:ecef15b1dfad 466 debug("\n\r -TAB:");
salco 40:ecef15b1dfad 467 for(int i =0; i<DIRECTIVE_TABLEAUDECOMMANDE_SIZE; i++) debug("[%02x]",tableauDeCommange[i]);
salco 40:ecef15b1dfad 468 if(followThePath == true)
salco 40:ecef15b1dfad 469 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r EN MODE FOLLOW THE PATH");
salco 40:ecef15b1dfad 470 else
salco 40:ecef15b1dfad 471 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r HORS MODE FOLLOW THE PATH");
salco 40:ecef15b1dfad 472 break;
salco 40:ecef15b1dfad 473
salco 40:ecef15b1dfad 474 case 3:
salco 40:ecef15b1dfad 475 debug("\n\r *3: Show value Capteurs");
salco 40:ecef15b1dfad 476 debug("\n\r -IRToCm(%02f): %02f",ADCTomv(m_valueCapteurIR),IRToCm(ADCTomv(m_valueCapteurIR)));
salco 40:ecef15b1dfad 477 debug("\n\r -ultrasonicToInch to cm: %02f",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)));
salco 40:ecef15b1dfad 478 debug("\n\r -m_valueCapteurProximiter: %02d",m_valueCapteurProximiter);
salco 40:ecef15b1dfad 479 break;
salco 40:ecef15b1dfad 480
salco 40:ecef15b1dfad 481 default:
salco 40:ecef15b1dfad 482 debug("\n\n\r Press key 0-9 to select an option");
salco 40:ecef15b1dfad 483 debug("\n\r *1: Show Map");
salco 40:ecef15b1dfad 484 debug("\n\r *2: Show tableauDeCommange[]");
salco 40:ecef15b1dfad 485 debug("\n\r *3: Show value Capteurs");
salco 40:ecef15b1dfad 486 break;
salco 40:ecef15b1dfad 487 }
salco 40:ecef15b1dfad 488 }
salco 40:ecef15b1dfad 489 #endif
salco 39:34d7802e8d15 490
salco 39:34d7802e8d15 491 #ifdef DEBUG_BOOT_GRAPHICAL_INTERFACE
salco 39:34d7802e8d15 492 debug("\x1B[2J"); //clear screen
salco 39:34d7802e8d15 493 debug("\x1B[25l");//hide cursor
salco 39:34d7802e8d15 494 debug("\x1B[;H"); //cursor default position
salco 39:34d7802e8d15 495 debug("\n\r--------In task directive--------");
salco 40:ecef15b1dfad 496 for(int i = 0; i<size_tableauDeCommange; i++) debug("\n\r tableauDeCommange[%i]: %x",i,tableauDeCommange[i]);
salco 39:34d7802e8d15 497
salco 39:34d7802e8d15 498 /*
salco 39:34d7802e8d15 499 createDLbox(0,0,10,25,"BrainControle");
salco 39:34d7802e8d15 500 setText(1,3,"1) Move Up");
salco 39:34d7802e8d15 501 setText(1,4,"2) Move Down");
salco 39:34d7802e8d15 502 setText(1,5,"3) Move Left");
salco 39:34d7802e8d15 503 setText(1,6,"4) Move Right");
salco 39:34d7802e8d15 504
salco 39:34d7802e8d15 505 int idCommand;
salco 39:34d7802e8d15 506 do{
salco 37:f53e9f7a14df 507 if(pc.readable()){
salco 39:34d7802e8d15 508 idCommand = fgetc(pc) - '0';
salco 39:34d7802e8d15 509 switch(idCommand)
salco 39:34d7802e8d15 510 {
salco 39:34d7802e8d15 511 case 1:
salco 39:34d7802e8d15 512 myMaze->goUp();
salco 39:34d7802e8d15 513 break;
salco 39:34d7802e8d15 514 case 2:
salco 39:34d7802e8d15 515 myMaze->goDown();
salco 39:34d7802e8d15 516 break;
salco 39:34d7802e8d15 517 case 3:
salco 39:34d7802e8d15 518 myMaze->goLeft();
salco 39:34d7802e8d15 519 break;
salco 39:34d7802e8d15 520 case 4:
salco 39:34d7802e8d15 521 myMaze->goRight();
salco 39:34d7802e8d15 522 break;
salco 39:34d7802e8d15 523 }
salco 39:34d7802e8d15 524 myMaze->setMyPos(Labyrinthe::explorer);
salco 39:34d7802e8d15 525
salco 39:34d7802e8d15 526 string mymap = myMaze->showMap();
salco 39:34d7802e8d15 527 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r Labyrinthe map: X:%02x Y:%02x \n\r",myMaze->getX(),myMaze->getY());
salco 39:34d7802e8d15 528 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i+6]);
salco 39:34d7802e8d15 529 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 39:34d7802e8d15 530 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i+3]);
salco 39:34d7802e8d15 531 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 39:34d7802e8d15 532 for(int i=0; i<3; i++) debug(DEBUG_DIRECTIVE_LABYRINTH," [%02X] ",mymap[i]);
salco 39:34d7802e8d15 533 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r");
salco 39:34d7802e8d15 534
salco 39:34d7802e8d15 535 #ifdef DBG_MAIN_DELAY_SEC
salco 39:34d7802e8d15 536 debug("\n\r\n wait \n\r\n");
salco 39:34d7802e8d15 537 wait(DBG_MAIN_DELAY_SEC);
salco 39:34d7802e8d15 538 #endif
salco 39:34d7802e8d15 539
salco 39:34d7802e8d15 540 debug("\x1B[2J"); //clear screen
salco 39:34d7802e8d15 541 debug("\x1B[;H"); //cursor default position
salco 39:34d7802e8d15 542 createDLbox(0,0,10,25,"BrainControle");
salco 39:34d7802e8d15 543 setText(1,3,"1) Move Up");
salco 39:34d7802e8d15 544 setText(1,4,"2) Move Down");
salco 39:34d7802e8d15 545 setText(1,5,"3) Move Left");
salco 39:34d7802e8d15 546 setText(1,6,"4) Move Right");
salco 37:f53e9f7a14df 547 }
salco 37:f53e9f7a14df 548 }while(1); */
salco 31:ed23647fd16e 549 #endif
salco 36:474d4795aafa 550
salco 28:ac5c6350ed9a 551 //debug(DEBUG_DIRECTIVE_TEST,"\n\rIn task directive");
salco 37:f53e9f7a14df 552 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 553 if(ctrDesPattes->isSeqComplet())
salco 39:34d7802e8d15 554 {
salco 40:ecef15b1dfad 555
salco 28:ac5c6350ed9a 556 ////////////////
salco 28:ac5c6350ed9a 557 // Inspection //
salco 28:ac5c6350ed9a 558 ////////////////
salco 40:ecef15b1dfad 559 //updateModuleValue();
salco 39:34d7802e8d15 560
salco 39:34d7802e8d15 561 if((tableauDeCommange[0] == TBL_CMD_MARCHE) && (size_tableauDeCommange == 1))
salco 39:34d7802e8d15 562 {
salco 39:34d7802e8d15 563 //addTableauDeCommande(0x81);
salco 39:34d7802e8d15 564 //addTableauDeCommande(0x82);
salco 39:34d7802e8d15 565 //mabey//addTableauDeCommande(0x83);
salco 39:34d7802e8d15 566 addTableauDeCommande(0x84);
salco 39:34d7802e8d15 567
salco 39:34d7802e8d15 568 //addTableauDeCommande(0x85);
salco 39:34d7802e8d15 569 //mabey//addTableauDeCommande(0x86);
salco 39:34d7802e8d15 570 addTableauDeCommande(0x87);
salco 39:34d7802e8d15 571 addTableauDeCommande(0x88);
salco 39:34d7802e8d15 572 }
salco 39:34d7802e8d15 573
salco 39:34d7802e8d15 574
salco 39:34d7802e8d15 575 if(tableauDeCommange[0] == 0)
salco 39:34d7802e8d15 576 {
salco 39:34d7802e8d15 577 //pas sur que c'Est tout ce qui doit etre ici mais je vois pas quoi d'autre pour le moment.
salco 39:34d7802e8d15 578
salco 39:34d7802e8d15 579 ////////////////
salco 39:34d7802e8d15 580 // Inspection //
salco 39:34d7802e8d15 581 ////////////////
salco 39:34d7802e8d15 582 //flag.append(1,0);//0x02);
salco 39:34d7802e8d15 583 /*for(int i=0; i<m_ListDesModules.length(); ++i) {
salco 39:34d7802e8d15 584 wait_us(300);
salco 39:34d7802e8d15 585 flag.clear();
salco 39:34d7802e8d15 586 flag.append(1,7);
salco 39:34d7802e8d15 587 data.clear();
salco 39:34d7802e8d15 588 debug("\n\r result: %d",m_CtrlBridge->send(m_ListDesModules.at(i),flag,data));
salco 39:34d7802e8d15 589
salco 39:34d7802e8d15 590 debug("\n\r flag: %d",flag[0]);
salco 39:34d7802e8d15 591 debug("\n\r data: %x",data[0]);
salco 39:34d7802e8d15 592 }*/
salco 39:34d7802e8d15 593
salco 39:34d7802e8d15 594 updateModuleValue();
salco 39:34d7802e8d15 595
salco 39:34d7802e8d15 596 //////////////////////////////
salco 39:34d7802e8d15 597 // Traitement du Labyrinthe //
salco 39:34d7802e8d15 598 //////////////////////////////
salco 40:ecef15b1dfad 599 #ifdef DEBUG_DIRECTIVE_LABYRINTH
salco 40:ecef15b1dfad 600 debug("\n\r -IRToCm(%02f): %02f",ADCTomv(m_valueCapteurIR),IRToCm(ADCTomv(m_valueCapteurIR)));
salco 40:ecef15b1dfad 601 debug("\n\r -ultrasonicToInch: %02f",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)));
salco 40:ecef15b1dfad 602 debug("\n\r -m_valueCapteurProximiter: %02d",m_valueCapteurProximiter);
salco 40:ecef15b1dfad 603 #endif
salco 39:34d7802e8d15 604 #endif //DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 605 if(followThePath == true)
salco 39:34d7802e8d15 606 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r EN MODE FOLLOW THE PATH");
salco 39:34d7802e8d15 607 else
salco 39:34d7802e8d15 608 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r HORS MODE FOLLOW THE PATH");
salco 39:34d7802e8d15 609
salco 39:34d7802e8d15 610 analiseMaze();
salco 39:34d7802e8d15 611 char nextCase=0;
salco 39:34d7802e8d15 612 /*switch(myMaze->getDirection()) {
salco 39:34d7802e8d15 613 case UP:
salco 31:ed23647fd16e 614 nextCase = myMaze->getC(myMaze->getX(),myMaze->getY()+1);
salco 31:ed23647fd16e 615 break;
salco 39:34d7802e8d15 616
salco 39:34d7802e8d15 617 case DOWN:
salco 31:ed23647fd16e 618 nextCase = myMaze->getC(myMaze->getX(),myMaze->getY()-1);
salco 31:ed23647fd16e 619 break;
salco 39:34d7802e8d15 620
salco 39:34d7802e8d15 621 case LEFT:
salco 31:ed23647fd16e 622 nextCase = myMaze->getC(myMaze->getX()-1,myMaze->getY());
salco 31:ed23647fd16e 623 break;
salco 39:34d7802e8d15 624
salco 39:34d7802e8d15 625 case RIGHT:
salco 31:ed23647fd16e 626 nextCase = myMaze->getC(myMaze->getX()+1,myMaze->getY());
salco 31:ed23647fd16e 627 break;
salco 39:34d7802e8d15 628 }*/
salco 40:ecef15b1dfad 629 if(( myMaze->getC_Foward() == Labyrinthe::vide ) || (myMaze->getC_Foward() == Labyrinthe::pasExplorer ))
salco 39:34d7802e8d15 630 followThePath = false;
salco 39:34d7802e8d15 631
salco 39:34d7802e8d15 632
salco 38:57d5f36a0333 633
salco 39:34d7802e8d15 634 if(followThePath == false)
salco 39:34d7802e8d15 635 {
salco 39:34d7802e8d15 636 nextCase = myMaze->getC_Foward();
salco 39:34d7802e8d15 637
salco 39:34d7802e8d15 638 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",nextCase);
salco 39:34d7802e8d15 639 switch(nextCase )
salco 38:57d5f36a0333 640 {
salco 39:34d7802e8d15 641 case Labyrinthe::vide :
salco 39:34d7802e8d15 642 #ifdef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 643 debug("nextCase Vide\n\r");
salco 39:34d7802e8d15 644 #endif
salco 39:34d7802e8d15 645 debug(DEBUG_DIRECTIVE_TEST," Javance");
salco 39:34d7802e8d15 646 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 647 addTableauDeCommande(TBL_CMD_MARCHE);
salco 39:34d7802e8d15 648 #endif
salco 39:34d7802e8d15 649 //if(followThePath == true)
salco 39:34d7802e8d15 650 //followThePath = false;
salco 39:34d7802e8d15 651 myMaze->moveFoward();
salco 39:34d7802e8d15 652 myMaze->setMyPos(Labyrinthe::explorer);
salco 39:34d7802e8d15 653 break;
salco 39:34d7802e8d15 654
salco 39:34d7802e8d15 655 case Labyrinthe::explorer :// ici pt amiliorer
salco 39:34d7802e8d15 656 debug(DEBUG_DIRECTIVE_TEST," \n\rnext case deja explorer");
salco 39:34d7802e8d15 657 if(rand()%2)
salco 39:34d7802e8d15 658 {
salco 39:34d7802e8d15 659 debug(DEBUG_DIRECTIVE_TEST,"\n\r jeverifie si alternative");
salco 39:34d7802e8d15 660
salco 40:ecef15b1dfad 661 /*#ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 662 addTableauDeCommande(TBL_CMD_MARCHE);
salco 40:ecef15b1dfad 663 #endif*/
salco 39:34d7802e8d15 664 nextCase = checkOtherWay(myMaze->getDirection(),1);
salco 40:ecef15b1dfad 665
salco 40:ecef15b1dfad 666 turnRightDirection(myMaze->getDirection(),nextCase);
salco 39:34d7802e8d15 667 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rnextcase: %i",nextCase);
salco 39:34d7802e8d15 668 switch(nextCase)
salco 39:34d7802e8d15 669 { // on verifie si on a une direction possible
salco 39:34d7802e8d15 670 case UP:
salco 39:34d7802e8d15 671 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne UP");
salco 39:34d7802e8d15 672 turnRightDirection(myMaze->getDirection(),UP);
salco 39:34d7802e8d15 673 myMaze->setDirection(UP);
salco 39:34d7802e8d15 674
salco 39:34d7802e8d15 675
salco 39:34d7802e8d15 676 break;
salco 39:34d7802e8d15 677 case DOWN:
salco 39:34d7802e8d15 678 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne DOWN");
salco 39:34d7802e8d15 679 turnRightDirection(myMaze->getDirection(),DOWN);
salco 39:34d7802e8d15 680 myMaze->setDirection(DOWN);
salco 39:34d7802e8d15 681
salco 39:34d7802e8d15 682 break;
salco 39:34d7802e8d15 683 case LEFT:
salco 39:34d7802e8d15 684 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne LEFT");
salco 39:34d7802e8d15 685 turnRightDirection(myMaze->getDirection(),LEFT);
salco 39:34d7802e8d15 686 myMaze->setDirection(LEFT);
salco 39:34d7802e8d15 687
salco 39:34d7802e8d15 688 break;
salco 39:34d7802e8d15 689 case RIGHT:
salco 39:34d7802e8d15 690 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne RIGHT");
salco 39:34d7802e8d15 691 turnRightDirection(myMaze->getDirection(),RIGHT);
salco 39:34d7802e8d15 692 myMaze->setDirection(RIGHT);
salco 39:34d7802e8d15 693
salco 39:34d7802e8d15 694 break;
salco 39:34d7802e8d15 695 default: //aucun autre chemin
salco 39:34d7802e8d15 696 debug(DEBUG_DIRECTIVE_TEST,"\n\r aucune autre place alors J'avance");
salco 39:34d7802e8d15 697 myMaze->moveFoward();
salco 39:34d7802e8d15 698 myMaze->setMyPos(Labyrinthe::explorer);
salco 39:34d7802e8d15 699 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 700 addTableauDeCommande(TBL_CMD_MARCHE);
salco 39:34d7802e8d15 701 #endif
salco 39:34d7802e8d15 702 break;
salco 39:34d7802e8d15 703 }
salco 39:34d7802e8d15 704 }
salco 39:34d7802e8d15 705 else
salco 39:34d7802e8d15 706 {
salco 39:34d7802e8d15 707 debug(DEBUG_DIRECTIVE_TEST,"\n\r jeverifie pas si alternative");
salco 39:34d7802e8d15 708 myMaze->moveFoward();
salco 39:34d7802e8d15 709 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 710 addTableauDeCommande(TBL_CMD_MARCHE);
salco 39:34d7802e8d15 711 #endif
salco 39:34d7802e8d15 712 }
salco 39:34d7802e8d15 713 //myMaze->moveFoward();
salco 39:34d7802e8d15 714 //myMaze->setMyPos(Labyrinthe::explorer);
salco 39:34d7802e8d15 715 break;
salco 39:34d7802e8d15 716
salco 39:34d7802e8d15 717 case Labyrinthe::mur:
salco 39:34d7802e8d15 718 debug(DEBUG_DIRECTIVE_TEST,"\n\r UN MURRRRRRRR\n\r");
salco 39:34d7802e8d15 719 if(searchNewWay())
salco 39:34d7802e8d15 720 {
salco 39:34d7802e8d15 721 debug(DEBUG_DIRECTIVE_TEST,"\n\r New Path found ");
salco 39:34d7802e8d15 722 followThePath = true;
salco 39:34d7802e8d15 723 }
salco 39:34d7802e8d15 724 else
salco 39:34d7802e8d15 725 {
salco 39:34d7802e8d15 726 debug(DEBUG_DIRECTIVE_TEST,"\n\r New Path not found ");
salco 39:34d7802e8d15 727 }
salco 39:34d7802e8d15 728 /* switch(checkOtherWay(myMaze->getDirection()))// on verifie si on a une direction possible
salco 39:34d7802e8d15 729 {
salco 39:34d7802e8d15 730 case UP:
salco 39:34d7802e8d15 731 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne UP ");
salco 39:34d7802e8d15 732 myMaze->setDirection(UP);
salco 39:34d7802e8d15 733 //myMaze->moveFoward();
salco 39:34d7802e8d15 734 break;
salco 39:34d7802e8d15 735 case DOWN:
salco 39:34d7802e8d15 736 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne DOWN ");
salco 39:34d7802e8d15 737 myMaze->setDirection(DOWN);
salco 39:34d7802e8d15 738 //myMaze->moveFoward();
salco 39:34d7802e8d15 739 break;
salco 39:34d7802e8d15 740 case LEFT:
salco 39:34d7802e8d15 741 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne LEFT");
salco 39:34d7802e8d15 742 myMaze->setDirection(LEFT);
salco 39:34d7802e8d15 743 //myMaze->moveFoward();
salco 39:34d7802e8d15 744 break;
salco 39:34d7802e8d15 745 case RIGHT:
salco 39:34d7802e8d15 746 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne RIGHT");
salco 39:34d7802e8d15 747 myMaze->setDirection(RIGHT);
salco 39:34d7802e8d15 748 //myMaze->moveFoward();
salco 39:34d7802e8d15 749 break;
salco 39:34d7802e8d15 750 default://aucun autre chemin
salco 39:34d7802e8d15 751 /debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne completement ");
salco 39:34d7802e8d15 752 if(myMaze->getDirection() %2)
salco 39:34d7802e8d15 753 myMaze->setDirection(myMaze->getDirection()+1);
salco 39:34d7802e8d15 754 else
salco 39:34d7802e8d15 755 myMaze->setDirection(myMaze->getDirection()-1);
salco 39:34d7802e8d15 756
salco 39:34d7802e8d15 757 //myMaze->moveFoward();
salco 39:34d7802e8d15 758
salco 39:34d7802e8d15 759 break;
salco 39:34d7802e8d15 760 }
salco 39:34d7802e8d15 761 myMaze->setMyPos(Labyrinthe::explorer);*/
salco 39:34d7802e8d15 762 break;
salco 39:34d7802e8d15 763
salco 39:34d7802e8d15 764 case Labyrinthe::pasExplorer ://pas sur
salco 39:34d7802e8d15 765 debug(DEBUG_DIRECTIVE_TEST," pasExplorer");
salco 39:34d7802e8d15 766 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 767 addTableauDeCommande(TBL_CMD_MARCHE);
salco 39:34d7802e8d15 768 #endif
salco 39:34d7802e8d15 769 break;
salco 39:34d7802e8d15 770 }
salco 39:34d7802e8d15 771 }
salco 39:34d7802e8d15 772 else
salco 39:34d7802e8d15 773 { // on suis un chemin
salco 39:34d7802e8d15 774 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rmode follow the path\n\n\r");
salco 39:34d7802e8d15 775 positionXY tempPosition;
salco 40:ecef15b1dfad 776
salco 39:34d7802e8d15 777 //std::list<positionXY>::iterator it=bufferNewWay.begin();
salco 39:34d7802e8d15 778 for (std::list<positionXY>::iterator it=bufferNewWay.begin(); it != bufferNewWay.end(); ++it)
salco 39:34d7802e8d15 779 {
salco 39:34d7802e8d15 780 //tempPosition = *(it);
salco 39:34d7802e8d15 781 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",(*it).posX);
salco 39:34d7802e8d15 782 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",(*it).posY);
salco 39:34d7802e8d15 783 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.direction: %i",(*it).direction);
salco 39:34d7802e8d15 784 } //std::cout << ' ' << *it;
salco 38:57d5f36a0333 785
salco 39:34d7802e8d15 786 if((bufferNewWay.front()).direction != myMaze->getDirection()) //turn time
salco 39:34d7802e8d15 787 {
salco 39:34d7802e8d15 788 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r le chemin a pas la meme direction");
salco 39:34d7802e8d15 789 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r current dir : %i",myMaze->getDirection());
salco 39:34d7802e8d15 790 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r next dir : %i",(bufferNewWay.front()).direction);
salco 39:34d7802e8d15 791
salco 40:ecef15b1dfad 792 addTableauDeCommande(TBL_CMD_RECULE);
salco 40:ecef15b1dfad 793 addTableauDeCommande(TBL_CMD_RECULE);
salco 39:34d7802e8d15 794 turnRightDirection(myMaze->getDirection(),(bufferNewWay.front()).direction);
salco 39:34d7802e8d15 795 switch((bufferNewWay.front()).direction)
salco 38:57d5f36a0333 796 {
salco 38:57d5f36a0333 797 case UP:
salco 38:57d5f36a0333 798 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne UP");
salco 38:57d5f36a0333 799 myMaze->setDirection(UP);
salco 39:34d7802e8d15 800
salco 39:34d7802e8d15 801 /*if(((bufferNewWay.front()).direction + myMaze->getDirection()) == (UP + DOWN))
salco 39:34d7802e8d15 802 {
salco 39:34d7802e8d15 803 if(rand()%2)
salco 39:34d7802e8d15 804 {
salco 39:34d7802e8d15 805 addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 806 addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 807 }
salco 39:34d7802e8d15 808 else
salco 39:34d7802e8d15 809 {
salco 39:34d7802e8d15 810 addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 811 addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 812 }
salco 39:34d7802e8d15 813 }*/
salco 39:34d7802e8d15 814 break;
salco 38:57d5f36a0333 815 case DOWN:
salco 38:57d5f36a0333 816 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne DOWN");
salco 38:57d5f36a0333 817 myMaze->setDirection(DOWN);
salco 39:34d7802e8d15 818
salco 39:34d7802e8d15 819 break;
salco 38:57d5f36a0333 820 case LEFT:
salco 38:57d5f36a0333 821 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne LEFT");
salco 38:57d5f36a0333 822 myMaze->setDirection(LEFT);
salco 39:34d7802e8d15 823
salco 39:34d7802e8d15 824 break;
salco 38:57d5f36a0333 825 case RIGHT:
salco 38:57d5f36a0333 826 debug(DEBUG_DIRECTIVE_TEST,"\n\r Je tourne RIGHT");
salco 38:57d5f36a0333 827 myMaze->setDirection(RIGHT);
salco 38:57d5f36a0333 828 break;
salco 38:57d5f36a0333 829 }
salco 39:34d7802e8d15 830 //bufferNewWay.pop_front();
salco 39:34d7802e8d15 831 }
salco 39:34d7802e8d15 832 else
salco 38:57d5f36a0333 833 {
salco 39:34d7802e8d15 834 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r le chemin a la meme direction");
salco 39:34d7802e8d15 835 //myMaze->getXY_Foward(tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 836 tempPosition.posX = myMaze->getX();
salco 39:34d7802e8d15 837 tempPosition.posY = myMaze->getY();
salco 39:34d7802e8d15 838 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r current X: %i",tempPosition.posX);
salco 39:34d7802e8d15 839 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r current Y: %i",tempPosition.posY);
salco 39:34d7802e8d15 840 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r buffer X: %i",(bufferNewWay.front()).posX);
salco 39:34d7802e8d15 841 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r buffer Y: %i",(bufferNewWay.front()).posY);
salco 39:34d7802e8d15 842 if((tempPosition.posX == (bufferNewWay.front()).posX) && (tempPosition.posY == (bufferNewWay.front()).posY))
salco 39:34d7802e8d15 843 {
salco 40:ecef15b1dfad 844 updateMaze();
salco 40:ecef15b1dfad 845
salco 40:ecef15b1dfad 846 nextCase = myMaze->getC_Foward();
salco 40:ecef15b1dfad 847
salco 40:ecef15b1dfad 848 if(nextCase == Labyrinthe::mur)
salco 40:ecef15b1dfad 849 {
salco 40:ecef15b1dfad 850 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r problem");
salco 40:ecef15b1dfad 851 followThePath = false;
salco 40:ecef15b1dfad 852 }
salco 40:ecef15b1dfad 853 else
salco 40:ecef15b1dfad 854 {
salco 39:34d7802e8d15 855 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r aucun problem");
salco 39:34d7802e8d15 856 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 857 addTableauDeCommande(TBL_CMD_MARCHE);
salco 39:34d7802e8d15 858 #endif
salco 39:34d7802e8d15 859 myMaze->moveFoward();
salco 39:34d7802e8d15 860 myMaze->setMyPos(Labyrinthe::explorer);
salco 39:34d7802e8d15 861 bufferNewWay.pop_front();
salco 40:ecef15b1dfad 862 }
salco 39:34d7802e8d15 863 }
salco 39:34d7802e8d15 864 else
salco 39:34d7802e8d15 865 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r problem");
salco 39:34d7802e8d15 866
salco 38:57d5f36a0333 867 }
salco 39:34d7802e8d15 868
salco 39:34d7802e8d15 869
salco 39:34d7802e8d15 870
salco 39:34d7802e8d15 871 if(bufferNewWay.empty())
salco 39:34d7802e8d15 872 followThePath = false;
salco 40:ecef15b1dfad 873
salco 40:ecef15b1dfad 874
salco 40:ecef15b1dfad 875
salco 40:ecef15b1dfad 876
salco 40:ecef15b1dfad 877
salco 40:ecef15b1dfad 878
salco 40:ecef15b1dfad 879
salco 39:34d7802e8d15 880 /*do{
salco 39:34d7802e8d15 881 //tempPosition.posX = (bufferNewWay.front()).posX;
salco 39:34d7802e8d15 882 //tempPosition.posY = (bufferNewWay.front()).posY;
salco 39:34d7802e8d15 883
salco 39:34d7802e8d15 884 tempPosition = bufferNewWay.front();
salco 39:34d7802e8d15 885 bufferNewWay.pop_front();
salco 39:34d7802e8d15 886 debug("\n\r bufferNewWay: %i",bufferNewWay.size());
salco 39:34d7802e8d15 887 debug("\n\rtempPosition.posX: %i",tempPosition.posX);
salco 39:34d7802e8d15 888 debug("\n\rtempPosition.posY: %i",tempPosition.posY);
salco 39:34d7802e8d15 889 }while(bufferNewWay.size() != 0);*/
salco 39:34d7802e8d15 890 }
salco 39:34d7802e8d15 891 #ifdef DEBUG_DIRECTIVE_SHOW_MAP_LABYRINTH
salco 39:34d7802e8d15 892 string mymap = myMaze->showMap();
salco 39:34d7802e8d15 893 debug("\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 39:34d7802e8d15 894 //char caseCaract = 0;
salco 39:34d7802e8d15 895 debug("\n\r");
salco 39:34d7802e8d15 896 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 39:34d7802e8d15 897 debug("\n\r");
salco 39:34d7802e8d15 898 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 39:34d7802e8d15 899 debug("\n\r");
salco 39:34d7802e8d15 900 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 39:34d7802e8d15 901 debug("\n\r");
salco 39:34d7802e8d15 902 #endif
salco 39:34d7802e8d15 903 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 904 /*if((ultrasonicToInch(m_valueCapteurUltrasonic)< 1) && (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80)) //capteur ultrasson embrouiller/imprecis
salco 39:34d7802e8d15 905 {
salco 39:34d7802e8d15 906 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 39:34d7802e8d15 907 addTableauDeCommande(6);
salco 39:34d7802e8d15 908 }
salco 39:34d7802e8d15 909 else if(ultrasonicToInch(m_valueCapteurUltrasonic) < 10) { //plus proche que 10pouce
salco 39:34d7802e8d15 910 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche");
salco 39:34d7802e8d15 911 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 10) {
salco 39:34d7802e8d15 912 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 39:34d7802e8d15 913 addTableauDeCommande(7);
salco 39:34d7802e8d15 914
salco 39:34d7802e8d15 915
salco 39:34d7802e8d15 916 //ici potentielle scaning
salco 39:34d7802e8d15 917 } else {
salco 39:34d7802e8d15 918 addTableauDeCommande(4);
salco 39:34d7802e8d15 919 addTableauDeCommande(4);
salco 39:34d7802e8d15 920 addTableauDeCommande(4);
salco 39:34d7802e8d15 921 }
salco 39:34d7802e8d15 922 } else {
salco 39:34d7802e8d15 923 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Nothing:");
salco 39:34d7802e8d15 924 addTableauDeCommande(6);
salco 39:34d7802e8d15 925
salco 39:34d7802e8d15 926
salco 39:34d7802e8d15 927 int randomNbr = rand() % 4;
salco 39:34d7802e8d15 928 switch(randomNbr)
salco 39:34d7802e8d15 929 {
salco 39:34d7802e8d15 930 case 1:
salco 39:34d7802e8d15 931 debug(DEBUG_DIRECTIVE_TEST," Javance");
salco 39:34d7802e8d15 932 addTableauDeCommande(6);
salco 39:34d7802e8d15 933 break;
salco 39:34d7802e8d15 934 case 2:
salco 39:34d7802e8d15 935 debug(DEBUG_DIRECTIVE_TEST," Je tourne a gauche");
salco 39:34d7802e8d15 936 addTableauDeCommande(4);
salco 39:34d7802e8d15 937 break;
salco 39:34d7802e8d15 938 case 3:
salco 39:34d7802e8d15 939 debug(DEBUG_DIRECTIVE_TEST," Je tourne a droite");
salco 39:34d7802e8d15 940 addTableauDeCommande(5);
salco 39:34d7802e8d15 941 break;
salco 39:34d7802e8d15 942 default:
salco 39:34d7802e8d15 943 debug(DEBUG_DIRECTIVE_TEST," Jattend");
salco 39:34d7802e8d15 944 break;
salco 39:34d7802e8d15 945 }
salco 39:34d7802e8d15 946
salco 39:34d7802e8d15 947
salco 39:34d7802e8d15 948 //addTableauDeCommande(6);
salco 39:34d7802e8d15 949 }*/
salco 40:ecef15b1dfad 950 #ifdef DEBUG_DIRECTIVE_TASK_PAUSE
salco 40:ecef15b1dfad 951 debug("\n\r press any 9 key");
salco 40:ecef15b1dfad 952 for(int idCmd=0; idCmd != 9; idCmd = fgetc(pc) - '0');
salco 40:ecef15b1dfad 953 #endif
salco 39:34d7802e8d15 954 ///////////////
salco 39:34d7802e8d15 955 // Mouvement //
salco 39:34d7802e8d15 956 ///////////////
salco 39:34d7802e8d15 957 }
salco 39:34d7802e8d15 958 else
salco 28:ac5c6350ed9a 959 {
salco 39:34d7802e8d15 960
salco 39:34d7802e8d15 961 switch(tableauDeCommange[0])
salco 28:ac5c6350ed9a 962 {
salco 39:34d7802e8d15 963 case 11:
salco 39:34d7802e8d15 964 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_calibre");
salco 39:34d7802e8d15 965 ctrDesPattes->calibre();
salco 39:34d7802e8d15 966 break;
salco 28:ac5c6350ed9a 967 case 2:
salco 39:34d7802e8d15 968 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveUp");
salco 39:34d7802e8d15 969 ctrDesPattes->moveUp();
salco 39:34d7802e8d15 970 break;
salco 28:ac5c6350ed9a 971 case 3:
salco 39:34d7802e8d15 972 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveDown");
salco 39:34d7802e8d15 973 ctrDesPattes->moveDown();
salco 39:34d7802e8d15 974 break;
salco 39:34d7802e8d15 975 case 4:
salco 39:34d7802e8d15 976 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_turnLeft");
salco 39:34d7802e8d15 977 ctrDesPattes->turnLeft();
salco 39:34d7802e8d15 978 break;
salco 39:34d7802e8d15 979 case 5:
salco 39:34d7802e8d15 980 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_trunRight");
salco 39:34d7802e8d15 981 ctrDesPattes->trunRight();
salco 39:34d7802e8d15 982 break;
salco 39:34d7802e8d15 983 case 6:
salco 39:34d7802e8d15 984 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveFront");
salco 39:34d7802e8d15 985 ctrDesPattes->moveFront();
salco 39:34d7802e8d15 986 break;
salco 39:34d7802e8d15 987 case 7:
salco 39:34d7802e8d15 988 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_moveBack");
salco 39:34d7802e8d15 989 ctrDesPattes->moveBack();
salco 39:34d7802e8d15 990 break;
salco 39:34d7802e8d15 991 /*case 8:
salco 39:34d7802e8d15 992 ctrDesPattes->moveBack();
salco 39:34d7802e8d15 993 break;*/
salco 39:34d7802e8d15 994 case 0x81:
salco 39:34d7802e8d15 995 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 1");
salco 39:34d7802e8d15 996 ctrDesPattes->repositioner(1);
salco 39:34d7802e8d15 997 break;
salco 39:34d7802e8d15 998 case 0x82:
salco 39:34d7802e8d15 999 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 2");
salco 39:34d7802e8d15 1000 ctrDesPattes->repositioner(2);
salco 39:34d7802e8d15 1001 break;
salco 39:34d7802e8d15 1002 case 0x83:
salco 39:34d7802e8d15 1003 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 3");
salco 39:34d7802e8d15 1004 ctrDesPattes->repositioner(3);
salco 39:34d7802e8d15 1005 break;
salco 39:34d7802e8d15 1006 case 0x84:
salco 39:34d7802e8d15 1007 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 4");
salco 39:34d7802e8d15 1008 ctrDesPattes->repositioner(4);
salco 39:34d7802e8d15 1009 break;
salco 39:34d7802e8d15 1010 case 0x85:
salco 39:34d7802e8d15 1011 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 5");
salco 39:34d7802e8d15 1012 ctrDesPattes->repositioner(5);
salco 39:34d7802e8d15 1013 break;
salco 39:34d7802e8d15 1014 case 0x86:
salco 39:34d7802e8d15 1015 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 6");
salco 39:34d7802e8d15 1016 ctrDesPattes->repositioner(6);
salco 39:34d7802e8d15 1017 break;
salco 39:34d7802e8d15 1018 case 0x87:
salco 39:34d7802e8d15 1019 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 7");
salco 39:34d7802e8d15 1020 ctrDesPattes->repositioner(7);
salco 39:34d7802e8d15 1021 break;
salco 39:34d7802e8d15 1022 case 0x88:
salco 39:34d7802e8d15 1023 debug(DEBUG_DIRECTIVE_TEST,"\n\r -set_Repositioner 8");
salco 39:34d7802e8d15 1024 ctrDesPattes->repositioner(8);
salco 39:34d7802e8d15 1025 break;
salco 39:34d7802e8d15 1026 }
salco 39:34d7802e8d15 1027 debug(DEBUG_DIRECTIVE_TEST,"\n\r -TAB:");
salco 40:ecef15b1dfad 1028 for(int i =0; i<DIRECTIVE_TABLEAUDECOMMANDE_SIZE; i++) debug(DEBUG_DIRECTIVE_TEST,"[%02x]",tableauDeCommange[i]);
salco 40:ecef15b1dfad 1029 for(int i =0; i<DIRECTIVE_TABLEAUDECOMMANDE_SIZE; i++) tableauDeCommange[i]= tableauDeCommange[i+1];
salco 40:ecef15b1dfad 1030 tableauDeCommange[DIRECTIVE_TABLEAUDECOMMANDE_SIZE-1] = 0;
salco 39:34d7802e8d15 1031 if(size_tableauDeCommange != 0) size_tableauDeCommange--;
salco 39:34d7802e8d15 1032 }
salco 37:f53e9f7a14df 1033
salco 39:34d7802e8d15 1034 }
salco 39:34d7802e8d15 1035 else
salco 39:34d7802e8d15 1036 {
salco 39:34d7802e8d15 1037 ctrDesPattes->exec();
salco 28:ac5c6350ed9a 1038 }
salco 37:f53e9f7a14df 1039 #endif //DEBUG_DIRECTIVE_LEG_DISABLE
salco 28:ac5c6350ed9a 1040 ////////////////////
salco 28:ac5c6350ed9a 1041 // Update memoire //
salco 28:ac5c6350ed9a 1042 ////////////////////
salco 39:34d7802e8d15 1043
salco 28:ac5c6350ed9a 1044 ////////////
salco 28:ac5c6350ed9a 1045 // Autre? //
salco 28:ac5c6350ed9a 1046 ////////////
salco 39:34d7802e8d15 1047
salco 39:34d7802e8d15 1048
salco 28:ac5c6350ed9a 1049 //debug(DEBUG_DIRECTIVE_TEST,"\n\rOut task directive");
salco 39:34d7802e8d15 1050 #ifdef DEBUG_BOOT_GRAPHICAL_INTERFACE
salco 39:34d7802e8d15 1051 #ifdef DBG_MAIN_DELAY_SEC
salco 39:34d7802e8d15 1052 debug("\n\r\n wait \n\r\n");
salco 39:34d7802e8d15 1053 wait(DBG_MAIN_DELAY_SEC);
salco 39:34d7802e8d15 1054 #endif
salco 39:34d7802e8d15 1055 debug("\n\r---------------------");
salco 37:f53e9f7a14df 1056 #endif
salco 28:ac5c6350ed9a 1057 }
salco 28:ac5c6350ed9a 1058 double Directive::IRToCm (double miliVolt)
salco 28:ac5c6350ed9a 1059 {
salco 28:ac5c6350ed9a 1060 double result=0;
salco 39:34d7802e8d15 1061 //debug("\n\r double value: %02f",miliVolt);
salco 28:ac5c6350ed9a 1062 if(miliVolt < tabIR[0][1])result = tabIR[0][0];
salco 28:ac5c6350ed9a 1063 else if(miliVolt > tabIR[11][1])result = tabIR[11][0];
salco 39:34d7802e8d15 1064
salco 39:34d7802e8d15 1065 for(int i =1; (result==0)&&(i<12); i++)
salco 39:34d7802e8d15 1066 {
salco 39:34d7802e8d15 1067 if((tabIR[i-1][1]<=miliVolt) && (tabIR[i][1]>miliVolt))
salco 39:34d7802e8d15 1068 {
salco 28:ac5c6350ed9a 1069 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 1070 }
salco 28:ac5c6350ed9a 1071 }
salco 28:ac5c6350ed9a 1072 return result;
salco 28:ac5c6350ed9a 1073 }
salco 28:ac5c6350ed9a 1074 void Directive::addTableauDeCommande(unsigned char value)
salco 28:ac5c6350ed9a 1075 {
salco 40:ecef15b1dfad 1076 if(size_tableauDeCommange!=DIRECTIVE_TABLEAUDECOMMANDE_SIZE)
salco 39:34d7802e8d15 1077 {
salco 28:ac5c6350ed9a 1078 tableauDeCommange[size_tableauDeCommange]=value;
salco 28:ac5c6350ed9a 1079 size_tableauDeCommange++;
salco 39:34d7802e8d15 1080
salco 28:ac5c6350ed9a 1081 }
salco 28:ac5c6350ed9a 1082 }
salco 28:ac5c6350ed9a 1083
salco 28:ac5c6350ed9a 1084 void Directive::updateModuleValue(void)
salco 28:ac5c6350ed9a 1085 {
salco 28:ac5c6350ed9a 1086 string flag,data;
salco 39:34d7802e8d15 1087 double tempValue=0;
salco 28:ac5c6350ed9a 1088 flag.clear();
salco 28:ac5c6350ed9a 1089 data.clear();
salco 28:ac5c6350ed9a 1090 flag.append(1,7);
salco 39:34d7802e8d15 1091 //debug("\n\n\r flag size:%i \n\r",flag.size());
salco 28:ac5c6350ed9a 1092 if(m_CtrlBridge->send(m_capteurUltrasonic[0],flag,data))
salco 39:34d7802e8d15 1093 {
salco 39:34d7802e8d15 1094 /*if(data[0] != 1)//patch?
salco 39:34d7802e8d15 1095 tempValue = data[0];*/
salco 39:34d7802e8d15 1096
salco 39:34d7802e8d15 1097 if(data.size() == 2)
salco 39:34d7802e8d15 1098 {
salco 39:34d7802e8d15 1099 tempValue = data[0];
salco 39:34d7802e8d15 1100 //tempValue = (tempValue<<8) + data[1];
salco 39:34d7802e8d15 1101 tempValue = (data[0]<<8) + data[1];
salco 39:34d7802e8d15 1102 }
salco 39:34d7802e8d15 1103 else
salco 39:34d7802e8d15 1104 tempValue = data[0];
salco 39:34d7802e8d15 1105
salco 40:ecef15b1dfad 1106 if(data.size() != 0)
salco 40:ecef15b1dfad 1107 m_valueCapteurUltrasonic = m_valueCapteurUltrasonic+((tempValue -m_valueCapteurUltrasonic)/DIRECTIVE_ULTRASONIC_BUFFER_LENGHT);
salco 39:34d7802e8d15 1108 }
salco 39:34d7802e8d15 1109 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1110 debug("\n\r m_valueCapteurUltrasonic");
salco 39:34d7802e8d15 1111 debug("\n\n\r data size:%i \n\r",data.size());
salco 40:ecef15b1dfad 1112 switch(data.size())
salco 40:ecef15b1dfad 1113 {
salco 40:ecef15b1dfad 1114 case 1:
salco 40:ecef15b1dfad 1115 debug("\n\r -data(value):%i ",data[0]);
salco 40:ecef15b1dfad 1116 break;
salco 40:ecef15b1dfad 1117 case 2:
salco 40:ecef15b1dfad 1118 debug("\n\r -data(value):%i ",(data[0]<<8) + data[1]);
salco 40:ecef15b1dfad 1119 break;
salco 40:ecef15b1dfad 1120 }
salco 40:ecef15b1dfad 1121 //debug("\n\r -data(value):%i ",data[0]);
salco 39:34d7802e8d15 1122 debug("\n\r -tempValue(value):%02f ",tempValue);
salco 39:34d7802e8d15 1123 #endif
salco 39:34d7802e8d15 1124 tempValue=0;
salco 28:ac5c6350ed9a 1125 flag.clear();
salco 28:ac5c6350ed9a 1126 data.clear();
salco 28:ac5c6350ed9a 1127 flag.append(1,7);
salco 39:34d7802e8d15 1128
salco 39:34d7802e8d15 1129 //debug("\n\n\r flag size:%i \n\r",flag.size());
salco 39:34d7802e8d15 1130 if(m_CtrlBridge->send(m_capteurIR[0],flag,data))
salco 39:34d7802e8d15 1131 {
salco 39:34d7802e8d15 1132
salco 39:34d7802e8d15 1133 if(data.size() == 2)
salco 39:34d7802e8d15 1134 {
salco 39:34d7802e8d15 1135 //tempValue = data[0]<<8;
salco 39:34d7802e8d15 1136 //debug("\n\n\r monI: %02f",tempValue);
salco 39:34d7802e8d15 1137 //debug("\n\n\r mondata: %i",data[0]<<8);
salco 39:34d7802e8d15 1138 //tempValue = (tempValue<<8) + data[1];
salco 39:34d7802e8d15 1139 tempValue = (data[0]<<8) + data[1];
salco 39:34d7802e8d15 1140 }
salco 39:34d7802e8d15 1141 else
salco 39:34d7802e8d15 1142 tempValue = data[0];
salco 39:34d7802e8d15 1143
salco 40:ecef15b1dfad 1144 if(data.size() != 0)
salco 40:ecef15b1dfad 1145 m_valueCapteurIR=m_valueCapteurIR+((tempValue-m_valueCapteurIR)/DIRECTIVE_IR_BUFFER_LENGHT);
salco 28:ac5c6350ed9a 1146 }
salco 39:34d7802e8d15 1147 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1148 debug("\n\r m_valueCapteurIR");
salco 39:34d7802e8d15 1149 debug("\n\n\r data size:%i \n\r",data.size());
salco 40:ecef15b1dfad 1150 switch(data.size())
salco 40:ecef15b1dfad 1151 {
salco 40:ecef15b1dfad 1152 case 1:
salco 40:ecef15b1dfad 1153 debug("\n\r -data(value):%i ",data[0]);
salco 40:ecef15b1dfad 1154 break;
salco 40:ecef15b1dfad 1155 case 2:
salco 40:ecef15b1dfad 1156 debug("\n\r -data(value):%i ",(data[0]<<8) + data[1]);
salco 40:ecef15b1dfad 1157 break;
salco 40:ecef15b1dfad 1158 }
salco 40:ecef15b1dfad 1159 //debug("\n\r -data(value):%i ",data[0]);
salco 39:34d7802e8d15 1160 debug("\n\r -tempValue(value):%02f ",tempValue);
salco 39:34d7802e8d15 1161 #endif
salco 39:34d7802e8d15 1162 //debug("\n\n\r data size:%i \n\r",data.size());
salco 39:34d7802e8d15 1163 // debug("\n\r -IR(value):%f ",m_valueCapteurIR);
salco 39:34d7802e8d15 1164 //for(int i=0; i<data.size();i++)debug("\n\r -data[%i]:%i",i,data[i]);
salco 39:34d7802e8d15 1165
salco 28:ac5c6350ed9a 1166 flag.clear();
salco 28:ac5c6350ed9a 1167 data.clear();
salco 28:ac5c6350ed9a 1168 flag.append(1,7);
salco 39:34d7802e8d15 1169 //debug("\n\n\r flag size:%i \n\r",flag.size());
salco 28:ac5c6350ed9a 1170 if(m_CtrlBridge->send(m_capteurProximiter[0],flag,data))
salco 40:ecef15b1dfad 1171
salco 28:ac5c6350ed9a 1172 m_valueCapteurProximiter = data[0];
salco 39:34d7802e8d15 1173
salco 39:34d7802e8d15 1174 // debug("\n\n\r data size:%i \n\r",data.size());
salco 39:34d7802e8d15 1175 // debug("\n\r -m_valueCapteurProximiter(value):%i ",m_valueCapteurProximiter);
salco 28:ac5c6350ed9a 1176 }
salco 28:ac5c6350ed9a 1177
salco 28:ac5c6350ed9a 1178 void Directive::analiseMaze(void)
salco 28:ac5c6350ed9a 1179 {
salco 40:ecef15b1dfad 1180 string mymap = myMaze->showMap();
salco 40:ecef15b1dfad 1181
salco 40:ecef15b1dfad 1182 #ifdef DEBUG_DIRECTIVE_LABYRINTH
salco 40:ecef15b1dfad 1183 debug("\n\r ----------------analiseMaze--------------\n\r");
salco 40:ecef15b1dfad 1184 debug("\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 40:ecef15b1dfad 1185
salco 40:ecef15b1dfad 1186 debug("Direction: ");
salco 39:34d7802e8d15 1187 switch(myMaze->getDirection())
salco 39:34d7802e8d15 1188 {
salco 37:f53e9f7a14df 1189 case UP:
salco 40:ecef15b1dfad 1190 debug("Up \n\r");
salco 37:f53e9f7a14df 1191 break;
salco 37:f53e9f7a14df 1192 case DOWN:
salco 40:ecef15b1dfad 1193 debug("Down \n\r");
salco 37:f53e9f7a14df 1194 break;
salco 37:f53e9f7a14df 1195 case LEFT:
salco 40:ecef15b1dfad 1196 debug("Left \n\r");
salco 37:f53e9f7a14df 1197 break;
salco 37:f53e9f7a14df 1198 case RIGHT:
salco 40:ecef15b1dfad 1199 debug("Right \n\r");
salco 37:f53e9f7a14df 1200 break;
salco 39:34d7802e8d15 1201 }
salco 37:f53e9f7a14df 1202
salco 40:ecef15b1dfad 1203 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 40:ecef15b1dfad 1204 debug("\n\r");
salco 40:ecef15b1dfad 1205 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 40:ecef15b1dfad 1206 debug("\n\r");
salco 40:ecef15b1dfad 1207 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 40:ecef15b1dfad 1208 debug("\n\r");
salco 40:ecef15b1dfad 1209 #endif
salco 40:ecef15b1dfad 1210
salco 40:ecef15b1dfad 1211
salco 40:ecef15b1dfad 1212
salco 40:ecef15b1dfad 1213
salco 40:ecef15b1dfad 1214
salco 40:ecef15b1dfad 1215
salco 40:ecef15b1dfad 1216
salco 39:34d7802e8d15 1217
salco 37:f53e9f7a14df 1218
salco 39:34d7802e8d15 1219 #ifndef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 39:34d7802e8d15 1220 /*if((ultrasonicToInch(m_valueCapteurUltrasonic)< 1) && (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80))
salco 39:34d7802e8d15 1221 { //capteur ultrasson embrouiller/imprecis
salco 39:34d7802e8d15 1222 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 39:34d7802e8d15 1223 //addTableauDeCommande(6);
salco 39:34d7802e8d15 1224 }
salco 39:34d7802e8d15 1225 else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=24)
salco 39:34d7802e8d15 1226 { //plus proche que 10pouce
salco 39:34d7802e8d15 1227 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 39:34d7802e8d15 1228 areaLatt =2;
salco 39:34d7802e8d15 1229 areaVert =2;
salco 39:34d7802e8d15 1230 }
salco 39:34d7802e8d15 1231 else if(ultrasonicToInch(m_valueCapteurUltrasonic) >=12)
salco 39:34d7802e8d15 1232 { //plus proche que 10pouce
salco 39:34d7802e8d15 1233 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Objet proche 2pi");
salco 39:34d7802e8d15 1234 areaLatt =1;
salco 39:34d7802e8d15 1235 areaVert =1;
salco 39:34d7802e8d15 1236 }
salco 39:34d7802e8d15 1237 debug(DEBUG_DIRECTIVE_TEST,": %i",ultrasonicToInch(m_valueCapteurUltrasonic));
salco 39:34d7802e8d15 1238
salco 39:34d7802e8d15 1239 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 60)
salco 39:34d7802e8d15 1240 {
salco 39:34d7802e8d15 1241 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 39:34d7802e8d15 1242 areaVert =2;
salco 39:34d7802e8d15 1243 }
salco 39:34d7802e8d15 1244 else if(IRToCm(ADCTomv(m_valueCapteurIR)) <= 30)
salco 39:34d7802e8d15 1245 {
salco 39:34d7802e8d15 1246 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Confirmation IR");
salco 39:34d7802e8d15 1247 areaVert =1;
salco 39:34d7802e8d15 1248 }
salco 39:34d7802e8d15 1249 debug(DEBUG_DIRECTIVE_TEST,": %i",IRToCm(ADCTomv(m_valueCapteurIR)));*///old one
salco 40:ecef15b1dfad 1250
salco 40:ecef15b1dfad 1251 updateMaze();
salco 40:ecef15b1dfad 1252
salco 40:ecef15b1dfad 1253 #ifdef DEBUG_DIRECTIVE_LABYRINTH
salco 40:ecef15b1dfad 1254 mymap = myMaze->showMap();
salco 40:ecef15b1dfad 1255 //char caseCaract = 0;
salco 40:ecef15b1dfad 1256 debug("\n\r");
salco 40:ecef15b1dfad 1257 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 40:ecef15b1dfad 1258 debug("\n\r");
salco 40:ecef15b1dfad 1259 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 40:ecef15b1dfad 1260 debug("\n\r");
salco 40:ecef15b1dfad 1261 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 40:ecef15b1dfad 1262 debug("\n\r");
salco 40:ecef15b1dfad 1263
salco 40:ecef15b1dfad 1264 debug("\n\r-------------------\n\r");
salco 40:ecef15b1dfad 1265 #endif
salco 40:ecef15b1dfad 1266
salco 40:ecef15b1dfad 1267 }
salco 40:ecef15b1dfad 1268
salco 40:ecef15b1dfad 1269 char Directive::checkOtherWay(char dir, bool checkExplorer)
salco 40:ecef15b1dfad 1270 {
salco 40:ecef15b1dfad 1271 char result = 0;
salco 40:ecef15b1dfad 1272 char order[3];
salco 40:ecef15b1dfad 1273
salco 40:ecef15b1dfad 1274
salco 40:ecef15b1dfad 1275
salco 40:ecef15b1dfad 1276 bool fini = false;
salco 40:ecef15b1dfad 1277
salco 40:ecef15b1dfad 1278 switch(rand() % 6)
salco 40:ecef15b1dfad 1279 {
salco 40:ecef15b1dfad 1280 case 0://[0],[1],[2]
salco 40:ecef15b1dfad 1281 order[0] = 0;
salco 40:ecef15b1dfad 1282 order[1] = 1;
salco 40:ecef15b1dfad 1283 order[2] = 2;
salco 40:ecef15b1dfad 1284 break;
salco 40:ecef15b1dfad 1285 case 1://[0],[2],[1]
salco 40:ecef15b1dfad 1286 order[0] = 0;
salco 40:ecef15b1dfad 1287 order[1] = 2;
salco 40:ecef15b1dfad 1288 order[2] = 1;
salco 40:ecef15b1dfad 1289 break;
salco 40:ecef15b1dfad 1290 case 2://[1],[0],[2]
salco 40:ecef15b1dfad 1291 order[0] = 1;
salco 40:ecef15b1dfad 1292 order[1] = 0;
salco 40:ecef15b1dfad 1293 order[2] = 2;
salco 40:ecef15b1dfad 1294 break;
salco 40:ecef15b1dfad 1295 case 3://[2],[0],[1]
salco 40:ecef15b1dfad 1296 order[0] = 2;
salco 40:ecef15b1dfad 1297 order[1] = 0;
salco 40:ecef15b1dfad 1298 order[2] = 1;
salco 40:ecef15b1dfad 1299 break;
salco 40:ecef15b1dfad 1300 case 4://[1],[2],[0]
salco 40:ecef15b1dfad 1301 order[0] = 1;
salco 40:ecef15b1dfad 1302 order[1] = 2;
salco 40:ecef15b1dfad 1303 order[2] = 0;
salco 40:ecef15b1dfad 1304 break;
salco 40:ecef15b1dfad 1305 case 5://[2],[1],[0]
salco 40:ecef15b1dfad 1306 order[0] = 2;
salco 40:ecef15b1dfad 1307 order[1] = 1;
salco 40:ecef15b1dfad 1308 order[2] = 0;
salco 40:ecef15b1dfad 1309 break;
salco 40:ecef15b1dfad 1310 }
salco 40:ecef15b1dfad 1311 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rresult: ");
salco 40:ecef15b1dfad 1312 for(int i=0; (i<3)&&(!fini); i++)
salco 40:ecef15b1dfad 1313 {
salco 40:ecef15b1dfad 1314 switch(order[i])
salco 40:ecef15b1dfad 1315 { // 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 40:ecef15b1dfad 1316 case 0:
salco 40:ecef15b1dfad 1317 result = myMaze->getC_ToLeft();
salco 40:ecef15b1dfad 1318 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r getC_ToLeft: %i %i ****",result,myMaze->getC_ToLeft());
salco 40:ecef15b1dfad 1319 //if(((Labyrinthe::case_t)result != Labyrinthe::error)&&((Labyrinthe::case_t)result != Labyrinthe::mur) &&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1) )
salco 40:ecef15b1dfad 1320 if(((Labyrinthe::case_t)result == Labyrinthe::vide)&&((Labyrinthe::case_t)result != Labyrinthe::mur) &&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1) )
salco 40:ecef15b1dfad 1321 {
salco 40:ecef15b1dfad 1322 fini = true;
salco 40:ecef15b1dfad 1323 result = LEFT;
salco 40:ecef15b1dfad 1324 }
salco 40:ecef15b1dfad 1325 break;
salco 40:ecef15b1dfad 1326 case 1:
salco 40:ecef15b1dfad 1327 result = myMaze->getC_Backward();
salco 40:ecef15b1dfad 1328 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r getC_Backward: %i %i ****",result,myMaze->getC_Backward());
salco 40:ecef15b1dfad 1329 if(/*((Labyrinthe::case_t)result != Labyrinthe::error)&&*/((Labyrinthe::case_t)result != Labyrinthe::mur)&&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1))
salco 40:ecef15b1dfad 1330 {
salco 40:ecef15b1dfad 1331 fini = true;
salco 40:ecef15b1dfad 1332 result = DOWN;
salco 40:ecef15b1dfad 1333 }
salco 40:ecef15b1dfad 1334 break;
salco 40:ecef15b1dfad 1335 case 2:
salco 40:ecef15b1dfad 1336 result = myMaze->getC_ToRight();
salco 40:ecef15b1dfad 1337 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r getC_ToRight: %i %i ****",result,myMaze->getC_ToRight());
salco 40:ecef15b1dfad 1338 if(/*((Labyrinthe::case_t)result != Labyrinthe::error)&&*/((Labyrinthe::case_t)result != Labyrinthe::mur)&&((checkExplorer)?((Labyrinthe::case_t)result != Labyrinthe::explorer):1))
salco 40:ecef15b1dfad 1339 {
salco 40:ecef15b1dfad 1340 fini = true;
salco 40:ecef15b1dfad 1341 result = RIGHT;
salco 40:ecef15b1dfad 1342 }
salco 40:ecef15b1dfad 1343 break;
salco 40:ecef15b1dfad 1344 }
salco 40:ecef15b1dfad 1345 }
salco 40:ecef15b1dfad 1346
salco 40:ecef15b1dfad 1347 if(fini)
salco 40:ecef15b1dfad 1348 {
salco 40:ecef15b1dfad 1349 switch(dir)
salco 40:ecef15b1dfad 1350 {
salco 40:ecef15b1dfad 1351 /*case UP:
salco 40:ecef15b1dfad 1352 break;*/
salco 40:ecef15b1dfad 1353 case DOWN:
salco 40:ecef15b1dfad 1354 switch(result)
salco 40:ecef15b1dfad 1355 {
salco 40:ecef15b1dfad 1356 case LEFT:
salco 40:ecef15b1dfad 1357 result = RIGHT;
salco 40:ecef15b1dfad 1358 break;
salco 40:ecef15b1dfad 1359 case DOWN:
salco 40:ecef15b1dfad 1360 result = UP;
salco 40:ecef15b1dfad 1361 break;
salco 40:ecef15b1dfad 1362 case RIGHT:
salco 40:ecef15b1dfad 1363 result = LEFT;
salco 40:ecef15b1dfad 1364 break;
salco 40:ecef15b1dfad 1365 }
salco 40:ecef15b1dfad 1366 break;
salco 40:ecef15b1dfad 1367 case LEFT:
salco 40:ecef15b1dfad 1368 switch(result)
salco 40:ecef15b1dfad 1369 {
salco 40:ecef15b1dfad 1370 case LEFT:
salco 40:ecef15b1dfad 1371 result = DOWN;
salco 40:ecef15b1dfad 1372 break;
salco 40:ecef15b1dfad 1373 case DOWN:
salco 40:ecef15b1dfad 1374 result = RIGHT;
salco 40:ecef15b1dfad 1375 break;
salco 40:ecef15b1dfad 1376 case RIGHT:
salco 40:ecef15b1dfad 1377 result = UP;
salco 40:ecef15b1dfad 1378 break;
salco 40:ecef15b1dfad 1379 }
salco 40:ecef15b1dfad 1380 break;
salco 40:ecef15b1dfad 1381 case RIGHT:
salco 40:ecef15b1dfad 1382 switch(result)
salco 40:ecef15b1dfad 1383 {
salco 40:ecef15b1dfad 1384 case LEFT:
salco 40:ecef15b1dfad 1385 result = UP;
salco 40:ecef15b1dfad 1386 break;
salco 40:ecef15b1dfad 1387 case DOWN:
salco 40:ecef15b1dfad 1388 result = LEFT;
salco 40:ecef15b1dfad 1389 break;
salco 40:ecef15b1dfad 1390 case RIGHT:
salco 40:ecef15b1dfad 1391 result = DOWN;
salco 40:ecef15b1dfad 1392 break;
salco 40:ecef15b1dfad 1393 }
salco 40:ecef15b1dfad 1394 break;
salco 40:ecef15b1dfad 1395 }
salco 40:ecef15b1dfad 1396 }
salco 40:ecef15b1dfad 1397 else
salco 40:ecef15b1dfad 1398 result =0;
salco 40:ecef15b1dfad 1399 return result;
salco 40:ecef15b1dfad 1400 }
salco 40:ecef15b1dfad 1401
salco 40:ecef15b1dfad 1402 void Directive::updateMaze(void)
salco 40:ecef15b1dfad 1403 {
salco 40:ecef15b1dfad 1404 char areaLatt =0;
salco 40:ecef15b1dfad 1405 char areaVert =0;
salco 40:ecef15b1dfad 1406
salco 40:ecef15b1dfad 1407 if((inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic))<= 1) /*&& (IRToCm(ADCTomv(m_valueCapteurIR)) <= 80)*/)//enlever parce que il est lock avec des limites
salco 39:34d7802e8d15 1408 { //capteur ultrasson embrouiller/imprecis
salco 39:34d7802e8d15 1409
salco 39:34d7802e8d15 1410 debug(DEBUG_DIRECTIVE_TEST,"\n\r -Capteur Ultrasson brouiller");
salco 39:34d7802e8d15 1411 //addTableauDeCommande(6);
salco 39:34d7802e8d15 1412 }
salco 40:ecef15b1dfad 1413 else if((inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic))) <= DIRECTIVE_ULTRASONIC_LIMIT_SHORT)
salco 39:34d7802e8d15 1414 { //plus proche que 1 case
salco 39:34d7802e8d15 1415 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1416 debug("\n\r -Objet proche %02f <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_SHORT);
salco 39:34d7802e8d15 1417 #endif
salco 39:34d7802e8d15 1418 areaLatt =0;
salco 39:34d7802e8d15 1419
salco 39:34d7802e8d15 1420 if(IRToCm(ADCTomv(m_valueCapteurIR)) <= DIRECTIVE_IR_LIMIT_SHORT)
salco 39:34d7802e8d15 1421 {
salco 39:34d7802e8d15 1422 /*
salco 39:34d7802e8d15 1423 /---\
salco 39:34d7802e8d15 1424 |?M?| //vert 0
salco 39:34d7802e8d15 1425 |.X.| //latt 0
salco 39:34d7802e8d15 1426 |...|
salco 39:34d7802e8d15 1427 \---/
salco 39:34d7802e8d15 1428 */
salco 39:34d7802e8d15 1429 areaVert = 0;
salco 39:34d7802e8d15 1430 }
salco 39:34d7802e8d15 1431 else
salco 39:34d7802e8d15 1432 {
salco 39:34d7802e8d15 1433 /*
salco 39:34d7802e8d15 1434 /-M-\
salco 39:34d7802e8d15 1435 |?V?| //vert 1
salco 39:34d7802e8d15 1436 |.X.| //latt 0
salco 39:34d7802e8d15 1437 |...|
salco 39:34d7802e8d15 1438 \---/
salco 39:34d7802e8d15 1439 */
salco 39:34d7802e8d15 1440 areaVert = 1;
salco 39:34d7802e8d15 1441 }
salco 39:34d7802e8d15 1442 }
salco 39:34d7802e8d15 1443 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) <= DIRECTIVE_ULTRASONIC_LIMIT_MIDDLE)
salco 39:34d7802e8d15 1444 { //plus proche que 2 case
salco 39:34d7802e8d15 1445 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1446 debug("\n\r -Objet proche %g <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_MIDDLE);
salco 39:34d7802e8d15 1447 #endif
salco 39:34d7802e8d15 1448 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 1449 /*
salco 39:34d7802e8d15 1450 /-M-\
salco 39:34d7802e8d15 1451 |?V?| //vert 1
salco 39:34d7802e8d15 1452 |.X.| //latt 0
salco 39:34d7802e8d15 1453 |...|
salco 39:34d7802e8d15 1454 \---/
salco 39:34d7802e8d15 1455 */
salco 39:34d7802e8d15 1456 areaLatt =0;
salco 39:34d7802e8d15 1457 areaVert =1;
salco 39:34d7802e8d15 1458 }
salco 39:34d7802e8d15 1459 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) <= DIRECTIVE_ULTRASONIC_LIMIT_LONG)
salco 39:34d7802e8d15 1460 { //plus proche que 2 case
salco 39:34d7802e8d15 1461 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1462 debug("\n\r -Objet proche %g <= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_LONG);
salco 39:34d7802e8d15 1463 #endif
salco 39:34d7802e8d15 1464 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 1465 /*
salco 39:34d7802e8d15 1466 /-M-\
salco 39:34d7802e8d15 1467 |?V?| //vert 1
salco 39:34d7802e8d15 1468 |.X.| //latt 0
salco 39:34d7802e8d15 1469 |...|
salco 39:34d7802e8d15 1470 \---/
salco 39:34d7802e8d15 1471 */
salco 39:34d7802e8d15 1472 areaLatt =0;
salco 39:34d7802e8d15 1473 areaVert =1;
salco 39:34d7802e8d15 1474 }
salco 39:34d7802e8d15 1475 else if(inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)) > DIRECTIVE_ULTRASONIC_LIMIT_LONG)
salco 39:34d7802e8d15 1476 { //plus proche que 2 case
salco 39:34d7802e8d15 1477 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1478 debug("\n\r -Objet proche %g >= %i cm",inchToCm(ultrasonicToInch(m_valueCapteurUltrasonic)),DIRECTIVE_ULTRASONIC_LIMIT_LONG);
salco 39:34d7802e8d15 1479 #endif
salco 39:34d7802e8d15 1480 //modifier vue que il ne detecte pas asser loin
salco 39:34d7802e8d15 1481 /*
salco 39:34d7802e8d15 1482 /?V?\
salco 39:34d7802e8d15 1483 |?V?| //vert 2
salco 39:34d7802e8d15 1484 |.X.| //latt 0
salco 39:34d7802e8d15 1485 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1486 \---/
salco 39:34d7802e8d15 1487 */
salco 39:34d7802e8d15 1488
salco 39:34d7802e8d15 1489 areaLatt =0;
salco 39:34d7802e8d15 1490 areaVert =2;
salco 39:34d7802e8d15 1491 }
salco 39:34d7802e8d15 1492
salco 39:34d7802e8d15 1493 //debug("\n\r areaLatt: %i, areaVert: %i",areaLatt,areaVert);
salco 39:34d7802e8d15 1494 #endif
salco 37:f53e9f7a14df 1495
salco 39:34d7802e8d15 1496 #ifdef DEBUG_DIRECTIVE_LABYRINTH_USER_CTRL
salco 39:34d7802e8d15 1497 debug("\n\r---analise maze(manualy CTRL)---\n\r");
salco 39:34d7802e8d15 1498 int idCommand = -1;
salco 39:34d7802e8d15 1499 areaVert = 9;
salco 39:34d7802e8d15 1500 areaLatt = 9;
salco 39:34d7802e8d15 1501 /*do {
salco 39:34d7802e8d15 1502 debug("\n\r Enter areaVert [0,1,2]: ");
salco 39:34d7802e8d15 1503 idCommand = fgetc(pc) - '0';
salco 39:34d7802e8d15 1504 debug(" %i",idCommand);
salco 39:34d7802e8d15 1505 } while((idCommand < 0) && (idCommand > 2));
salco 39:34d7802e8d15 1506 areaVert = idCommand;
salco 39:34d7802e8d15 1507
salco 39:34d7802e8d15 1508 do {
salco 39:34d7802e8d15 1509 debug("\n\r Enter areaLatt [0,1,2]: ");
salco 39:34d7802e8d15 1510 idCommand = fgetc(pc) - '0';
salco 39:34d7802e8d15 1511 debug(" %i",idCommand);
salco 39:34d7802e8d15 1512 } while((idCommand < 0) && (idCommand > 2));
salco 39:34d7802e8d15 1513 areaLatt = idCommand;*/
salco 37:f53e9f7a14df 1514
salco 39:34d7802e8d15 1515 debug("\n\r");
salco 39:34d7802e8d15 1516 #endif
salco 39:34d7802e8d15 1517 //changer lalgoritme ici
salco 39:34d7802e8d15 1518
salco 39:34d7802e8d15 1519 /*
salco 39:34d7802e8d15 1520 /---\
salco 39:34d7802e8d15 1521 |?M?| //vert 0
salco 39:34d7802e8d15 1522 |.X.| //latt 0
salco 39:34d7802e8d15 1523 |...|
salco 39:34d7802e8d15 1524 \---/
salco 39:34d7802e8d15 1525
salco 39:34d7802e8d15 1526 /-M-\
salco 39:34d7802e8d15 1527 |?V?| //vert 1
salco 39:34d7802e8d15 1528 |.X.| //latt 0
salco 39:34d7802e8d15 1529 |...|
salco 39:34d7802e8d15 1530 \---/
salco 37:f53e9f7a14df 1531
salco 39:34d7802e8d15 1532 /?M?\
salco 39:34d7802e8d15 1533 |VVV| //vert 1
salco 39:34d7802e8d15 1534 |.X.| //latt 1
salco 39:34d7802e8d15 1535 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1536 \---/
salco 39:34d7802e8d15 1537
salco 39:34d7802e8d15 1538 /?M?\
salco 39:34d7802e8d15 1539 |VVV| //vert 1
salco 39:34d7802e8d15 1540 |.X.| //latt 2
salco 39:34d7802e8d15 1541 |...| // cas impossible
salco 39:34d7802e8d15 1542 \---/
salco 39:34d7802e8d15 1543
salco 39:34d7802e8d15 1544 /?V?\
salco 39:34d7802e8d15 1545 |?V?| //vert 2
salco 39:34d7802e8d15 1546 |.X.| //latt 0
salco 39:34d7802e8d15 1547 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1548 \---/
salco 39:34d7802e8d15 1549
salco 39:34d7802e8d15 1550 /?V?\
salco 39:34d7802e8d15 1551 |VVV| //vert 2
salco 39:34d7802e8d15 1552 |.X.| //latt 1
salco 39:34d7802e8d15 1553 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1554 \---/
salco 37:f53e9f7a14df 1555
salco 39:34d7802e8d15 1556 /VVV\
salco 39:34d7802e8d15 1557 |VVV| //vert 2
salco 39:34d7802e8d15 1558 |.X.| //latt 2
salco 39:34d7802e8d15 1559 |...|
salco 39:34d7802e8d15 1560 \---/
salco 39:34d7802e8d15 1561 */
salco 39:34d7802e8d15 1562 //vertical==0 latt==0 //mur devant
salco 39:34d7802e8d15 1563 //vertical==1 latt==1
salco 40:ecef15b1dfad 1564 #ifdef DEBUG_DIRECTIVE_UPDATE_MODULE
salco 40:ecef15b1dfad 1565 debug("\n\r vertical:%i \n\r latt: %i",areaVert,areaLatt);
salco 40:ecef15b1dfad 1566 #endif
salco 39:34d7802e8d15 1567 ////////////////////////////////////
salco 39:34d7802e8d15 1568 //345
salco 39:34d7802e8d15 1569 //012 | numerotation des case
salco 39:34d7802e8d15 1570 ///////////////////////////////////
salco 39:34d7802e8d15 1571 signed char fieldX[6]= {0,0,0,0,0,0};
salco 39:34d7802e8d15 1572 signed char fieldY[6]= {0,0,0,0,0,0};
salco 39:34d7802e8d15 1573 bool fieldSet = false;
salco 39:34d7802e8d15 1574
salco 39:34d7802e8d15 1575 switch(myMaze->getDirection())
salco 39:34d7802e8d15 1576 {
salco 39:34d7802e8d15 1577 case UP:
salco 39:34d7802e8d15 1578 fieldX[0] = myMaze->getX()-1;
salco 39:34d7802e8d15 1579 fieldY[0] = myMaze->getY()+1;
salco 39:34d7802e8d15 1580 fieldX[1] = myMaze->getX();
salco 39:34d7802e8d15 1581 fieldY[1] = myMaze->getY()+1;
salco 39:34d7802e8d15 1582 fieldX[2] = myMaze->getX()+1;
salco 39:34d7802e8d15 1583 fieldY[2] = myMaze->getY()+1;
salco 39:34d7802e8d15 1584 fieldX[3] = myMaze->getX()-1;
salco 39:34d7802e8d15 1585 fieldY[3] = myMaze->getY()+2;
salco 39:34d7802e8d15 1586 fieldX[4] = myMaze->getX();
salco 39:34d7802e8d15 1587 fieldY[4] = myMaze->getY()+2;
salco 39:34d7802e8d15 1588 fieldX[5] = myMaze->getX()+1;
salco 39:34d7802e8d15 1589 fieldY[5] = myMaze->getY()+2;
salco 39:34d7802e8d15 1590 break;
salco 37:f53e9f7a14df 1591
salco 39:34d7802e8d15 1592 case DOWN:
salco 39:34d7802e8d15 1593 fieldX[0] = myMaze->getX()-1;
salco 39:34d7802e8d15 1594 fieldY[0] = myMaze->getY()-1;
salco 39:34d7802e8d15 1595 fieldX[1] = myMaze->getX();
salco 39:34d7802e8d15 1596 fieldY[1] = myMaze->getY()-1;
salco 39:34d7802e8d15 1597 fieldX[2] = myMaze->getX()+1;
salco 39:34d7802e8d15 1598 fieldY[2] = myMaze->getY()-1;
salco 39:34d7802e8d15 1599 fieldX[3] = myMaze->getX()-1;
salco 39:34d7802e8d15 1600 fieldY[3] = myMaze->getY()-2;
salco 39:34d7802e8d15 1601 fieldX[4] = myMaze->getX();
salco 39:34d7802e8d15 1602 fieldY[4] = myMaze->getY()-2;
salco 39:34d7802e8d15 1603 fieldX[5] = myMaze->getX()+1;
salco 39:34d7802e8d15 1604 fieldY[5] = myMaze->getY()-2;
salco 39:34d7802e8d15 1605 break;
salco 39:34d7802e8d15 1606
salco 39:34d7802e8d15 1607 case LEFT:
salco 39:34d7802e8d15 1608 fieldX[0] = myMaze->getX()-1;
salco 39:34d7802e8d15 1609 fieldY[0] = myMaze->getY()-1;
salco 39:34d7802e8d15 1610 fieldX[1] = myMaze->getX()-1;
salco 39:34d7802e8d15 1611 fieldY[1] = myMaze->getY();
salco 39:34d7802e8d15 1612 fieldX[2] = myMaze->getX()-1;
salco 39:34d7802e8d15 1613 fieldY[2] = myMaze->getY()+1;
salco 39:34d7802e8d15 1614 fieldX[3] = myMaze->getX()-2;
salco 39:34d7802e8d15 1615 fieldY[3] = myMaze->getY()-1;
salco 39:34d7802e8d15 1616 fieldX[4] = myMaze->getX()-2;
salco 39:34d7802e8d15 1617 fieldY[4] = myMaze->getY();
salco 39:34d7802e8d15 1618 fieldX[5] = myMaze->getX()-2;
salco 39:34d7802e8d15 1619 fieldY[5] = myMaze->getY()+1;
salco 39:34d7802e8d15 1620 break;
salco 39:34d7802e8d15 1621
salco 39:34d7802e8d15 1622 case RIGHT:
salco 39:34d7802e8d15 1623 fieldX[0] = myMaze->getX()+1;
salco 39:34d7802e8d15 1624 fieldY[0] = myMaze->getY()-1;
salco 39:34d7802e8d15 1625 fieldX[1] = myMaze->getX()+1;
salco 39:34d7802e8d15 1626 fieldY[1] = myMaze->getY();
salco 39:34d7802e8d15 1627 fieldX[2] = myMaze->getX()+1;
salco 39:34d7802e8d15 1628 fieldY[2] = myMaze->getY()+1;
salco 39:34d7802e8d15 1629 fieldX[3] = myMaze->getX()+2;
salco 39:34d7802e8d15 1630 fieldY[3] = myMaze->getY()-1;
salco 39:34d7802e8d15 1631 fieldX[4] = myMaze->getX()+2;
salco 39:34d7802e8d15 1632 fieldY[4] = myMaze->getY();
salco 39:34d7802e8d15 1633 fieldX[5] = myMaze->getX()+2;
salco 39:34d7802e8d15 1634 fieldY[5] = myMaze->getY()+1;
salco 39:34d7802e8d15 1635 break;
salco 39:34d7802e8d15 1636 }
salco 39:34d7802e8d15 1637 if(areaVert >= areaLatt)
salco 37:f53e9f7a14df 1638 {
salco 39:34d7802e8d15 1639 switch(areaVert)
salco 37:f53e9f7a14df 1640 {
salco 39:34d7802e8d15 1641 case 0:
salco 39:34d7802e8d15 1642 /*
salco 39:34d7802e8d15 1643 /---\
salco 39:34d7802e8d15 1644 |?M?| //vert 0
salco 39:34d7802e8d15 1645 |.X.| //latt 0
salco 39:34d7802e8d15 1646 |...|
salco 37:f53e9f7a14df 1647 \---/
salco 39:34d7802e8d15 1648 */
salco 39:34d7802e8d15 1649 myMaze->setC(Labyrinthe::mur,fieldX[1],fieldY[1]);
salco 39:34d7802e8d15 1650 fieldSet = true;
salco 39:34d7802e8d15 1651 break;
salco 39:34d7802e8d15 1652 case 1:
salco 39:34d7802e8d15 1653 /*
salco 39:34d7802e8d15 1654 /-M-\
salco 39:34d7802e8d15 1655 |?V?| //vert 1
salco 37:f53e9f7a14df 1656 |.X.| //latt 0
salco 39:34d7802e8d15 1657 |...|
salco 37:f53e9f7a14df 1658 \---/
salco 37:f53e9f7a14df 1659 */
salco 37:f53e9f7a14df 1660 myMaze->setC(Labyrinthe::vide,fieldX[1],fieldY[1]);
salco 39:34d7802e8d15 1661 myMaze->setC(Labyrinthe::mur,fieldX[4],fieldY[4]);
salco 39:34d7802e8d15 1662 fieldSet = true;
salco 39:34d7802e8d15 1663
salco 39:34d7802e8d15 1664 if(areaLatt == 1)
salco 39:34d7802e8d15 1665 {
salco 39:34d7802e8d15 1666 /*
salco 39:34d7802e8d15 1667 /?M?\
salco 39:34d7802e8d15 1668 |VVV| //vert 1
salco 39:34d7802e8d15 1669 |.X.| //latt 1
salco 39:34d7802e8d15 1670 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1671 \---/
salco 39:34d7802e8d15 1672 */
salco 39:34d7802e8d15 1673 myMaze->setC(Labyrinthe::vide,fieldX[0],fieldY[0]);
salco 39:34d7802e8d15 1674 myMaze->setC(Labyrinthe::vide,fieldX[2],fieldY[2]);
salco 39:34d7802e8d15 1675 }
salco 39:34d7802e8d15 1676 break;
salco 39:34d7802e8d15 1677 case 2:
salco 39:34d7802e8d15 1678 fieldSet = true;
salco 39:34d7802e8d15 1679 switch(areaLatt)
salco 39:34d7802e8d15 1680 {
salco 39:34d7802e8d15 1681 case 0:
salco 39:34d7802e8d15 1682 /*
salco 39:34d7802e8d15 1683 /?V?\
salco 39:34d7802e8d15 1684 |?V?| //vert 2
salco 39:34d7802e8d15 1685 |.X.| //latt 0
salco 39:34d7802e8d15 1686 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1687 \---/
salco 39:34d7802e8d15 1688 */
salco 39:34d7802e8d15 1689 myMaze->setC(Labyrinthe::vide,fieldX[1],fieldY[1]);
salco 39:34d7802e8d15 1690 myMaze->setC(Labyrinthe::vide,fieldX[4],fieldY[4]);
salco 39:34d7802e8d15 1691 break;
salco 39:34d7802e8d15 1692 case 1:
salco 39:34d7802e8d15 1693 /*
salco 39:34d7802e8d15 1694 /?V?\
salco 39:34d7802e8d15 1695 |VVV| //vert 2
salco 39:34d7802e8d15 1696 |.X.| //latt 1
salco 39:34d7802e8d15 1697 |...| // objet possiblement a proximiter
salco 39:34d7802e8d15 1698 \---/
salco 39:34d7802e8d15 1699 */
salco 39:34d7802e8d15 1700 for(int i = 0; i<3; i++)myMaze->setC(Labyrinthe::vide,fieldX[i],fieldY[i]);
salco 39:34d7802e8d15 1701 myMaze->setC(Labyrinthe::vide,fieldX[4],fieldY[4]);
salco 39:34d7802e8d15 1702 break;
salco 39:34d7802e8d15 1703 case 2:
salco 39:34d7802e8d15 1704 /*
salco 39:34d7802e8d15 1705 /VVV\
salco 39:34d7802e8d15 1706 |VVV| //vert 2
salco 39:34d7802e8d15 1707 |.X.| //latt 2
salco 39:34d7802e8d15 1708 |...|
salco 39:34d7802e8d15 1709 \---/
salco 39:34d7802e8d15 1710 */
salco 39:34d7802e8d15 1711 for(int i = 0; i<6; i++)myMaze->setC( Labyrinthe::vide,fieldX[i],fieldY[i]);
salco 39:34d7802e8d15 1712 break;
salco 39:34d7802e8d15 1713 }
salco 39:34d7802e8d15 1714 break;
salco 39:34d7802e8d15 1715 }
salco 37:f53e9f7a14df 1716 }
salco 37:f53e9f7a14df 1717
salco 39:34d7802e8d15 1718 if(fieldSet == false)
salco 39:34d7802e8d15 1719 { // on a un cas impossible
salco 39:34d7802e8d15 1720 //myMaze->setC(Labyrinthe::error,fieldX[1],fieldY[1]);
salco 37:f53e9f7a14df 1721 }
salco 39:34d7802e8d15 1722
salco 39:34d7802e8d15 1723 ////////////////////////////////////
salco 38:57d5f36a0333 1724 }
salco 39:34d7802e8d15 1725 void Directive::checkOtherWay(char &caseFront, char &caseBack, char &caseLeft, char &caseRight)
salco 39:34d7802e8d15 1726 {
salco 39:34d7802e8d15 1727 caseFront = myMaze->getC_Foward();
salco 39:34d7802e8d15 1728 caseBack = myMaze->getC_Backward();
salco 39:34d7802e8d15 1729 caseRight = myMaze->getC_ToRight();
salco 39:34d7802e8d15 1730 caseLeft = myMaze->getC_ToLeft();
salco 39:34d7802e8d15 1731 }
salco 38:57d5f36a0333 1732 bool Directive::searchNewWay(void)
salco 38:57d5f36a0333 1733 {
salco 39:34d7802e8d15 1734 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r ---- Search new way ----\n\r");
salco 39:34d7802e8d15 1735 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 38:57d5f36a0333 1736 bool result=false;
salco 38:57d5f36a0333 1737 string backupMap = myMaze->getAllMap();
salco 38:57d5f36a0333 1738 signed char backupPosX = myMaze->getX();
salco 38:57d5f36a0333 1739 signed char backupPosY = myMaze->getY();
salco 38:57d5f36a0333 1740 string searchMap = backupMap;
salco 38:57d5f36a0333 1741 char tempdir,nextCase=0;
salco 38:57d5f36a0333 1742 positionXY tempPosition;
salco 39:34d7802e8d15 1743 char backupDir = myMaze->getDirection();
salco 39:34d7802e8d15 1744
salco 38:57d5f36a0333 1745
salco 38:57d5f36a0333 1746 bool noOtherWay = false;//si apres un moment tu est entourer de mur
salco 38:57d5f36a0333 1747 bool wrongWay = false; //si jamais vien un moment que tu est pris /doit rebrousser chemin
salco 39:34d7802e8d15 1748 //bool checkAutour = false;
salco 38:57d5f36a0333 1749
salco 38:57d5f36a0333 1750 bufferNewWay.clear();
salco 38:57d5f36a0333 1751 tempPosition.posX = myMaze->getX();
salco 38:57d5f36a0333 1752 tempPosition.posY = myMaze->getY();
salco 39:34d7802e8d15 1753 //bufferNewWay.push_back(tempPosition); // pas sur de lutiliter
salco 38:57d5f36a0333 1754
salco 39:34d7802e8d15 1755 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Debut Boucle");
salco 39:34d7802e8d15 1756 //asdfasda// Ici voire pour pt amiliorer et cheker a gauche et a droite au cas ou tu verai une case vide parce que la tu cours direct dans un mur avant de tourner.
salco 39:34d7802e8d15 1757 while((!result)&&(!noOtherWay))
salco 38:57d5f36a0333 1758 {
salco 39:34d7802e8d15 1759 // nextCase = 0;
salco 39:34d7802e8d15 1760 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Cycle Boucle\n\r");
salco 39:34d7802e8d15 1761 nextCase = myMaze->getC_Foward();
salco 39:34d7802e8d15 1762
salco 39:34d7802e8d15 1763 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",nextCase);
salco 39:34d7802e8d15 1764 switch(nextCase )
salco 39:34d7802e8d15 1765 {
salco 38:57d5f36a0333 1766
salco 39:34d7802e8d15 1767 case Labyrinthe::pasExplorer :
salco 39:34d7802e8d15 1768 case Labyrinthe::vide :
salco 39:34d7802e8d15 1769 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r vide ou pas explorer: ");
salco 39:34d7802e8d15 1770 myMaze->moveFoward();
salco 39:34d7802e8d15 1771 result = true;
salco 39:34d7802e8d15 1772 break;
salco 38:57d5f36a0333 1773
salco 39:34d7802e8d15 1774 case Labyrinthe::explorer :// ici pt amiliorer
salco 39:34d7802e8d15 1775 //add position a la liste
salco 39:34d7802e8d15 1776 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Explorer");
salco 39:34d7802e8d15 1777 myMaze->moveFoward();
salco 39:34d7802e8d15 1778 //myMaze->setMyPos(Labyrinthe::error);
salco 39:34d7802e8d15 1779 break;
salco 38:57d5f36a0333 1780
salco 39:34d7802e8d15 1781 case Labyrinthe::mur:
salco 39:34d7802e8d15 1782 tempdir = rand() % 2;
salco 39:34d7802e8d15 1783 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Mur: %i",tempdir);
salco 39:34d7802e8d15 1784 if(tempdir == 1)
salco 39:34d7802e8d15 1785 {
salco 39:34d7802e8d15 1786 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r left right");
salco 39:34d7802e8d15 1787 tempdir = myMaze->getC_ToLeft();
salco 39:34d7802e8d15 1788 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",tempdir);
salco 39:34d7802e8d15 1789 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 38:57d5f36a0333 1790 {
salco 39:34d7802e8d15 1791 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Left");
salco 39:34d7802e8d15 1792 myMaze->turnLeft();
salco 39:34d7802e8d15 1793
salco 39:34d7802e8d15 1794 //backupDir = myMaze->getDirection();
salco 39:34d7802e8d15 1795 }
salco 39:34d7802e8d15 1796 else
salco 38:57d5f36a0333 1797 {
salco 38:57d5f36a0333 1798 tempdir = myMaze->getC_ToRight();
salco 39:34d7802e8d15 1799 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",tempdir);
salco 39:34d7802e8d15 1800 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 39:34d7802e8d15 1801 {
salco 39:34d7802e8d15 1802 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Right");
salco 38:57d5f36a0333 1803 myMaze->turnRight();
salco 39:34d7802e8d15 1804
salco 39:34d7802e8d15 1805 //backupDir = myMaze->getDirection();
salco 39:34d7802e8d15 1806 }
salco 39:34d7802e8d15 1807 else
salco 39:34d7802e8d15 1808 {
salco 39:34d7802e8d15 1809 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r aucun coter");
salco 39:34d7802e8d15 1810 wrongWay = true; // verifie dans la liste
salco 39:34d7802e8d15 1811 }
salco 39:34d7802e8d15 1812 }
salco 39:34d7802e8d15 1813
salco 39:34d7802e8d15 1814 }
salco 39:34d7802e8d15 1815 else
salco 39:34d7802e8d15 1816 {
salco 39:34d7802e8d15 1817 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r right left");
salco 39:34d7802e8d15 1818 tempdir = myMaze->getC_ToRight();
salco 39:34d7802e8d15 1819 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",tempdir);
salco 39:34d7802e8d15 1820 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 39:34d7802e8d15 1821 {
salco 39:34d7802e8d15 1822 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Right");
salco 39:34d7802e8d15 1823 myMaze->turnRight();
salco 39:34d7802e8d15 1824
salco 39:34d7802e8d15 1825 //backupDir = myMaze->getDirection();
salco 39:34d7802e8d15 1826 }
salco 39:34d7802e8d15 1827 else
salco 39:34d7802e8d15 1828 {
salco 39:34d7802e8d15 1829 tempdir = myMaze->getC_ToLeft();
salco 39:34d7802e8d15 1830 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r nextCase: [%02x]",tempdir);
salco 39:34d7802e8d15 1831 if((Labyrinthe::case_t)tempdir != Labyrinthe::mur)
salco 39:34d7802e8d15 1832 {
salco 39:34d7802e8d15 1833 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Left");
salco 39:34d7802e8d15 1834 myMaze->turnLeft();
salco 39:34d7802e8d15 1835
salco 39:34d7802e8d15 1836 //backupDir = myMaze->getDirection();
salco 39:34d7802e8d15 1837 }
salco 39:34d7802e8d15 1838 else
salco 39:34d7802e8d15 1839 {
salco 39:34d7802e8d15 1840 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r aucun coter");
salco 39:34d7802e8d15 1841 wrongWay = true; // verifie dans la liste
salco 39:34d7802e8d15 1842 }
salco 38:57d5f36a0333 1843 }
salco 39:34d7802e8d15 1844 /* if(wrongWay == false)
salco 39:34d7802e8d15 1845 myMaze->moveFoward();*/
salco 39:34d7802e8d15 1846 }
salco 39:34d7802e8d15 1847
salco 39:34d7802e8d15 1848 //myMaze->setMyPos(Labyrinthe::error);
salco 39:34d7802e8d15 1849 break;
salco 39:34d7802e8d15 1850 }
salco 39:34d7802e8d15 1851
salco 39:34d7802e8d15 1852 tempPosition.posX = myMaze->getX();
salco 39:34d7802e8d15 1853 tempPosition.posY = myMaze->getY();
salco 39:34d7802e8d15 1854 tempPosition.direction = myMaze->getDirection();
salco 39:34d7802e8d15 1855
salco 39:34d7802e8d15 1856 /*debug("\n\rtempPosition.posX: %i",tempPosition.posX);
salco 39:34d7802e8d15 1857 debug("\n\rtempPosition.posY: %i",tempPosition.posY);
salco 39:34d7802e8d15 1858 debug("\n\rbufferNewWay.posX: %i",(bufferNewWay.back().posX));
salco 39:34d7802e8d15 1859 debug("\n\rbufferNewWay.posY: %i",(bufferNewWay.back().posY));*/
salco 39:34d7802e8d15 1860
salco 39:34d7802e8d15 1861 if((bufferNewWay.empty())||(((bufferNewWay.back().posX) != tempPosition.posX) || ((bufferNewWay.back().posY) != tempPosition.posY)))
salco 39:34d7802e8d15 1862 {
salco 39:34d7802e8d15 1863 bufferNewWay.push_back(tempPosition);
salco 39:34d7802e8d15 1864 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r bufferNewWay: %i",bufferNewWay.size());
salco 39:34d7802e8d15 1865 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",tempPosition.posX);
salco 39:34d7802e8d15 1866 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",tempPosition.posY);
salco 39:34d7802e8d15 1867 }
salco 39:34d7802e8d15 1868 else if((bufferNewWay.empty())&& ((backupPosX != myMaze->getX()) || (backupPosY != myMaze->getY())) )
salco 39:34d7802e8d15 1869 {
salco 39:34d7802e8d15 1870 bufferNewWay.push_back(tempPosition);
salco 39:34d7802e8d15 1871 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r bufferNewWay: %i",bufferNewWay.size());
salco 39:34d7802e8d15 1872 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",tempPosition.posX);
salco 39:34d7802e8d15 1873 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",tempPosition.posY);
salco 39:34d7802e8d15 1874 }
salco 39:34d7802e8d15 1875 else if(((bufferNewWay.back()).posX == tempPosition.posX) && ((bufferNewWay.back()).posY == tempPosition.posY) && ((bufferNewWay.back()).direction != tempPosition.direction))//ra fait un tours
salco 39:34d7802e8d15 1876 {
salco 39:34d7802e8d15 1877 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r pop back a cause dun tournie");
salco 39:34d7802e8d15 1878 bufferNewWay.pop_back();
salco 39:34d7802e8d15 1879 bufferNewWay.push_back(tempPosition);
salco 39:34d7802e8d15 1880 }
salco 39:34d7802e8d15 1881
salco 39:34d7802e8d15 1882 else
salco 39:34d7802e8d15 1883 {
salco 39:34d7802e8d15 1884 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r buffer non adder");
salco 39:34d7802e8d15 1885
salco 39:34d7802e8d15 1886 }
salco 39:34d7802e8d15 1887
salco 38:57d5f36a0333 1888
salco 39:34d7802e8d15 1889 if(wrongWay)
salco 39:34d7802e8d15 1890 {
salco 39:34d7802e8d15 1891 char caseFront,caseBack,caseLeft,caseRight;
salco 39:34d7802e8d15 1892 char wallCount;
salco 39:34d7802e8d15 1893 char directive;
salco 39:34d7802e8d15 1894 bool haveValuesChange = false;
salco 39:34d7802e8d15 1895 bool caseVideTrouver = false;
salco 39:34d7802e8d15 1896 bool caseExplorerTrouver = false;
salco 39:34d7802e8d15 1897 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\n\r wrong way patching");
salco 39:34d7802e8d15 1898 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r bufferNewWay size: %i",bufferNewWay.size());
salco 39:34d7802e8d15 1899 std::list<positionXY>::iterator it;
salco 39:34d7802e8d15 1900 do
salco 39:34d7802e8d15 1901 {
salco 39:34d7802e8d15 1902 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r --wrong way boucle");
salco 39:34d7802e8d15 1903
salco 39:34d7802e8d15 1904 //bufferNewWay.pop_back();
salco 39:34d7802e8d15 1905 if(!bufferNewWay.empty())
salco 39:34d7802e8d15 1906 {
salco 39:34d7802e8d15 1907 directive = 0;//defenir fait rien
salco 39:34d7802e8d15 1908 it=bufferNewWay.end();
salco 39:34d7802e8d15 1909 haveValuesChange = false;
salco 39:34d7802e8d15 1910 caseVideTrouver = false;
salco 39:34d7802e8d15 1911 caseExplorerTrouver = false;
salco 39:34d7802e8d15 1912 tempPosition.posX = (bufferNewWay.back()).posX;
salco 39:34d7802e8d15 1913 tempPosition.posY = bufferNewWay.back().posY;
salco 39:34d7802e8d15 1914
salco 39:34d7802e8d15 1915
salco 39:34d7802e8d15 1916 myMaze->setX(bufferNewWay.back().posX);
salco 39:34d7802e8d15 1917 myMaze->setY(bufferNewWay.back().posY);
salco 39:34d7802e8d15 1918 wallCount = 0;
salco 39:34d7802e8d15 1919 checkOtherWay(caseFront,caseBack,caseLeft,caseRight);
salco 39:34d7802e8d15 1920
salco 39:34d7802e8d15 1921 if((Labyrinthe::case_t)caseFront == Labyrinthe::mur)wallCount++;
salco 39:34d7802e8d15 1922 if((Labyrinthe::case_t)caseBack == Labyrinthe::mur)wallCount++;
salco 39:34d7802e8d15 1923 if((Labyrinthe::case_t)caseLeft == Labyrinthe::mur)wallCount++;
salco 39:34d7802e8d15 1924 if((Labyrinthe::case_t)caseRight == Labyrinthe::mur)wallCount++;
salco 39:34d7802e8d15 1925
salco 39:34d7802e8d15 1926 if(wallCount == 3)
salco 39:34d7802e8d15 1927 {
salco 39:34d7802e8d15 1928 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r PATH trouver ");
salco 39:34d7802e8d15 1929 myMaze->setC(Labyrinthe::mur,tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 1930 }
salco 39:34d7802e8d15 1931 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r checkOtherWay front: %i, back: %i, LEFT: %i, RIGHT: %i",caseFront,caseBack,caseLeft,caseRight);
salco 39:34d7802e8d15 1932 //tempPosition.posX = (bufferNewWay.back()).posX;
salco 39:34d7802e8d15 1933 //tempPosition.posY = bufferNewWay.back().posY;
salco 39:34d7802e8d15 1934 /*if(((Labyrinthe::case_t)caseFront == Labyrinthe::vide) || ((Labyrinthe::case_t)caseBack == Labyrinthe::vide) || ((Labyrinthe::case_t)caseLeft == Labyrinthe::vide) || ((Labyrinthe::case_t)caseRight == Labyrinthe::vide))
salco 39:34d7802e8d15 1935 {
salco 39:34d7802e8d15 1936 debug("\n\r Path vide trouver!!!");
salco 39:34d7802e8d15 1937 caseVideTrouver = true;
salco 39:34d7802e8d15 1938 wrongWay = false;
salco 39:34d7802e8d15 1939 }*/
salco 39:34d7802e8d15 1940
salco 39:34d7802e8d15 1941 //else
salco 39:34d7802e8d15 1942 //{
salco 39:34d7802e8d15 1943 it--;
salco 39:34d7802e8d15 1944 if(/*((Labyrinthe::case_t)caseFront != Labyrinthe::error) &&*/ ((Labyrinthe::case_t)caseFront != Labyrinthe::mur))
salco 39:34d7802e8d15 1945 { // une anciene case est potentiele,emt bonne
salco 39:34d7802e8d15 1946 myMaze->getXY_Foward(tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 1947
salco 39:34d7802e8d15 1948 if((Labyrinthe::case_t)caseFront == Labyrinthe::vide)
salco 39:34d7802e8d15 1949 {
salco 39:34d7802e8d15 1950 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Path vide trouver!!!");
salco 39:34d7802e8d15 1951 caseVideTrouver = true;
salco 39:34d7802e8d15 1952 haveValuesChange = true;
salco 39:34d7802e8d15 1953 directive = 1;
salco 39:34d7802e8d15 1954 wrongWay = false;
salco 39:34d7802e8d15 1955 //debug("\n\r moveFoward");
salco 39:34d7802e8d15 1956 }
salco 39:34d7802e8d15 1957 if((!caseVideTrouver) && (!caseExplorerTrouver))
salco 39:34d7802e8d15 1958 {
salco 39:34d7802e8d15 1959 caseExplorerTrouver = true;
salco 39:34d7802e8d15 1960 /*if(((*it).posX != tempPosition.posX) && ((*it).posY != tempPosition.posY)) {
salco 39:34d7802e8d15 1961 wrongWay = false;
salco 39:34d7802e8d15 1962 myMaze->moveFoward();//setDirection(UP);
salco 39:34d7802e8d15 1963 debug("\n\r moveFoward");
salco 39:34d7802e8d15 1964 debug("\n\r chemin trouver");
salco 39:34d7802e8d15 1965 haveValuesChange = true;
salco 39:34d7802e8d15 1966 } else if(bufferNewWay.size() == 1) {*/
salco 39:34d7802e8d15 1967 // debug("\n\r Last thing in buffer");
salco 39:34d7802e8d15 1968 //myMaze->moveFoward();//setDirection(UP);
salco 39:34d7802e8d15 1969 directive = 1;// move foward
salco 39:34d7802e8d15 1970 haveValuesChange = true;
salco 39:34d7802e8d15 1971 // debug("\n\r moveFoward");
salco 39:34d7802e8d15 1972 }
salco 39:34d7802e8d15 1973 }
salco 39:34d7802e8d15 1974
salco 39:34d7802e8d15 1975 if(/*((Labyrinthe::case_t)caseBack != Labyrinthe::error) &&*/ ((Labyrinthe::case_t)caseBack != Labyrinthe::mur))
salco 39:34d7802e8d15 1976 { // une anciene case est potentiele,emt bonne
salco 39:34d7802e8d15 1977 myMaze->getXY_Backward(tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 1978
salco 39:34d7802e8d15 1979 if((Labyrinthe::case_t)caseBack == Labyrinthe::vide)
salco 39:34d7802e8d15 1980 {
salco 39:34d7802e8d15 1981 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Path vide trouver!!!");
salco 39:34d7802e8d15 1982 caseVideTrouver = true;
salco 39:34d7802e8d15 1983 haveValuesChange = true;
salco 39:34d7802e8d15 1984 directive = 2;
salco 39:34d7802e8d15 1985 wrongWay = false;
salco 39:34d7802e8d15 1986 //debug("\n\r moveFoward");
salco 39:34d7802e8d15 1987 }
salco 39:34d7802e8d15 1988 if((!caseVideTrouver) && (!caseExplorerTrouver))
salco 39:34d7802e8d15 1989 {
salco 39:34d7802e8d15 1990 caseExplorerTrouver = true;
salco 39:34d7802e8d15 1991 /*if(((*it).posX != tempPosition.posX) && ((*it).posY != tempPosition.posY)) {
salco 39:34d7802e8d15 1992 wrongWay = false;
salco 39:34d7802e8d15 1993 myMaze->turnBack();//setDirection(DOWN);
salco 39:34d7802e8d15 1994 debug("\n\r turn Back");
salco 39:34d7802e8d15 1995 debug("\n\r chemin trouver");
salco 39:34d7802e8d15 1996 haveValuesChange = true;
salco 39:34d7802e8d15 1997 } else if(bufferNewWay.size() == 1) {*/
salco 39:34d7802e8d15 1998 //debug("\n\r Last thing in buffer");
salco 39:34d7802e8d15 1999 //myMaze->turnBack();//setDirection(DOWN);
salco 39:34d7802e8d15 2000 directive = 2;
salco 39:34d7802e8d15 2001 //debug("\n\r turn Back");
salco 39:34d7802e8d15 2002 haveValuesChange = true;
salco 39:34d7802e8d15 2003 }
salco 39:34d7802e8d15 2004 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r direction: %i",myMaze->getDirection());
salco 39:34d7802e8d15 2005 }
salco 39:34d7802e8d15 2006
salco 39:34d7802e8d15 2007 if(/*((Labyrinthe::case_t)caseLeft != Labyrinthe::error) &&*/ ((Labyrinthe::case_t)caseLeft != Labyrinthe::mur))
salco 39:34d7802e8d15 2008 { // une anciene case est potentiele,emt bonne
salco 39:34d7802e8d15 2009 myMaze->getXY_Left(tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 2010
salco 39:34d7802e8d15 2011 if((Labyrinthe::case_t)caseLeft == Labyrinthe::vide)
salco 39:34d7802e8d15 2012 {
salco 39:34d7802e8d15 2013 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Path vide trouver!!!");
salco 39:34d7802e8d15 2014 caseVideTrouver = true;
salco 39:34d7802e8d15 2015 haveValuesChange = true;
salco 39:34d7802e8d15 2016 directive = 3;
salco 39:34d7802e8d15 2017 wrongWay = false;
salco 39:34d7802e8d15 2018 //debug("\n\r moveFoward");
salco 39:34d7802e8d15 2019 }
salco 39:34d7802e8d15 2020 if((!!caseVideTrouver) && (!caseExplorerTrouver))
salco 39:34d7802e8d15 2021 {
salco 39:34d7802e8d15 2022 caseExplorerTrouver = true;
salco 39:34d7802e8d15 2023 /*if(((*it).posX != tempPosition.posX) && ((*it).posY != tempPosition.posY)) {
salco 39:34d7802e8d15 2024 wrongWay = false;
salco 39:34d7802e8d15 2025 myMaze->turnLeft();//setDirection(LEFT);
salco 39:34d7802e8d15 2026 debug("\n\r turn Left");
salco 39:34d7802e8d15 2027 debug("\n\r chemin trouver");
salco 39:34d7802e8d15 2028 haveValuesChange = true;
salco 39:34d7802e8d15 2029 } else if(bufferNewWay.size() == 1) {*/
salco 39:34d7802e8d15 2030 //debug("\n\r Last thing in buffer");
salco 39:34d7802e8d15 2031 //myMaze->turnLeft();//setDirection(LEFT);
salco 39:34d7802e8d15 2032 directive = 3;
salco 39:34d7802e8d15 2033 //debug("\n\r turn Left");
salco 39:34d7802e8d15 2034 haveValuesChange = true;
salco 39:34d7802e8d15 2035 }
salco 39:34d7802e8d15 2036 }
salco 39:34d7802e8d15 2037
salco 39:34d7802e8d15 2038 if(/*((Labyrinthe::case_t)caseRight != Labyrinthe::error) &&*/ ((Labyrinthe::case_t)caseRight != Labyrinthe::mur))
salco 39:34d7802e8d15 2039 { // une anciene case est potentiele,emt bonne
salco 39:34d7802e8d15 2040 myMaze->getXY_Right(tempPosition.posX,tempPosition.posY);
salco 39:34d7802e8d15 2041
salco 39:34d7802e8d15 2042 if((Labyrinthe::case_t)caseRight == Labyrinthe::vide)
salco 39:34d7802e8d15 2043 {
salco 39:34d7802e8d15 2044 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Path vide trouver!!!");
salco 39:34d7802e8d15 2045 caseVideTrouver = true;
salco 39:34d7802e8d15 2046 haveValuesChange = true;
salco 39:34d7802e8d15 2047 directive = 4;
salco 39:34d7802e8d15 2048 wrongWay = false;
salco 39:34d7802e8d15 2049 //debug("\n\r moveFoward");
salco 39:34d7802e8d15 2050 }
salco 39:34d7802e8d15 2051 if((!caseVideTrouver)&& (!caseExplorerTrouver))
salco 39:34d7802e8d15 2052 {
salco 39:34d7802e8d15 2053 caseExplorerTrouver = true;
salco 39:34d7802e8d15 2054 /*if(((bufferNewWay.back()).posX != tempPosition.posX) && ((bufferNewWay.back()).posY != tempPosition.posY)) {
salco 39:34d7802e8d15 2055 wrongWay = false;
salco 39:34d7802e8d15 2056 myMaze->turnRight();//setDirection(RIGHT);
salco 39:34d7802e8d15 2057 debug("\n\r turn Right");
salco 39:34d7802e8d15 2058 debug("\n\r chemin trouver");
salco 39:34d7802e8d15 2059 haveValuesChange = true;
salco 39:34d7802e8d15 2060 } else if(bufferNewWay.size() == 1) {*/
salco 39:34d7802e8d15 2061 //debug("\n\r Last thing in buffer");
salco 39:34d7802e8d15 2062 //myMaze->turnRight();//setDirection(RIGHT);
salco 39:34d7802e8d15 2063 directive = 4;
salco 39:34d7802e8d15 2064 // debug("\n\r turn Right");
salco 39:34d7802e8d15 2065 haveValuesChange = true;
salco 39:34d7802e8d15 2066 }
salco 39:34d7802e8d15 2067 }
salco 39:34d7802e8d15 2068
salco 39:34d7802e8d15 2069 //}
salco 39:34d7802e8d15 2070
salco 39:34d7802e8d15 2071
salco 39:34d7802e8d15 2072 }
salco 39:34d7802e8d15 2073 else
salco 39:34d7802e8d15 2074 noOtherWay = true;
salco 39:34d7802e8d15 2075
salco 39:34d7802e8d15 2076
salco 39:34d7802e8d15 2077 if(haveValuesChange)
salco 39:34d7802e8d15 2078 {
salco 39:34d7802e8d15 2079 switch(directive)
salco 39:34d7802e8d15 2080 {
salco 39:34d7802e8d15 2081 case 0:
salco 39:34d7802e8d15 2082 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r doNothing");
salco 39:34d7802e8d15 2083 break;
salco 39:34d7802e8d15 2084 case 1:
salco 39:34d7802e8d15 2085 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r moveFoward");
salco 39:34d7802e8d15 2086 myMaze->moveFoward();
salco 39:34d7802e8d15 2087 break;
salco 39:34d7802e8d15 2088 case 2:
salco 39:34d7802e8d15 2089 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Back");
salco 39:34d7802e8d15 2090 myMaze->turnBack();
salco 39:34d7802e8d15 2091 break;
salco 39:34d7802e8d15 2092 case 3:
salco 39:34d7802e8d15 2093 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Left");
salco 39:34d7802e8d15 2094 myMaze->turnLeft();
salco 39:34d7802e8d15 2095 break;
salco 39:34d7802e8d15 2096 case 4:
salco 39:34d7802e8d15 2097 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r turn Right");
salco 39:34d7802e8d15 2098 myMaze->turnRight();
salco 39:34d7802e8d15 2099 break;
salco 39:34d7802e8d15 2100 }
salco 39:34d7802e8d15 2101 tempPosition.posX = myMaze->getX();
salco 39:34d7802e8d15 2102 tempPosition.posY = myMaze->getY();
salco 39:34d7802e8d15 2103 tempPosition.direction = myMaze->getDirection();
salco 39:34d7802e8d15 2104 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r bufferNewWay: %i",bufferNewWay.size());
salco 39:34d7802e8d15 2105 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",tempPosition.posX);
salco 39:34d7802e8d15 2106 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",tempPosition.posY);
salco 39:34d7802e8d15 2107 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.direction: %i",tempPosition.direction);
salco 39:34d7802e8d15 2108 for (std::list<positionXY>::iterator it=bufferNewWay.begin(),itEnd;( it != bufferNewWay.end()) && (!bufferNewWay.empty()); ++it)
salco 39:34d7802e8d15 2109 {
salco 39:34d7802e8d15 2110 //tempPosition = *(it);
salco 39:34d7802e8d15 2111 itEnd = bufferNewWay.end();
salco 39:34d7802e8d15 2112 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Bouble de meme position");
salco 39:34d7802e8d15 2113 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",(*it).posX);
salco 39:34d7802e8d15 2114 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",(*it).posY);
salco 39:34d7802e8d15 2115 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.direction: %i",(*it).direction);
salco 39:34d7802e8d15 2116 if(((*it).posX == tempPosition.posX) && ((*it).posY == tempPosition.posY) && ((*it).direction == tempPosition.direction))
salco 39:34d7802e8d15 2117 {
salco 39:34d7802e8d15 2118 while(((*it).posX != (*itEnd).posX) &&
salco 39:34d7802e8d15 2119 ((*it).posY != (*itEnd).posY) &&
salco 39:34d7802e8d15 2120 ((*it).direction != (*itEnd).direction) && (!bufferNewWay.empty()))
salco 39:34d7802e8d15 2121 {
salco 39:34d7802e8d15 2122 itEnd = bufferNewWay.end();
salco 39:34d7802e8d15 2123 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r pop back et enmurer");
salco 39:34d7802e8d15 2124 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r tempPosition.posX: %i",(bufferNewWay.back()).posX);
salco 39:34d7802e8d15 2125 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r tempPosition.posY: %i",(bufferNewWay.back()).posY);
salco 39:34d7802e8d15 2126 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r tempPosition.direction: %i",(bufferNewWay.back()).direction);
salco 39:34d7802e8d15 2127 myMaze->setC(Labyrinthe::mur,(bufferNewWay.back()).posX,(bufferNewWay.back()).posY);
salco 39:34d7802e8d15 2128 bufferNewWay.pop_back();
salco 39:34d7802e8d15 2129 }
salco 39:34d7802e8d15 2130 //it--;
salco 39:34d7802e8d15 2131 noOtherWay = true;//placer ici pour patcher vue que je suis taner
salco 39:34d7802e8d15 2132 //checkAutour = true;
salco 39:34d7802e8d15 2133 }
salco 39:34d7802e8d15 2134 }
salco 39:34d7802e8d15 2135 if(((bufferNewWay.back()).posX == tempPosition.posX) && ((bufferNewWay.back()).posY == tempPosition.posY) && ((bufferNewWay.back()).direction != tempPosition.direction))//ra fait un tours
salco 39:34d7802e8d15 2136 {
salco 39:34d7802e8d15 2137 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r pop back a cause dun tournie");
salco 39:34d7802e8d15 2138 bufferNewWay.pop_back();
salco 39:34d7802e8d15 2139 }
salco 39:34d7802e8d15 2140 bufferNewWay.push_back(tempPosition);
salco 39:34d7802e8d15 2141 //bufferNewWay.pop_back();//on enleve pour pouvoir lire le dernier
salco 39:34d7802e8d15 2142 }
salco 39:34d7802e8d15 2143 else
salco 39:34d7802e8d15 2144 {
salco 39:34d7802e8d15 2145 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r pop back");
salco 39:34d7802e8d15 2146 bufferNewWay.pop_back();//on enleve pour pouvoir lire le dernier
salco 39:34d7802e8d15 2147 }
salco 40:ecef15b1dfad 2148 #ifdef DEBUG_DIRECTIVE_LABYRINTH
salco 39:34d7802e8d15 2149 string mymap = myMaze->showMap();
salco 40:ecef15b1dfad 2150 debug("\n\r Labyrinthe map: X:%02i Y:%02i \n\r",(signed char)(myMaze->getX()),(signed char)(myMaze->getY()));
salco 39:34d7802e8d15 2151 //char caseCaract = 0;
salco 39:34d7802e8d15 2152 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r direction: %i",myMaze->getDirection());
salco 40:ecef15b1dfad 2153 debug("\n\r");
salco 40:ecef15b1dfad 2154 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+6]));
salco 40:ecef15b1dfad 2155 debug("\n\r");
salco 40:ecef15b1dfad 2156 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i+3]));
salco 40:ecef15b1dfad 2157 debug("\n\r");
salco 40:ecef15b1dfad 2158 for(int i=0; i<3; i++) debug(" [%c] ",myMaze->caseToChar((Labyrinthe::case_t)mymap[i]));
salco 40:ecef15b1dfad 2159 #endif
salco 40:ecef15b1dfad 2160
salco 40:ecef15b1dfad 2161 #ifdef DEBUG_DIRECTIVE_TASK_PAUSE
salco 39:34d7802e8d15 2162 debug(DEBUG_DIRECTIVE_LABYRINTH,"\n\r press any key...\n\r");
salco 39:34d7802e8d15 2163
salco 39:34d7802e8d15 2164 fgetc(pc);
salco 40:ecef15b1dfad 2165 #endif
salco 39:34d7802e8d15 2166
salco 39:34d7802e8d15 2167 } while((wrongWay) && (!noOtherWay));
salco 39:34d7802e8d15 2168 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r Fin Boucle");
salco 38:57d5f36a0333 2169 }
salco 40:ecef15b1dfad 2170 #ifdef DEBUG_DIRECTIVE_TASK_PAUSE
salco 40:ecef15b1dfad 2171 debug("\n\r press any key...\n\r"); fgetc(pc);
salco 40:ecef15b1dfad 2172 #endif
salco 38:57d5f36a0333 2173 }
salco 38:57d5f36a0333 2174
salco 39:34d7802e8d15 2175 myMaze->setX(backupPosX);
salco 39:34d7802e8d15 2176 myMaze->setY(backupPosY);
salco 39:34d7802e8d15 2177 myMaze->setAllMap(backupMap);
salco 39:34d7802e8d15 2178 myMaze->setDirection(backupDir);
salco 39:34d7802e8d15 2179 if(noOtherWay)
salco 39:34d7802e8d15 2180 {
salco 39:34d7802e8d15 2181 result = false;
salco 39:34d7802e8d15 2182 myMaze->setAllMap("");
salco 39:34d7802e8d15 2183 myMaze->setX(0);
salco 39:34d7802e8d15 2184 myMaze->setY(0);
salco 39:34d7802e8d15 2185 myMaze->setDirection(backupDir);
salco 39:34d7802e8d15 2186 }
salco 39:34d7802e8d15 2187
salco 39:34d7802e8d15 2188 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\n\r dans le buffer");
salco 39:34d7802e8d15 2189 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r bufferNewWay: %i",bufferNewWay.size());
salco 39:34d7802e8d15 2190 for (std::list<positionXY>::iterator it=bufferNewWay.begin(); it != bufferNewWay.end(); ++it) {
salco 39:34d7802e8d15 2191 //tempPosition = *(it);
salco 39:34d7802e8d15 2192 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posX: %i",(*it).posX);
salco 39:34d7802e8d15 2193 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.posY: %i",(*it).posY);
salco 39:34d7802e8d15 2194 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\rtempPosition.direction: %i",(*it).direction);
salco 39:34d7802e8d15 2195 }
salco 39:34d7802e8d15 2196 debug(DEBUG_DIRECTIVE_MAZE_GRAPHICAL_INTERFACE_ENABLE,"\n\r ----------------");
salco 39:34d7802e8d15 2197 return result;
salco 38:57d5f36a0333 2198 }
salco 38:57d5f36a0333 2199
salco 38:57d5f36a0333 2200 bool Directive::isAnotherWay(void)
salco 38:57d5f36a0333 2201 {
salco 38:57d5f36a0333 2202 bool result=false;
salco 38:57d5f36a0333 2203
salco 38:57d5f36a0333 2204 return result;
salco 39:34d7802e8d15 2205 }
salco 39:34d7802e8d15 2206 void Directive::turnRightDirection(char currentDir, char nextDir)
salco 39:34d7802e8d15 2207 {
salco 39:34d7802e8d15 2208
salco 39:34d7802e8d15 2209
salco 39:34d7802e8d15 2210 #ifndef DEBUG_DIRECTIVE_LEG_DISABLE
salco 39:34d7802e8d15 2211 if(((nextDir + currentDir) == (UP + DOWN)) ||
salco 39:34d7802e8d15 2212 ((nextDir + currentDir) == (LEFT + RIGHT)))
salco 39:34d7802e8d15 2213 {
salco 39:34d7802e8d15 2214 if(rand()%2)
salco 39:34d7802e8d15 2215 {
salco 40:ecef15b1dfad 2216 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 40:ecef15b1dfad 2217 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 40:ecef15b1dfad 2218 //addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 2219 }
salco 39:34d7802e8d15 2220 else
salco 39:34d7802e8d15 2221 {
salco 40:ecef15b1dfad 2222 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 40:ecef15b1dfad 2223 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 40:ecef15b1dfad 2224 //addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 2225 }
salco 39:34d7802e8d15 2226 }
salco 39:34d7802e8d15 2227 else
salco 39:34d7802e8d15 2228 {
salco 39:34d7802e8d15 2229 switch(currentDir)
salco 39:34d7802e8d15 2230 {
salco 39:34d7802e8d15 2231 case UP:
salco 39:34d7802e8d15 2232 if(nextDir == LEFT)
salco 39:34d7802e8d15 2233 {
salco 40:ecef15b1dfad 2234 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 2235 }
salco 39:34d7802e8d15 2236 else if(nextDir == RIGHT)
salco 39:34d7802e8d15 2237 {
salco 40:ecef15b1dfad 2238 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 2239 }
salco 39:34d7802e8d15 2240 break;
salco 39:34d7802e8d15 2241 case DOWN:
salco 39:34d7802e8d15 2242 if(nextDir == LEFT)
salco 39:34d7802e8d15 2243 {
salco 40:ecef15b1dfad 2244 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 2245 }
salco 39:34d7802e8d15 2246 else if(nextDir == LEFT)
salco 39:34d7802e8d15 2247 {
salco 40:ecef15b1dfad 2248 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 2249 }
salco 39:34d7802e8d15 2250 break;
salco 39:34d7802e8d15 2251 case LEFT:
salco 39:34d7802e8d15 2252 if(nextDir == UP)
salco 39:34d7802e8d15 2253 {
salco 40:ecef15b1dfad 2254 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 2255 }
salco 39:34d7802e8d15 2256 else if(nextDir == DOWN)
salco 39:34d7802e8d15 2257 {
salco 40:ecef15b1dfad 2258 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 2259 }
salco 39:34d7802e8d15 2260 break;
salco 39:34d7802e8d15 2261 case RIGHT:
salco 39:34d7802e8d15 2262 if(nextDir == UP)
salco 39:34d7802e8d15 2263 {
salco 40:ecef15b1dfad 2264 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_LEFT);
salco 39:34d7802e8d15 2265 }
salco 39:34d7802e8d15 2266 else if(nextDir == DOWN)
salco 39:34d7802e8d15 2267 {
salco 40:ecef15b1dfad 2268 for(int loop=0; loop < DIRECTIVE_NUMBER_TURN_90_DEG; loop++) addTableauDeCommande(TBL_CMD_TURN_RIGHT);
salco 39:34d7802e8d15 2269 }
salco 39:34d7802e8d15 2270 break;
salco 39:34d7802e8d15 2271 }
salco 39:34d7802e8d15 2272 }
salco 39:34d7802e8d15 2273 #endif
salco 2:4c5b0f6d0a6b 2274 }