Revision 476

View differences:

branch/decroux/Emb_App/programme_principal_etud.c
127 127
unsigned int capt=0x0000;
128 128
unsigned int Mode;
129 129
int cpt=0;
130
unsigned int stop;
130 131

  
131 132

  
132

  
133 133
// Tache qui met la tourelle a 45degres
134 134
void asservissement_tourelle()
135 135
{
......
137 137
		CanFrame commTourel;
138 138
		CanFrame requeteTourel; 
139 139
		// Lectre de l'angle
140
		requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le t?l?mtre
141
    	requeteTourel.data.rtr=1; // Indiquation d'une requ?te de lecture
142
    	snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
143
		alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
144
		periph[ADDR('R')].maj; // Incremente a chaque reception
145
		//Corection de l'angle	
146
		commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le t?l?metre
147
		commTourel.data.rtr=0; 
148
   		commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
149
		snd_dtq (CanTx,commTourel.msg);
150
			
140
		if(Bp_M==1)
141
		{
142
			alpha=kt*((2*(ad01-512))-alpha); // si bouton poussoir du milieu activer
143
		}
144
		else
145
		{
146
			requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le t?l?mtre
147
    		requeteTourel.data.rtr=1; // Indiquation d'une requ?te de lecture
148
    		snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
149
			alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
150
			periph[ADDR('R')].maj; // Incremente a chaque reception
151
			//Corection de l'angle	
152
			commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le t?l?metre
153
			commTourel.data.rtr=0; 
154
   			commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
155
			snd_dtq (CanTx,commTourel.msg);
156
		}
151 157
		dly_tsk(10);
152 158
	}
153 159
}
......
167 173
		periph[ADDR('U')].maj; // Incremente a chaque reception
168 174

  
169 175
		//Assevicement 
170
		if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
176
		if(Mode==0x8204 || Mode==0x0104)//On est sur la piste noir
171 177
		{
172 178
			if(capt==0x7608)// Apr?s le saut 
173 179
			{
......
176 182
				commRoues.data.val=kr*(dis-700); // Correction de la disance
177 183
				snd_dtq(CanTx,commRoues.msg);
178 184
			}
179
			else if(dis>5000 || dis<400 || capt==0x7210) //Pour passer les trous et les tonneau 
185
			else if(dis>5000 || dis<500 || capt==0x7210) //Pour passer les trous et les tonneau 
180 186
			{
181 187
				LED_J=1;
182 188
				dly_tsk(100);
189
				LED_J=0;
183 190
				commRoues.data.id='D'; // Commande de l'angle des roues 
184 191
				commRoues.data.rtr=0; //Indique une requete d'?criture
185 192
				commRoues.data.val= 0; // Correction de la disance
......
218 225
				snd_dtq(CanTx,commRoues.msg);
219 226
			}
220 227
		}
221
		else 
228
		else if(Mode==0x8203 || Mode==0x0103) //On est sur la piste rouge
222 229
		{	
223
			if(dis>1000 ) //Pour passer les trous 
230
			if(capt==0x6a08)
224 231
			{
232
				commRoues.data.id='D'; // Commande de l'angle des roues 
233
				commRoues.data.rtr=0; //Indique une requete d'?criture
234
				commRoues.data.val= 0; // Correction de la disance
235
				snd_dtq(CanTx,commRoues.msg);
236
			}
237
			else if(dis>1000 ) //Pour passer les trous 
238
			{
225 239
				LED_J=1;
226 240
				dly_tsk(100);
241
				LED_J=0;
227 242
				commRoues.data.id='D'; // Commande de l'angle des roues 
228 243
				commRoues.data.rtr=0; //Indique une requete d'?criture
229 244
				commRoues.data.val= 0; // Correction de la disance
......
237 252
				snd_dtq(CanTx,commRoues.msg);
238 253
			}
239 254
		}
255
		else
256
		{
257
			if(dis>2000 ) //Pour passer les trous 
258
			{
259
				LED_J=1;
260
				dly_tsk(100);
261
				LED_J=0;
262
				commRoues.data.id='D'; // Commande de l'angle des roues 
263
				commRoues.data.rtr=0; //Indique une requete d'?criture
264
				commRoues.data.val= 0; // Correction de la disance
265
				snd_dtq(CanTx,commRoues.msg);
266
			}
267
			else
268
			{
269
				commRoues.data.id='D'; // Commande de l'angle des roues 
270
				commRoues.data.rtr=0; //Indique une requete d'?criture
271
				commRoues.data.val=kr*(dis-700); // Correction de la disance
272
				snd_dtq(CanTx,commRoues.msg);
273
			}
274
		}
240 275
		dly_tsk(10);	
241 276
	}
242 277
		
243 278
}
244 279

  
280
//Fonction d'arret urgence
281
void arreturgence(void)
282
{
283
	CanFrame commVit;
284
	stop=Bp_G;
285
	LED_R=0;
286
	while (stop==1)
287
	{
288
		stop=Bp_G;
289
		commVit.data.id='V';
290
		commVit.data.rtr=0;
291
		commVit.data.val=0;
292
		snd_dtq(CanTx, commVit.msg);
293
		LED_R=1;
294
	}
295
}
296

  
245 297
//Fonctin vitesse noir
246
void vitesse4(unsigned int valcapt)
298
int vitesse4(unsigned int valcapt)
247 299
{
248 300
		CanFrame commVit;
249 301
	 	if( capt==0x4a01||capt==0x6208 ||capt==0x7608 ||capt==0x7620) // Rallentissement pr?s du tonneau, pour la bosse et apr?s le saut
......
259 311
			commVit.data.rtr=0;
260 312
			commVit.data.val=42; 
261 313
			snd_dtq (CanTx,commVit.msg);
314
		}
315
		else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
316
		{
317
			commVit.data.id='V';
318
			commVit.data.rtr=0;
319
			commVit.data.val=ad01/10; 
320
			snd_dtq (CanTx,commVit.msg);
321
		}
322
		else if(valcapt==0x5605)
323
		{
324
			cpt=cpt+1;
262 325
		}	
263 326
		else 
264 327
		{	commVit.data.id='V';
265 328
			commVit.data.rtr=0;
266 329
			commVit.data.val=25; //Reprise de vitesse une fois la voiture stabilis? piste rouge
267 330
			snd_dtq (CanTx,commVit.msg);
268
		}		
331
		}	
332
	return cpt;	
269 333
}
270 334
//Fonction vitesse rouge
271
void vitesse3(unsigned int valcapt)
335
int vitesse3(unsigned int valcapt)
272 336
{
273 337
	CanFrame commVit;
274
	//vitesse pour passer le tramplin piste rouge
338
	//vitesse pour passer le tramplin piste rouge 
275 339
	if(valcapt== 0x6a08)
276 340
	{
277 341
		commVit.data.id='V';
278 342
		commVit.data.rtr=0;
279 343
		commVit.data.val=45; 
280 344
		snd_dtq (CanTx,commVit.msg);
281
	} 
345
	}
282 346
	//Ralentissemet apr?s tramplin piste rouge
283 347
	else if(valcapt==0x7608||valcapt==0x4203) 
284 348
	{
......
286 350
		commVit.data.rtr=0;
287 351
		commVit.data.val=15;
288 352
		snd_dtq (CanTx,commVit.msg);
289
	}	
353
	}
354
	else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
355
	{
356
		commVit.data.id='V';
357
		commVit.data.rtr=0;
358
		commVit.data.val=ad01/10; 
359
		snd_dtq (CanTx,commVit.msg);
360
	}
361
	else if(valcapt==0x5605)
362
	{
363
		cpt=cpt+1;
364
	}		
290 365
	else
291 366
	{
292 367
		commVit.data.id='V';
293 368
		commVit.data.rtr=0;
294 369
		commVit.data.val=30; //Reprise de vitesse une fois la voiture stabilis? piste rouge
295 370
		snd_dtq (CanTx,commVit.msg);
296
	}	
371
	}
372
	return cpt;
297 373
}	
298 374
			
299 375
		
......
312 388
			snd_dtq (CanTx,commVit.msg);
313 389
			return cpt;
314 390
		}
391
		else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
392
		{
393
			commVit.data.id='V';
394
			commVit.data.rtr=0;
395
			commVit.data.val=ad01/10; 
396
			snd_dtq (CanTx,commVit.msg);
397
		}	
315 398
		else
316 399
		{
317 400
			commVit.data.id='V';
318
			commVit	.data.rtr=0;
401
 			commVit	.data.rtr=0;
319 402
			commVit.data.val=30; 
320 403
			snd_dtq (CanTx,commVit.msg);
321 404
		}
322 405
	}
323 406
	else
324 407
	{
325
		commVit.data.id='V';
326
		commVit	.data.rtr=0;
327
		commVit.data.val=30; 
328
		snd_dtq (CanTx,commVit.msg);
408
		if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
409
		{
410
			commVit.data.id='V';
411
			commVit.data.rtr=0;
412
			commVit.data.val=ad01/10; 
413
			snd_dtq (CanTx,commVit.msg);
414
		}
415
		else
416
		{	
417
			commVit.data.id='V';
418
			commVit	.data.rtr=0;
419
			commVit.data.val=30; 
420
			snd_dtq (CanTx,commVit.msg);
421
		}
329 422
	}
330 423
	return cpt;
331 424
	
......
338 431
	if(capt==0x5605)
339 432
	{
340 433
		cpt=cpt+1;
341
		if(cpt==9)
342
		{
343
			commVit.data.id='V';
344
			commVit	.data.rtr=0;
345
			commVit.data.val=0; 
346
			snd_dtq (CanTx,commVit.msg);
347
			return cpt;
348
		}
349
		else
350
		{
351
			commVit.data.id='V';
352
			commVit	.data.rtr=0;
353
			commVit.data.val=42; 
354
			snd_dtq (CanTx,commVit.msg);
355
		}
356 434
	}
435
	
436
	else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
437
	{
438
		commVit.data.id='V';
439
		commVit.data.rtr=0;
440
		commVit.data.val=ad01/10; 
441
		snd_dtq (CanTx,commVit.msg);
442
	}	
357 443
	else
358 444
	{
359 445
		commVit.data.id='V';
......
361 447
		commVit.data.val=42; 
362 448
		snd_dtq (CanTx,commVit.msg);
363 449
	}
450
	
364 451
	return cpt;
365 452
}
366 453

  
......
400 487

  
401 488
void main()
402 489
{
403
	
404
	
490
	CanFrame commVit;
405 491
	ports_mcu();
406 492
    lcd_init();
407 493
	periph_init();
......
418 504
	sta_tsk(ID_asservissement_roues);
419 505
	
420 506
    while(1)
421
    {	
507
    {
508
		arreturgence();
422 509
		Mode= lecture_piste();
423
		if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
510
		if(Mode==0x8204)//On est sur la piste noir
424 511
		{
425 512
			capt=lecture_Capteur();
426 513
			vitesse4(capt);
514
			if(cpt==24)
515
			{
516
				commVit.data.id='V';
517
				commVit	.data.rtr=0;
518
				commVit.data.val=0; 
519
				snd_dtq (CanTx,commVit.msg);
520
				return;
521
			}
427 522
		}
428
		else if(Mode==0x8303 || Mode==0x0303) //O est sur la piste rouge
523
		else if(Mode==0x8203) //O est sur la piste rouge
429 524
		{
430 525
			capt=lecture_Capteur();
431
			vitesse3(capt);
526
			cpt=vitesse3(capt);	
527
			if(cpt==24)
528
			{
529
				commVit.data.id='V';
530
				commVit	.data.rtr=0;
531
				commVit.data.val=0; 
532
				snd_dtq (CanTx,commVit.msg);
533
				return;
534
			}
535
				
432 536
		}
433
		else if(Mode==0x8302 || Mode==0x0302) //On est dur la piste bleu
537
		else if(Mode==0x8202) //On est dur la piste bleu
434 538
		{
435 539
			capt=lecture_Capteur();
436 540
			cpt=vitesse2(capt);
......
439 543
				return ;
440 544
			}
441 545
		}
442
		else if(Mode==0x8301 || Mode==0x0301)//On est sur la piste verte
546
		else if(Mode==0x8201)//On est sur la piste verte
443 547
		{
444 548
			capt=lecture_Capteur();
445 549
			cpt=vitesse1(capt);
446
			if (cpt==9)//Compteur pour arreter la voiture a 3 eme tour
447
			{
448
				return ;
550
			if (cpt==16)//Compteur pour arreter la voiture a 3 eme tour
551
			{commVit.data.id='V';
552
				commVit	.data.rtr=0;
553
				commVit.data.val=0; 
554
				snd_dtq (CanTx,commVit.msg);
555
				return;;
449 556
			}
450 557
		}
451
		
558
		else
559
		{
560
			commVit.data.id='V';
561
			commVit	.data.rtr=0;
562
			commVit.data.val=0; 
563
			snd_dtq (CanTx,commVit.msg);
564
		}
452 565
		
453
		LED_J=0;
454
		dly_tsk(100);
455
				
566
		dly_tsk(100);			
456 567
    }
457 568
}
458 569

  

Also available in: Unified diff