Est ce que j'ai le droit???
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

Est ce que j'ai le droit???



  1. #1
    invitea683cd67

    Est ce que j'ai le droit???


    ------

    Bonjour,voila je voulais savoir si j'ai le droit de mettre une double condition lié par un 'ou' dans une boucle tant que???
    Car mon programme ne veut pas sortir de ma boucle malgré que les deux conditions sont respecté.
    do
    {
    appui=0;
    do
    {
    if(lig1==0)
    {
    anti_rebond();
    t1++;
    appui=1;
    break;
    }
    i++;
    }
    while(i==4);
    }
    while(t1<=4||appui==0);
    Je m'est mon morceau de code la ou se trouve ma boucle.
    Merci d'avance pour votre aide

    -----

  2. #2
    ftorama

    Re : Est ce que j'ai le droit???

    le "while(i==4)" n'est pas bon.

    Au premier passage, i=1, donc le while est faux, tu sors tout de suite de la boucle.

    Il faut utiliser while(i<4) ou while(i<=4).

    ça devrait déjà marcher beaucoup mieux

  3. #3
    carcan

    Re : Est ce que j'ai le droit???

    Hello !

    oui, il n'y a pas de raison ...

    A+
    Laurent

  4. #4
    invitea683cd67

    Re : Est ce que j'ai le droit???

    Ftorama, j'ai suivi ton conseil ça ne change rien. Il ne veut rien savoir et ne veut toujours pas sortir de ma boucle while(t1<=4||appui==0).
    Je crois que je vais me jeter la tète contre un mur.

    Ps: Et après les gens s'étonnent que je suis pas fan de la prog^^

  5. A voir en vidéo sur Futura
  6. #5
    ftorama

    Re : Est ce que j'ai le droit???

    Citation Envoyé par guizmo21 Voir le message
    Ftorama, j'ai suivi ton conseil ça ne change rien. Il ne veut rien savoir et ne veut toujours pas sortir de ma boucle while(t1<=4||appui==0).
    Je crois que je vais me jeter la tète contre un mur.

    Ps: Et après les gens s'étonnent que je suis pas fan de la prog^^
    ton lig1 passe bien à 0?
    que se passe-t-il dans anti-rebond() ?

    Je suis pas fan du code, mais sauf caprice du compilateur, il fait en général ce que tu lui demandes

  7. #6
    invitea683cd67

    Re : Est ce que j'ai le droit???

    C'est un bout de programme pour un décodage de clavier, donc lig1 passe a 0 si la touche 1 est appuyé. Ensuite anti_rebond est un sous-programme pour gérer les rebonds des touches.

  8. #7
    simon.

    Re : Est ce que j'ai le droit???

    Ce serait une bonne idée d'initialiser t1 et i à une valeur connue (zero?) au début du programme !

  9. #8
    invitea683cd67

    Re : Est ce que j'ai le droit???

    t1 et i sont initialiser au début de programme. Ce que j'ai poster n'est qu'un morceau de mon programme

  10. #9
    Calou80

    Re : Est ce que j'ai le droit???

    as-tu essayé d'encadrer tes conditions par des paranthèses? genre
    ( (t1<=4)||(appui==0) )
    Je pense que, sans les paranthèses, on peut avoir des interpretations un peu "folkloriques" de ce test.

  11. #10
    Tryph

    Re : Est ce que j'ai le droit???

    Salut,

    j'arrive pas à comprendre ce que ce bout de code est censé faire, à mon avis, y a un problème d'algorithme.

    tu devrais essayer de nous expliquer en bon français ce que tu cherches à faire, ça nous permettrait de mieux voir ce qui va pas.

  12. #11
    invitea683cd67

    Re : Est ce que j'ai le droit???

    Comme je l'ai dis précédemment, je réalise un décodage clavier(clavier type téléphone portable, si 2 appui sur la touche1 on a un 'a').
    Donc le je scanne la touche 1 avec un If. Je rentre dans mon morceau que je vous ai transmis.
    Je met t1 a 1.
    Ensuite je rentre dans mon programme anti_rebond pour éviter de compter les rebonds.
    Ensuite je réalise une boucle tant que pour savoir le nombre d'appui sur la touche.Avec comme fin soit t1<= 3 (car il est pas possible d'appuyer plus de 4 fois sur une touche) ou appui=0(appui me sert de scanne de touche)
    Ma deuxième boucle jusqu'a me sert a crée une tempo pour laisser le temps a l'utilisateur de re-appuyer sur la touche pour choisir le caractère qui l'intéresse .

    J’espère être claire dans mon explication et n'ayez pas peur de poser des questions s'il y a quelque chose que vous ne comprenez pas.

    Merci de prendre du temps pour m'aider a résoudre mon problème.

  13. #12
    Calou80

    Re : Est ce que j'ai le droit???

    donc lig1 représente une entrée physique de µC pour ton clavier multiplexé? C'est pour une écriture genre "SMS" avec un clavier numérique? c'est ça?

  14. #13
    invitea683cd67

    Re : Est ce que j'ai le droit???

    Oui lig1 est une entrée de mon PIC. Et effectivement c'est pour pouvoir écrire un texte avec un clavier numérique.

  15. #14
    Calou80

    Re : Est ce que j'ai le droit???

    Comment es-tu sûre que tes 2 conditions soient respectées? En simu ou par débuggeur?
    A mon avis, il faudrait revoir ton algo car l'utilisation d'un break dans un if n'est pas trés correct, enfin pour moi.

  16. #15
    RicounetZap

    Re : Est ce que j'ai le droit???

    Bonjour,

    Si dans ta boucle, l'utilisateur n'appuie pas sur la touche, lig1 n'est pas modifié, donc appui reste à 0, donc la condition finale de ta boucle reste vrai
    While (xxx || vrai), donc tu ne sors jamais

    Cordialement
    N'importe quoi, for ever :-)

  17. #16
    Tryph

    Re : Est ce que j'ai le droit???

    effectivement le break fait sortir de la boucle do{}while(lig1<=4).


    par contre, la façon d'attendre un éventuel 2e appui sur la touche est pas bonne.
    si la touche n'est pas pressée, le fait de passer 4 fois dans la boucle "while(i<=4)" va passer super rapidement. ça dépend de la fréquence du PIC, mais ça devrait pas prendre plus de quelques µs.

    Edit: et RicounetZap à raison en plus

  18. #17
    invitea683cd67

    Re : Est ce que j'ai le droit???

    Pour vérifier mes condition je suis en mode debuggeur. Sinon j'ai toujours mis un break pour sortir de mes boucles et je n'ai jamais eu de problème

  19. #18
    Calou80

    Re : Est ce que j'ai le droit???

    Citation Envoyé par Tryph Voir le message
    Edit: et RicounetZap à raison en plus
    Oui, je suis d'accord!!!
    Quand tu parles de débuggeur, c'est bien un débuggeur réel, pas un simulateur?

    Dans nos façons de coder, le 'break' n'hexiste QUE pour un case. Si on met un break dans une boucle for, do...while, etc, c'est qu'on a raté des conditions et.... trés mauvais pour la stabilité du code.

  20. #19
    invitea683cd67

    Re : Est ce que j'ai le droit???

    J'utilise un vrai debbuggeur, j'utilise Mplab ICD2
    Sinon j'ai modifier mon code comme me l'a dis RicounetZap.
    Et maintenant je veu fixer appui a 1 en faisant appui=1; mais quand je scanne mes bits appui reste a 0. Pourquoi tant de haine???
    Comment expliquer ce refus de passage a 1

  21. #20
    Tryph

    Re : Est ce que j'ai le droit???

    en fait, avec le break, ça devrait fonctionner, mais c'est pas "propre". ça complique la compréhension du code.

    une façon plus "propre" pourrait être:
    Code:
      do
      {
        if(lig1==0)
        {
          anti_rebond();      
          t1++;
          appui=1;
        }
        else
        {
          i++;
        }
      }
      while(i<=4 && appui==0);
    si j'ai pas fait d'erreur, ça revient au même mais ça casse pas le cheminement "normal".



    à part ça, si j'ai bien compris, tu ne rentres dans ce bout de code que si un appui est déjà survenu. on doit donc pouvoir sortir de la boucle même si aucun nouvel appui ne survient.
    hors, tu conditionnes la sortie de ta boucle à un nouvel appui de touche comme l'a remarque RicounetZap (tu mets "appui" à 0, tu attends qu'elle passe à 1 pour sortir, mais tu ne la mets à 1 que si la touche est pressée (une 2e fois)).

    en fait c'est l'algo qui est à revoir, je te propose celui ci:
    Code:
    // un premier appui est survenu, on entre dans le code
    i=0                       // pour compter les tours de boucles sans appui
    t1=1                      // la touche a été appuyé une fois
    
    do                        // on boucle... [1]
    {
      if(lig1==0)             // si un appui de touche est detecté...
      {
        anti_rebond();      
        t1++;                 // on augmente le compteur d'appuis de touche
        i=0;                  // on remet le compteur de tours de boucle à 0 pour
                              // attendre l'appui suivant
      }
      else                    // pas d'appui de touche...
      {
        i++;                  // on se contente d'augmenter le compteur de tours
                              // de boucles sans nouvel appui
      }
    }
    while(i<=5000 && t1<=3);  // [1] ... tant qu'on n'a pas fait un certain nombre
                              // de tours de boucle sans nouvel appui de touche et
                              // que le nombre d'appui est inférieur à 4
    j'ai mis 5000 pour le nombre de tours de boucle à effectuer avant qu'on décide que l'utilisateur ne veut pas appuyer une 2e fois, mais c'est purement arbitraire. ça sera à toi de determiner un nombre qui va bien mais ça sera probablement plus de 5000.

    sinon j'ai pas testé ce bout de code alors y a peut être bien des erreurs, mais je pense que ça devrait aller mieux.

  22. #21
    invitea683cd67

    Re : Est ce que j'ai le droit???

    Il est 16h40 et après 7 heure a se prendre la tête, mon programme fonctionne comme je veux.
    Merci a vous tous pour votre précieuse aide.

Discussions similaires

  1. Est ce que j'ai le droit ??
    Par nicostar dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 11/06/2009, 23h33
  2. J'ai pas droit au sud !
    Par bv56 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 7
    Dernier message: 26/03/2009, 21h35
  3. quel est le plus difficile fac de droit ou psycho ???
    Par invite9dd655ae dans le forum Orientation après le BAC
    Réponses: 3
    Dernier message: 01/02/2008, 17h41
  4. La violence est elle necessairement contraire au droit ?
    Par invite76c65def dans le forum [ARCHIVE] Philosophie
    Réponses: 1
    Dernier message: 26/09/2004, 15h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.