Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

PROGRAMME C robot



  1. #1
    stephane-mecano

    PROGRAMME C robot


    ------

    Code:
    #define       LED_IR_HAUT      PORTC.F0
    #define       LED_IR_BAS       PORTC.F1
    #define       PUSH             PORTC.F7
    #define       BUZZER           PORTD.F7
    #define       MOTEUR_GAUCHE1   PORTA.F0
    #define       MOTEUR_GAUCHE2   PORTA.F1
    #define       MOTEUR_DROIT1    PORTA.F2
    #define       MOTEUR_DROIT2    PORTA.F3
    #define       LED_AV           PORTE.F1
    #define       LED_ARR          PORTE.F2
    
    
    
    //*********** Prototype des fonctions  *************
    
    
    void init();
    void Detection_Obstacle();
    void Detection_Vide();
    
    
    //*********** Programme Principal  *************
    
    int main(){
    
    TRISC=1;
    PORTC=0;
    TRISD.F7=0;
    PORTD.F7=0;
    TRISE=0;
    PORTE=0;
    TRISA=0;
    PORTA=0;
    
    // Boucle Infinie
    
    while(1){
    
    Init();
    
    if(LED_IR_HAUT==1){                        // Détection obstacle
    
    Detection_Obstacle();
    }
    
    else if(LED_IR_BAS==1){                    // Détection dans le vide
    
    Detection_Vide();
    
    }
    
    }
    }
    
    
    //*********** Fonctions  *************
    
    void  Init(){
    
    if(PUSH==1){
    PORTA=0x05;                                                                         // BINAIRE>> 0b000101
    PORTE=0x02;                                                                         // BINAIRE>> 0b010
    }
    
    }
    
    
    void Detection_Obstacle(){
    
    MOTEUR_GAUCHE2=1;                         // Moteur de gauche en marche, Moteur de droit arrêté,
    delay_ms(1500);
    MOTEUR_GAUCHE2=0;
    
    }
    
    
    void Detection_Vide(){
    
    PORTA=0x00;                                // Arrêt du robot
    PORTE=0x00;
    delay_ms(1500);                            // Pause
    PORTA=0x0A;                                // Marche en Arriére des deux moteurs        BINAIRE>> 0b001010
    PORTE=0x01;                                // Led arriere allumée, Led avant éteinte    BINAIRE>> 0b001010
    delay_ms(1500);                            // Pause
    PORTE=0x00;                                // Led avant et arrière éteinte
    PORTA=0x00;                                // Arrêt des deux moteurs
    delay_ms(500);                             // Pause
    PORTA=0x08;                                // Marche en arriere du moteur gauche        BINAIRE>> 0b001000
    delay_ms(1500);                            // Pause
    PORTA=0x00;                                // Arret du robot
    delay_ms(500);                             // Pause
    PORTE=0x02;                                // Led Avant allumée                         BINAIRE>> 0b010
    PORTA=0x05;                                // Marche des moteurs en avant               BINAIRE>> 0b000101
    
    }
    Bonjour a tous,

    j'ai copié un programme pour un robot qui detecte un obstacle en Langaage C

    CA MARCHE en simulation avec le schéma que j'ai adapté mais je voudrais l'améliorer et comprendre certains points car je ss débutant en C pourquoi il y a deux écriture, hexadécimal et binaire dans le code, ou c'est ecrit BINAIRE>> 0b001010 ca veut dire que c'est 0x0A en binaire? pourquoi ne pas avoir mis le nombre binaire directement? quelle est la différence dans le code? l'hexa prend moins de place en mémoire?

    Et puis en haut le prototype des fonctions, a quoi ca sert de les mettre? car si je les enleve le code ne compile plus?

    -----

  2. Publicité
  3. #2
    katmai

    Re : PROGRAMME C robot

    Salut,

    Pour les variables:

    Que tu écrives en binaire, décimal ou hexa, ça ne change pas la taille en mémoire.
    Ce qui défini la taille en mémoire c'est ton type de variable.
    Tu peux choisir ce qui te convient le mieux, pour la relecture du code.

    Pour les prototypes:

    Si tu les enlèves, comment il fait ton compilateur pour connaitre Detection_Obstacle()?
    Ici tu as le choix, soit tu déclares le prototype, soit tu mets la fonction Detection_Obstable() avant le main().

    Sinon indente ton code ça sera d'autant plus lisible par ex:

    Code:
    void Detection_Obstacle(){
          MOTEUR_GAUCHE2 = 1;                         // Moteur de gauche en marche, Moteur de droit arrêté,
          delay_ms(1500);
          MOTEUR_GAUCHE2 = 0;
    }
    A+

  4. #3
    Jack
    Modérateur

    Re : PROGRAMME C robot

    pourquoi ne pas avoir mis le nombre binaire directement?
    La notation 0bxxxxxxxx n'est pas standard en langage C.

    A+

  5. #4
    guillaume83

    Re : PROGRAMME C robot

    Perso, j' utilise la notation binaire en C quand je représente des ensembles de bits:
    0bOO111OO1 bit0 à 1, bit1 à 0, bit2 à 0..........bit7 à 0
    cela permet de visualiser directement l'état des different bits, par exemple pour des entrées sorties, des registres de bits.
    @+

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    Jack
    Modérateur

    Re : PROGRAMME C robot

    Perso, j' utilise la notation binaire en C quand je représente des ensembles de bits:
    Certains compilateurs le proposent, mais ils ne respectent pas la norme, donc dans l'absolu ce n'est plus du langage C.

    A+

  9. #6
    guillaume83

    Re : PROGRAMME C robot

    Citation Envoyé par stephane-mecano Voir le message
    [CODE]

    if(PUSH==1){
    PORTA=0x05; // BINAIRE>> 0b000101
    PORTE=0x02; // BINAIRE>> 0b010
    }

    }

    Pour résumer:

    ici l'écriture binaire est derrière les // donc se sont des commentaires non pris en compte par le compilateur.

    Donc pour celui qui désire écrire des programmes en C pure norme (pour la portabilité d'un compilateur à un autre par exemple) pas d' écriture binaire (dans les commentaires on peut les inclures si une meilleur lisibilité est souhaité.)
    Pour celui qui n'utilise qu'un compilateur est souhaite exploiter les fonctions de celui-ci ,.........voir la notice.
    Dans tous les cas, vive la programmation
    Dernière modification par guillaume83 ; 23/06/2013 à 18h20.

  10. Publicité

Discussions similaires

  1. Programme d'évitement d'obstacle pour robot
    Par DamDam00 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 04/05/2012, 21h32
  2. programme de robot suiveur de ligne (PIC asm)
    Par sniteiru dans le forum Électronique
    Réponses: 12
    Dernier message: 01/05/2012, 16h35
  3. programme qui lance un autre programme
    Par antho35 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 10/02/2011, 12h26
  4. comment utiliser les résultats d'un programme fortran dans un autre programme
    Par physicstudent dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/09/2010, 19h21
  5. recherche un programme , ou un programmateur ,pour un robot
    Par alain4 dans le forum Électronique
    Réponses: 8
    Dernier message: 30/01/2009, 15h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.