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:
Thu Oct 15 00:49:37 2015 +0000
Revision:
39:34d7802e8d15
Parent:
38:57d5f36a0333
Child:
40:ecef15b1dfad
pas fonctionel juste backup

Who changed what in which revision?

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