Voila. J'aimerai voir mon programme fonctionner.
Le but est de piloter un bolide. Il y a 8 capteurs sur le devant et sont reliés au portc qui est mon port d'entrée. Lorsque les deux capteurs du milieu sont à zéro, il va tout droit, sinon, il fait un virage. Mon port de sortie est le portd. Mais lorsqu'il ne détecte plus la ligne, il fait un tour soit dans le sens trigo soit dans le sens horaire jusqu'a redétecter la ligne. C'est la que j'ai un soucis.
Je simule sur ISIS avec le .cof, mais lorqueje met l'un des boutons qui me srevent à simuler les cpteur à 0, aucun des moteurs ne rédemarre. En fait il reste en rotation comme si ne détectait pas la ligne.
Pourriez vous m'aider ?
Voici mon programme, et une photo une fois la ligne normalement détecter.
#include<p18f4520.h>
#include<stdio.h>
#include<stdlib.h>
#include<delays.h>
/****************************** ***/
/* Prototype des fonctions */
/****************************** ***/
void AlleraDroite(void);
void AlleraGauche(void);
void SsHoraire(void);
void SsTrigo(void);
void Freinage(void);
float GestionVitesse(void);
/****************************** ********/
/* Déclaration des variables tampon */
/****************************** ********/
unsigned char Ta[2];
unsigned char *Ptr_Ta;
int MEMOIRE;
int j;
/****************************/
/* Définition des fonctions*/
/***************************/
/* Aller tout droit */
void Toutdroit(void){
PORTC=0x0A;
Delay1KTCYx(16);
PORTC=0x00;
Delay1KTCYx(4);
}
/* Aller à droite */
void AlleraDroite(void){
GestionVitesse();
PORTC=0x0A;
Delay1KTCYx(Ptr_Ta[0]);
PORTC=0x02;
Delay1KTCYx(Ptr_Ta[1]);
PORTC=0x00;
Delay1KTCYx(6);
}
/* Aller à gauche */
void AlleraGauche(void){
GestionVitesse();
PORTC=0x0A;
Delay1KTCYx(Ptr_Ta[1]);
PORTC=0x08;
Delay1KTCYx(Ptr_Ta[0]);
PORTC=0x00;
Delay1KTCYx(6);
}
/* Aller dans le sens horaire */
void SsHoraire(void){
PORTC=0x08;
Delay1KTCYx(16);
PORTC=0x00;
Delay1KTCYx(4);
}
/* Aller dans le sens trigonométrique */
void SsTrigo(void){
PORTC=0x02;
Delay1KTCYx(4);
PORTC=0x00;
Delay1KTCYx(16);
}
void Freinage(void){
/* Déclaration des variables */
int i;
/* Structure itérative */
for(i=0;i<10;i++){
PORTC=0x00;
Delay1KTCYx(14);
PORTC=0x0A;
Delay1KTCYx(6);
}
}
/* Gestion de la vitesse */
float GestionVitesse(void){
if((PORTD == 0xCF) || (PORTD == 0xF3)){
Ptr_Ta[0]=12;
Ptr_Ta[1]=2;
}
else{
if((PORTD == 0x9F) || (PORTD == 0xF9)){
Ptr_Ta[0]=10;
Ptr_Ta[1]=4;
}
else{
if((PORTD == 0x3F) || (PORTD == 0xFC) || (PORTD == 0x7F) || (PORTD == 0xFE)){
Ptr_Ta[0]=8;
Ptr_Ta[1]=6;
}
}
}
}
/****************************** ***/
/* Programme Principale */
/****************************** ***/
void main(void){
/* Définition de la configuration des PORTS */
TRISD=0xff; /* PORTA configurer en entrée */
TRISC=0x00; /* PORTB configurer en sortie */
/* Structure alternatives et itératives */
while(1){
if(PORTD != 0xFF){
if(PORTD == 0xE7){
Toutdroit(); /* Appel de la fonction Toutdroit */
j=0;
}
else{
if(PORTD > 0xE7){
AlleraDroite(); /* Appel de la fonction AlleraDroite */
MEMOIRE=1;
}
else{
if(PORTD < 0xE7){
AlleraGauche(); /* Appel de la fonction AlleraGauche */
MEMOIRE=0;
}
}
}
}
else{
if(MEMOIRE == 1){
SsTrigo();
}
else{
SsHoraire();
}
}
}
}
-----