[Programmation] problème gestion ouvertures portes voiture par pic16f887
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

problème gestion ouvertures portes voiture par pic16f887



  1. #1
    invite170a0b3d

    problème gestion ouvertures portes voiture par pic16f887


    ------

    Bonjour,
    je veux gérer l'ouverture des 4 portes de voiture et le coffre en les simulant par des boutons poussoirs dans Proteus. si Porte 1 est ouverte il doit afficher le message (Porte 1 ouvrte), si plus de 2 portes sont ouvertes il affiche (Portes ouvertes), si le coffre est ouvert il affiche (coffre ouvert).

    j'ai essayé ce code mais ça marche pas:
    Code:
    while(PORTB.B0==0){SPI_Lcd_Out(2,4,caract("Coffre ouvert"));if(PORTB.B0==1){SPI_Lcd_Out(2,4,caract("              "));}}
    
    while(PORTB.B1==0){
                       if(PORTB.B2==0||PORTB.B3==0||PORTB.B4==0){
                                                                 SPI_Lcd_Out(2,4,caract("Portes  ouverts"));}
                       else SPI_Lcd_Out(2,4,caract("Porte 1 ouverte"));
                       if(PORTB.B1==1){SPI_Lcd_Out(2,4,caract("               "));}}
    
    while(PORTB.B2==0){
                       if(PORTB.B1==0||PORTB.B3==0||PORTB.B4==0){
                                                                 SPI_Lcd_Out(2,4,caract("Portes  ouverts"));}
                       else SPI_Lcd_Out(2,4,caract("Porte 2 ouverte"));
                       if(PORTB.B2==1){SPI_Lcd_Out(2,4,caract("               "));}}
    
    while(PORTB.B3==0){if(PORTB.B1==0||PORTB.B2==0||PORTB.B4==0){
                                                                 SPI_Lcd_Out(2,4,caract("Portes  ouverts"));}
                       else SPI_Lcd_Out(2,4,caract("Porte 3 ouverte"));
                       if(PORTB.B3==1){SPI_Lcd_Out(2,4,caract("               "));}}
    
    while(PORTB.B4==0){
                       if(PORTB.B1==0||PORTB.B2==0||PORTB.B3==0){
                                                                 SPI_Lcd_Out(2,4,caract("Portes  ouverts"));}
                       else SPI_Lcd_Out(2,4,caract("Porte 4 ouverte"));
                       if(PORTB.B4==1){SPI_Lcd_Out(2,4,caract("               "));}}
    Nom : Untitled.png
Affichages : 83
Taille : 25,7 Ko

    -----
    Dernière modification par Antoane ; 02/03/2016 à 07h35. Motif: Ajout balises [code]

  2. #2
    luc_1049

    Re : problème gestion ouvertures portes voiture par pic16f887

    Bonjour

    Vous devriez utilisez des symboles plus explicites pour faciliter la lecture du code.

    Si cela ne marche pas, scinder votre code et faites le marcher sur une partie plus courte et moins complexe.

    Cela ne marche pas lors des essais ou en simulation ? C'est 2 choses différentes. Interruption ou pas ?

    Pensez aux anti rebonds, à configurer les ports dans le bon sens en entrée ou en sortie, aux résistance de tirage, aux conditions pour sortir d'un while. Il ya aussi le do...while.

    Alignez le code avec des indentations pour qu'il soit lisible. Il n'y a aucun commentaire et pas de variables explicites,... BOF!!

    Revoyez l'héxamètre de QUINTILIEN pour bien exposer la situation .

    cdlt

  3. #3
    inviteede7e2b6

    Re : problème gestion ouvertures portes voiture par pic16f887

    évidemment , si tu dis des grossièretés !

  4. #4
    invite5637435c

    Re : problème gestion ouvertures portes voiture par pic16f887

    Bonjour,

    tu m'étonnes que ça fonctionne pas, c'est codé avec les pieds ce truc...
    Voici un exemple de ce que tu pourrais faire, avec en prime des commentaires et de l'indentation telle qu'on pourrait espérer la voir dans ton programme:

    Code:
    /*  HULK28 pour le forum Futura sciences */
    /*  Compilateur MikroC 6.4.0             */
    /*  Sujet: gestion de portes auto        */
    /*  (non compilé et non testé)           */
    /* pour LCD 16 caractères                */
    
    void main() // entrée du programme
    {
    TRISB = 0xFF; // tous les ports sont placés en entrée (avec pull-up hardware!!)
    
    while(1)  // boucle infinie
         {
         read_states(); // appel de la fonction de lecture des états des portes
         }
    }
    
    
    void read_states(void)
    {
    char state; // buffer de lecture du portB
    
    state = PORTB & 0x0F;   // On fait un masque pour récupérer l'état des portes
                            // sur le quartet LSB
    
    /*
    P3 | P2 | P1 | Coffre | etat (porte ouverte => état 0
    0    0    0    0        -> toutes les portes sont ouvertes
    0    0    0    1        -> toutes les portes sont ouvertes sauf le coffre
    0    0    1    0        -> ttes les portes ouvertes sauf la porte1
    0    0    1    1        -> ....etc
    0    1    0    0
    0    1    0    1
    0    1    1    0
    0    1    1    1
    1    0    0    0
    1    0    0    1
    1    0    1    0
    1    0    1    1
    1    1    0    0
    1    1    0    1
    1    1    1    0
    1    1    1    1
    */
                            
    switch(state) // gestion des états lus
          {
          case(0):    SPI_Lcd_Out(2,1,caract("ttes Portes ouv."));break
          case(0x01): SPI_Lcd_Out(2,1,caract("P1+P2+P3    ouv."));break
          case(0x02): SPI_Lcd_Out(2,1,caract("P2+P3+Coff  ouv."));break
          case(0x03): SPI_Lcd_Out(2,1,caract("P2+P3       ouv.");break
          case(0x04): SPI_Lcd_Out(2,1,caract("P1+P3+Coff  ouv."));break
          case(0x05): SPI_Lcd_Out(2,1,caract("P1+P3       ouv."));break
          case(0x06): SPI_Lcd_Out(2,1,caract("P3+Coff     ouv."));break
          case(0x07): SPI_Lcd_Out(2,1,caract("P3          ouv."));break
          case(0x08): SPI_Lcd_Out(2,1,caract("P1+P2+Coff  ouv."));break
          case(0x09): SPI_Lcd_Out(2,1,caract("P2+P1       ouv."));break
          case(0x0A): SPI_Lcd_Out(2,1,caract("P2+Coff     ouv."));break
          case(0x0B): SPI_Lcd_Out(2,1,caract("P2          ouv."));break
          case(0x0C): SPI_Lcd_Out(2,1,caract("P1+Coff     ouv."));break
          case(0x0D): SPI_Lcd_Out(2,1,caract("P1          ouv."));break
          case(0x0E): SPI_Lcd_Out(2,1,caract("Coffre      ouv."));break
          case(0x0F): SPI_Lcd_Out(2,1,caract("Portes fermees  "));break
          default: break;
          }
    }
    // fin du programme
    Plus qu'à améliorer mais tu as là l'essentiel du principe.
    @+

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Réponses: 16
    Dernier message: 12/03/2015, 17h29
  2. PIC16F887 problème sortie PWM
    Par inviteb925c1cb dans le forum Électronique
    Réponses: 18
    Dernier message: 04/06/2014, 15h19
  3. PIC16F887 delay_ms() problème
    Par invitec6603a9c dans le forum Électronique
    Réponses: 4
    Dernier message: 01/06/2008, 10h29
  4. Le problème des 3 portes
    Par invitea3eb043e dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 26/11/2006, 12h58
  5. Ouvertures intempestives de portes de garage
    Par inviteef3dcf69 dans le forum Dépannage
    Réponses: 4
    Dernier message: 18/09/2006, 23h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...