Revision 398 branch/daval/Emb_App/programme_principal_etud.c

View differences:

programme_principal_etud.c
131 131
//Asservissement de la voiture
132 132
int distance_mur=700;		// Consigne qui permet d etre bien centr? sur la route
133 133
char C=1;					// Gain asservissment des roues
134
char vitesse_rapide= 40;//Commande de vitesse que l'on envoie
135
char vitesse_lente=20;
134
char vitesse_rapide= 0;//Commande de vitesse que l'on envoie
135
char vitesse_lente=0;
136 136
int distance_mesure=0;
137 137
int cap;
138 138

  
139
//Varaible pour les capteurs
139
//Variables pour les capteurs
140 140

  
141 141
int capteur;
142 142
char couleur;
143 143
char numero;
144

  
145
//Variables pour les pistes
146
char num_piste;
147
unsigned short nbr_tour=0;
144 148
// Gestion piste et feu
145 149

  
146 150
int mode_course;
151
int feu_vert;
147 152

  
153
void mode2course(){
154
	CanFrame requete;
155
	UINT flag;
156
	while(1)
157
	{
158
		requete.data.id = 'M';			
159
        requete.data.rtr = 1;        
160
        periph[ADDR('M')].ev = 0x04;					
161
        snd_dtq(CanTx, requete.msg);
162
        wai_flg(ev_periph, 0x04, TWF_ANDW, &flag);
163
        mode_course = periph[ADDR('M')].val;
164
		feu_vert = mode_course && 0x8000;
165
		num_piste = mode_course;
166
        dly_tsk(10);
167
        }
168
}
169

  
148 170
void asservissement_tourelle()
149 171
{
150 172
	CanFrame commande;
......
180 202
{
181 203
	
182 204
	dly_tsk(2000);
205
	if(feu_vert)
206
	{
207
		
183 208
	
184
	
185
	vitesse.data.id='V';				//Envoi d'une commande en vitesse
186
	vitesse.data.rtr=0; 				//Indique une ecritur
187
	while(1)
188
	{
189
		if(cap<-30 || cap>30) 					//Gestion vitesse dans les virages
209
		vitesse.data.id='V';				//Envoi d'une commande en vitesse
210
		vitesse.data.rtr=0; 				//Indique une ecritur
211
		while(1)
190 212
		{
191
			vitesse.data.val=vitesse_lente;
192
			snd_dtq (CanTx,vitesse.msg);
213
			switch(num_piste)
214
			{
215
				case 1:	 vitesse_rapide= 70;
216
						 vitesse_lente=40; 
217
			    break;
218
						
219
				case 2:  vitesse_rapide= 40;
220
						 vitesse_lente=25;
221
				break;
222
						 
223
				case 3:  vitesse_rapide= 40;		
224
						 vitesse_lente=25;
225
				break;
226
				case 4:  vitesse_rapide= 25;
227
						 vitesse_lente=10;
228
				break;
229
			}
230
			
231
			if(cap<-30 || cap>30) 					//Gestion vitesse dans les virages
232
			{
233
				vitesse.data.val=vitesse_lente;
234
				snd_dtq (CanTx,vitesse.msg);
235
			}
236
			else 
237
			{
238
				vitesse.data.val=vitesse_rapide;
239
				snd_dtq (CanTx,vitesse.msg);
240
			}
241
			if(couleur=='V' && numero == 0x03 && num_piste==0x03) // Gestion saut piste rouge
242
			{
243
				vitesse.data.val=47;
244
				snd_dtq (CanTx,vitesse.msg);
245
			}
246
			if(couleur=='B' && numero ==0x03 && num_piste==0x03) 
247
			{
248
				vitesse.data.val=10;
249
				snd_dtq (CanTx,vitesse.msg);
250
			}
251
			/*if(capteur == 0b0101011000000101) //Compte le nombre de tour au bout de trois la voiture s'arr?te
252
			{
253
				
254
				nbr_tour+=1;
255
				if(nbr_tour==3)
256
				{
257
					vitesse.data.val=0;
258
					snd_dtq (CanTx,vitesse.msg);
259
					
260
				}
261
			}*/
262
			if(Bp_G==1)
263
			{
264
				vitesse.data.val=0;
265
				snd_dtq (CanTx,vitesse.msg);
266
			}
267
		
268
			dly_tsk(10);
193 269
		}
194
		else 
195
		{
196
			vitesse.data.val=vitesse_rapide;
197
			snd_dtq (CanTx,vitesse.msg);
198
		}
199
		if(couleur=='V' && numero == 0x03) // Gestion saut piste rouge
200
		{
201
			vitesse.data.val=47;
202
			snd_dtq (CanTx,vitesse.msg);
203
		}
204
		if(couleur=='B' && numero ==0x03) 
205
		{
206
			vitesse.data.val=10;
207
			snd_dtq (CanTx,vitesse.msg);
208
		}
209
		
210
		dly_tsk(10);
211 270
	}
271
}
212 272

  
213
	
214
	
215
	
216

  
217
}
218 273
void distance_bord()
219 274
{
220 275
	CanFrame requete_dist;
......
243 298
	}
244 299
}
245 300

  
246

  
247 301
void asserv_cap()
248 302
{
249 303
        CanFrame requete,commande;
......
288 342
        }
289 343
}
290 344

  
291
void etat_feu(){
292
	CanFrame requete;
293
	UINT flag;
345
void clavier()
346
{
294 347
	while(1)
295 348
	{
296
		requete.data.id = 'M';			
297
        requete.data.rtr = 1;        
298
        periph[ADDR('C')].ev = 0x04;					
299
        snd_dtq(CanTx, requete.msg);
300
        wai_flg(ev_periph, 0x04, TWF_ANDW, &flag);
301
        mode_course = periph[ADDR('M')].val;
302
        dly_tsk(10);
303
        }
349
		short code_touche;
350
		vrcv_dtq(QdmTouche,&code_touche);
351
		
352
	}
353
	dly_tsk(30);
304 354
}
305 355

  
306 356
void main()
......
324 374
	sta_tsk(ID_asserv_cap);
325 375
	sta_tsk(ID_avance);
326 376
	sta_tsk(ID_detection_capteur);
327
	sta_tsk(ID_etat_feu);
377
	sta_tsk(ID_mode2course);
378
	sta_tsk(ID_clavier);
328 379
	while(1);
329 380

  
330 381
}

Also available in: Unified diff