1: 2: 3: #include 4: #include "biosdem.h" 5: /*mot de configuration pour 6: rendre le programme autonome*/ 7: __CONFIG (0x3d39); 8: 9: #define MotD CCPR1L 10: #define MotG CCPR2L 11: 12: #define Vmax 70 //100 13: #define VTmoy 45 //80 14: #define Vmoy 30 //80 15: #define Vmin 20 //45 16: #define Vnul 10 17: #define VSnul 0 18: 19: void serial_init (void); 20: int i=0; 21: char x ; 22: 23: /*commande est le mot qui va etre recu du PIC de la carte des capteurs, 24: ce mot de 8bits va permettre de donner les informations sur les capteurs, 25: c'est-à-dire de savoir quel capteur(s) capte la piste. Ce mot sera traité 26: par la suite pour donner l'ordre aux moteurs de ralentir ou d'accélerer*/ 27: char commande=0x00; 28: 29: void main (void) 30: { 31: DelayMs(10); 32: serial_init(); //initialisation de la liaison série 33: ADCON1=0x06; 34: PR2=99; /*réglage de la période du signal de commande moteur 35: à 240us*/ 36: TRISC1=0; 37: TRISC2=0; 38: CCP2CON=0x0C; 39: CCP1CON=0x0C; 40: TRISE2=0; 41: TRISD1=0; 42: TRISD2=0; 43: TRISD3=0; 44: TRISE0=0; 45: TRISB0=1; 46: TRISD0=1; 47: TRISA2=0; 48: TRISE1=0; 49: TMR2ON=1; 50: TRISB4=0; 51: RD1=0; 52: RD2=0; 53: RD3=1; 54: RB4=1; 55: /*configuration des interruptions*/ 56: PEIE=0; 57: RCIE=0; 58: GIE=0; 59: 60: while(RD0==0) 61: 62: { 63: 64: MotG=VSnul; 65: MotD=VSnul; 66: 67: 68: } 69: 70: MotG=VTmoy; 71: MotD=VTmoy; 72: // DelayMs(10); 73: 74: for(;;) 75: { 76: 77: /*RE2=1; 78: RA2=1;*/ 79: if(OERR) //erreur 80: { 81: 82: CREN=0; 83: RE0=1; 84: CREN=1; 85: } 86: else 87: { 88: RE0=0; 89: } 90: /* RE1=0; 91: RE0=0; 92: RA5=0; 93: RA4=0;*/ 94: 95: /* la partie qui suit traite la réception du 96: mot commande venant du PIC situé sur la 97: carte des capteurs.*/ 98: if (RCIF==1) 99: { i++; 100: if (1) 101: {i=0; 102: if ( !FERR ) //erreur 103: { 104: RE1=!RE1; 105: commande=RCREG; 106: } 107: 108: 109: else 110: { x = RCSTA ; 111: x=RCREG; 112: commande=RCREG; 113: } 114: } 115: else {x = RCSTA ; 116: x=RCREG; 117: } 118: } 119: 120: 121: RE0=0; 122: if(RB0==1) 123: { 124: for(;;) 125: { 126: RE0=1; 127: MotG=VSnul; 128: MotD=VSnul; 129: } 130: } 131: 132: 133: 134: /*ce switch/case va permettre de traiter le mot commande 135: qui a été recu précédemment,en fonction du mot recu, 136: la vitesse des moteurs*/ 137: switch (commande) 138: { 139: case 0x88: //piste au milieu 140: MotG=Vmax; RE2=0;RA2=0; //137 141: MotD=Vmax; //150 142: break; 143: 144: /*suit la partie au cas ou le robot part vers la 145: gauche et donc les moteurs doivent 146: etre corrigés de telle façon à ce que le robot 147: repart plus ou moins vers la droite*/ 148: 149: case 0x10: //robot part léger gauche 150: MotD=VTmoy; RE2=0;RA2=0; //120 151: MotG=Vmax; //150 152: break; 153: case 0x20: //robot part moyen gauche 154: MotD=Vmin; RE2=0;RA2=0; //80 155: MotG=Vmax; //150 156: break; 157: case 0x40: //robot part extreme gauche 158: MotD=VSnul; RE2=0;RA2=1; //0 159: MotG=VTmoy; //150 160: break; 161: 162: 163: /*suit la partie au cas ou le robot part vers 164: la droite et donc les moteurs doivent 165: etre corrigés de telle façon à ce que le robot 166: repart plus ou moins vers la gauche*/ 167: 168: case 0x04: //robot part leger droite 169: MotG=VTmoy; RE2=0;RA2=0; //120 170: MotD=Vmax; //150 171: break; 172: case 0x02: //robot part moyen droite 173: MotG=Vmin; RE2=0;RA2=0; //80 174: MotD=Vmax; //150 175: break; 176: case 0x01: //robot part extrême droite 177: MotG=VSnul; RE2=1;RA2=0; //0 178: MotD=VTmoy; //150 179: break; 180: 181: //Modifs PIGNOL 182: case 0x18: //robot part léger centre gauche 183: MotD=VTmoy; RE2=0;RA2=0; //120 184: MotG=Vmax; //150 185: break; 186: 187: case 0x30: //robot part leger moyen gauche 188: MotD=Vnul; RE2=0;RA2=0; //80 189: MotG=Vmax; //150 190: break; 191: 192: case 0x60: //robot part moyen extreme gauche 193: MotD=VSnul; RE2=0;RA2=1; //0 194: MotG=Vmax; //150 195: break; 196: 197: case 0x0c: //robot part leger droite centre 198: MotG=VTmoy; RE2=0;RA2=0; //120 199: MotD=Vmax; //150 200: break; 201: 202: case 0x06: //robot part leger moyen droite 203: MotG=Vnul; RE2=0;RA2=0; //80 204: MotD=Vmax; //150 205: break; 206: case 0x03: //robot part moyen extrême droite 207: MotG=VSnul; RE2=1;RA2=0; //0 208: MotD=Vmax; //150 209: break; 210: 211: case 0x1c: //3 capteurs du centre 212: MotG=VTmoy; RE2=1;RA2=0; //0 213: MotD=VTmoy; //150 214: break; 215: 216: 217: } 218: 219: } 220: } 221: 222: 223: /*cette fonction permet d'initialiser 224: la liaison série entre les deux PIC*/ 225: void serial_init (void) 226: { 227: BRGH=1; 228: SPBRG=25; 229: SYNC=0; 230: SPEN=1; 231: TXEN=1; 232: CREN=1; 233: } 234: