Pilotage d'un véhicule
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Pilotage d'un véhicule



  1. #1
    Mickl1722

    Smile Pilotage d'un véhicule


    ------

    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();
    }
    }
    }
    }

    -----
    Images attachées Images attachées

  2. #2
    invite624dc4b7

    Re : Pilotage d'un véhicule

    je dirais que c'est les interrupteur qui ne vont pas.
    J'ai eu ce probleme une fois, il fait mettre un resistance en pull down.
    Voila
    Tim
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/12/2010, 22h44
  2. Pilotage d'un SPO256
    Par Jojop37 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/02/2010, 10h11
  3. Pilotage d'un système d'irrigation
    Par iver23 dans le forum Électronique
    Réponses: 2
    Dernier message: 07/05/2009, 12h01
  4. pilotage d'un relais
    Par invite9d90ef91 dans le forum Électronique
    Réponses: 2
    Dernier message: 06/07/2007, 12h23
  5. pilotage d'un ecran lcd d'un vieil organisateur
    Par invite3a8921f5 dans le forum Électronique
    Réponses: 0
    Dernier message: 12/02/2007, 04h46
Découvrez nos comparatifs produits sur l'informatique et les technologies.