Étape 4: Logiciel principe de fonctionnement
Nous savons que le modèle gris de AB codé répète chaque quatre positions donc si nous faisons le travaux de routine pour les transitions entre ces quatre positions ça va marcher pour tous les autres. Notez que dans l’un de quatre poste cycle, il y a quatre bords. Un front montant et un front descendant de l’entrée A ainsi que le B d’entrée. Le microprocesseur sera interrompu chaque fois qu’il y a une arête qui signifie que le microcontrôleur sera interrompu n’importe quel moment, que le bouton est tourné. En conséquence, l’ISR a besoin de comprendre sur la manière dont le bouton est tourné. Pour nous aider à trouver un moyen pour ce faire, nous nous tournons vers la forme d’onde pour une rotation dans le sens horaire.
Notez que quelque temps A a un avantage, sa nouvelle valeur est toujours différente de celle de B. Quand le bouton passe de la position 1 ou 2, une transition de logique-0 logique-1. B est toujours 0 pour cette transition et ne correspond pas à la nouvelle valeur d’a. Quand le bouton passe de la position 3 à 4, A possède un front descendant tandis que B reste logique-1. Notez encore une fois, que la nouvelle valeur de A et de B sont différentes. Droit maintenant, nous pouvons voir que n’importe quel moment Qu'a provoque l’interruption au cours de la rotation vers la droite, sa nouvelle valeur est différente de celle de B. Nous allons vérifier B pour voir ce qui se passe. B a un front montant lorsque le commutateur passe de la position 2 à 3. Ici, la nouvelle valeur de B est identique à A. Looking au dernier bord restant pour la rotation dans le sens horaire, B a un front descendant, passant de la position 4 à 5. (Position 5 est identique à la position 1.) La nouvelle valeur de B est identique à un ici aussi ! Nous pouvons maintenant faire certaines déductions ! Si A cause de l’interruption et la nouvelle valeur de A est différent de celui de B, la rotation a été dans le sens horaire. En outre, si B provoque l’interruption et la nouvelle valeur de B est le même que A, alors la rotation était dans le sens horaire.
Examinons rapidement le cas de la rotation dans le sens antihoraire. À l’instar de rotation vers la droite, rotation vers la gauche fera quatre interruptions dans un cycle : deux pour l’entrée A et deux pour l’entrée Input B. A a un front montant lorsque le bouton se déplace de la position 4 à 3 et un front descendant se déplaçant sur la position 2 à 1. Lorsque le bouton se déplace de la position 4 à 3, la nouvelle valeur de A est le même que la valeur de B. avis que lorsqu’une se déplace de la position 2-1 sa nouvelle valeur est la même que celle de B aussi bien. Maintenant, nous pouvons voir que lorsque A provoque l’interruption et sa nouvelle valeur correspond à celle de B la rotation était dans le sens antihoraire. Rapidement, nous regarderons entrée B pour tout vérifier. B provoquera une interruption lorsque le bouton se déplace de la position 5 (qui est le même que 1) à 4 et quand le bouton se déplace de position 3 à 2. Dans les deux cas, la nouvelle valeur de B ne correspond pas à la valeur existante de A, qui est l' opposé des cas lorsque B provoque l’interruption de la rotation dans le sens horaire. C’est une bonne nouvelle. Tout s’est retire comme il se doit.
En résumé, si un provoque l’interruption et sa nouvelle valeur ne correspond pas à la valeur de B ou si B provoque l’interruption et la nouvelle valeur de B correspond à la valeur de A nous savons il y avait des aiguilles. Nous pouvons vérifier les autres cas pour une rotation dans le logiciel ou on peut supposer que, parce que ce n’était pas le sens des aiguilles, c’était dans le sens antihoraire. Ma routine a simplement fait l’hypothèse.