IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tester l'appui sur un bouton de 3s


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut Tester l'appui sur un bouton de 3s
    Bonjour à vous,

    Je dévelope un programme destiné à une carte pour l'industrie. J'ai résolu beaucoup de problème posé par mon cahier des charges, mais là j'avoue que je bloque sur une fonction qui est demandée qui me parraissait pourtant simple. Je dois tester l'appui sur un bouton pendant 3s. Je dispose de 3 boutons sur ma carte de test , 2 boutons qui permettent d'incrémenter ou décrémenter une valeur de consigne, le 3 ième bouton permet de valider la consigne réalisée. Lorsque l'utilisateur appui pendant 3s , la valeur est enregistrer dans mon EEPROM , lorsqu'il appui moins de 3s une led doit s'allumer. J'ai déjà crée les interruptions sur mes boutons, je gère déjà les 2 premiers boutons en interruption pour incrémenter ou décrémenter la valeur de consigne. Pour tester l'appui sur le bouton pendant 3s je pensais lancer un compteur lorsque l'utilisateur appui sur le bouton. Le compteur que j'utilise peut ensuite lui aussi générer une interruption lorsqu'il arrive en fin de comptage. Mais je ne vois pas ou remettre à zéro mon compteur , si l'utilisateur n'appui qu'1 s ou puis je remmettre mon compteur à 0 .
    Petite indication , je peux aussi choisir le mode de déclenchement de mes interruptions sur les boutons , je peux tester un front montant , ou descendant ou un changement détat .... bref , je suis sur que la solution est toute simple mais ça m'échappe , j'aurais besoin de vos lumières .

    En espérant avoir été assez clair

  2. #2
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Il suffit de générer une IT à chaque changement d’état. Dans la routine d’IT, tu lis un timer à chaque changement d’état. Et en faisant une simple différence, tu es capable de trouver le temps écoulé entre deux ITs.

  3. #3
    Membre éprouvé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 506
    Points : 1 005
    Points
    1 005
    Par défaut
    Bonjour,

    La solution fonctionne uniquement si il n'y a pas de débordement du timer.

    Moi, je fais autrement:
    J'ai un timer qui tombe toutes les x ms (souvent 5). Dans la fonction d'interruption de ce timer je lis l'état des touches et ceci me permet de les filtrer pour éviter les problèmes de rebond.

    le principe est le suivant:
    si l'état du bouton est stable pendant x appel de la fonction timer, je déclare que le bouton est en état stable.
    le temps de filtrage est donc de x*5ms

    A partir de la, toujours grace à mon timer, je gère une temporisation logicielle. c'est juste une variable qui est incrémentée à chaque interruption. Il suffit de mémoriser cette variable lorsque ton bouton est actif, et faire la différence avec la nouvelle valeur lorsque le bouton devient inactif. La différence donne donc le temps écoulé sur l'appui de la touche.

    La temposiration logicielle permet de gérer des temps beaucoup plus long (65535*5ms par exemple), ce qui est beaucoup plus difficile avec un timer hardware.

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par briand patrick
    La solution fonctionne uniquement si il n'y a pas de débordement du timer.

    Moi, je fais autrement:
    +1

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Bonjour,


    J'ai eut un soucis d'internet , je n'ai pas put répondre plus tôt, mais en effet la première solution qui m'était proposé ne me parraissait pas approprié car je doit tester un temps d'appui assez long , et puis il y a ce fameux problème de débordement du compteur , enfin dans mon cas le timer le timer ce décrémente à partir d'une valeur que je lui donne puis une fois arrivé à 0 , repart de la valeur rentré , donc si l'utilisateur fait le con ( ce qu'il faut tenir compte car ça arrive souvent , lol) et qu'il reste appuyé très longtemps , le programme par en sucette. La deuxième solution est vraiment intéressante. Je vais la déveloper , et je vous tiens au courant en cas de soucis , ce qui ne va surement pas tarder.

    Merci à vous

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Ta solution est interressante aussi puisqu'elle me libère du temps CPU. La première solution ne me permettait pas de réaliser une autre fonction lorsque je teste l'appui or lors de mon fonctionnement normal je dois afficher différent paramètre comme la température ou la vitesse de rotation du moteur . Ca ferait un peu con de proposer une solution ou lorsque j'appui plus rien ne s'affiche ! lol

Discussions similaires

  1. service windows et detection d'appui sur le bouton "del" du clavier?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 25
    Dernier message: 06/11/2007, 16h32
  2. [Lazarus] Attendre l'appui sur un bouton
    Par Brupio dans le forum Lazarus
    Réponses: 4
    Dernier message: 20/06/2007, 21h23
  3. [C#] Tester un click sur un bouton
    Par RideKick dans le forum Windows Forms
    Réponses: 12
    Dernier message: 22/09/2006, 16h59
  4. Intercepter l'appuie sur le bouton "Envoyer" d'Outlook
    Par Charette dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 14/10/2005, 14h24
  5. Comment détecter quand un utilisateur appuie sur le bouton Power ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 22/09/2005, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo