1: /*ROBOT 14/04/04 */ 2: #include 3: #include"biosdem.h" 4: 5: #define MAX 0xF100 6: #define MotG CCPR2L 7: #define MotD CCPR1L 8: #define fincourse RB0 9: __CONFIG(0x3D39); 10: 11: void Detection_Piste(void); 12: char masque=0, SEUIL=100; 13: char CaptDroit=0,CaptCentre=0, CaptGauche=0, CaptExtrmDroit=0, CaptExtrmGauche=0/*, racourcis=0, priorite=0*/; 14: unsigned char i,n; 15: void main(void) 16: { 17: CCP2CON=0x0C; 18: MotG=000; /*moteur gauche à l'arrêt*/ 19: CCP1CON=0x0C; 20: MotD=000; /*moteur droit à l'arrêt*/ 21: TRISD=0xF1; /*RD4 à RD7 et RD0 en entrée*/ 22: TRISC=0x00; /*port C en sortie*/ 23: TMR2ON=1; /*mise en route du timer 2*/ 24: TRISB=0xFD; /*RB2 en sortie*/ 25: PORTD=8; /*choix du sens de rotation des moteurs*/ 26: PR2=99; 27: adc_on(); 28: TRISB0=1; /*RB0 en entrée*/ 29: TRISB1=0; /*RB1 en sortie*/ 30: TRISB2=0; /*RB2 en sortie*/ 31: TRISB4=0; /*RB4 en sortie*/ 32: TRISB5=0; /*RB5 en sortie*/ 33: while(RD0==0); 34: for(;;) 35: { 36: if(fincourse == 0 ) /***********************************/ 37: { /*contrôle du capteur fin de course*/ 38: MotG=0; /*qui va arrêter les moteur lorsque*/ 39: MotD=0; /*le robot tapera la barre */ 40: for( ; ; ); /* */ 41: } /***********************************/ 42: n=0; 43: /*switch sur la position 1*/ 44: 45: Detection_Piste(); /*appel du sous programme detection piste*/ 46: switch ( n ) 47: { 48: case 0: /*********************************/ 49: case 5: /* */ 50: case 7: /* */ 51: case 9: /* */ 52: case 10: /* */ 53: case 11: /* */ 54: case 12: /*possibilité que les capteurs ne*/ 55: case 13: /*peuvent pas appliquées */ 56: case 14: /* */ 57: case 15: /*********************************/ 58: case 17: 59: case 18: 60: case 19: 61: case 20: 62: case 21: 63: case 22: 64: case 23: 65: case 24: 66: case 25: 67: case 26: 68: case 27: 69: case 28: 70: case 29: 71: case 30: 72: if (MotG==0 && MotD == 0) /*si etat precedent est arret*/ 73: { 74: MotD=100; /*il va a toco*/ 75: MotG=100; 76: } 77: break; 78: case 1: 79: MotD=42; /*capteur droit*/ 80: MotG=100; 81: break; 82: case 2: 83: MotD=100; /*capteur milieu*/ 84: MotG=100; 85: break; 86: case 3: 87: MotD=63; /*capteurs milieu et droit*/ 88: MotG=100; 89: break; 90: case 4: 91: MotD=100; /*capteur gauche*/ 92: MotG=42; 93: break; 94: case 6: 95: MotD=100; /*capteurs milieu et gauche*/ 96: MotG=63; 97: break; 98: case 8: /*capteur extreme droite*/ 99: if ( MotG==100 && MotD == 42 ) 100: { 101: MotD=30; 102: MotG=100; 103: } 104: break; 105: /* case 13: 106: priorite=1; 107: a travailler pour sonar,activer un timer pour qu'il fasse une distance de 1.30m avec le sonar activé 108: break;*/ 109: case 16: /*capteur extreme gauche*/ 110: if ( MotG==42 && MotD == 100 ) 111: { 112: MotD=100; 113: MotG=30; 114: } 115: break; 116: /* case 22: 117: if ( racourcis==0 ) 118: racourcis=1; activer un timer 119: else 120: { 121: MotD=100; 122: MotG=30; 123: } 124: a travailler pour ptet racourcis 125: break;*/ 126: case 31: 127: // racourcis=0; 128: // priorite=0; 129: break; 130: /* if ( timer==(50cm parcouru) && racourcis==1 ) 131: { 132: racourcis=0; 133: arret du timer 134: }*/ 135: /* if ( timer==(1m30 parcouru) && priorite==1 ) 136: { 137: priorite=0; 138: arret du timer 139: }*/ 140: 141: } 142: 143: if ( RD6==1 ) 144: { 145: CCPR1L=100; /* test pour voir si le robot va droit avec les*/ 146: CCPR2L=100; /*deux moteurs à fond */ 147: } 148: 149: } 150: } 151: 152: 153: 154: void Detection_Piste(void) 155: { 156: 157: CaptDroit=adc_read_8b(1); //capteur Droit 158: CaptCentre=adc_read_8b(3); //capteur Centre 159: CaptGauche=adc_read_8b(2); //capteur Gauche 160: CaptExtrmDroit=adc_read_8b(0); //capteur extreme Droit 161: CaptExtrmGauche=adc_read_8b(4); //capteur extreme Gauche 162: 163: TRISA=0xFF; 164: masque = 0; 165: if(CaptDroit