Clavier matricielle avec Encodeur rotatif

bonjour

Après plusieurs recherches j’ai assemblée 2 morceaux de code qui fonctionne individuellement clavier matricielle, encodeurs rotatif.
Le but est de maintenir appuyer un bouton parmi 16 câbler comme un clavier matricielle
pendant que celui-ci est appuyer j’agrémente ou désagrément une variable avec l’encodeur rotatif, je valide la valeur en appuyant sur l’encodeur rotatif
les deux rassembler le clavier matricielle fonctionne mais l’encodeur ne fonctionne plus
Pourriez-vous s’il vous plaît me dire ce qu’il ne va pas je suis débutant

merci de votre aide

piece jointe

Encodeur_Rotatif_Clavier_Matrixiel.ino (12.2 KB)

Salut Je ne sais pas de quelle carte il s'agit, mais si c'est un ATMEGA 328P, seules les pins 2 et 3 sont susceptibles de lever une interruption.

@+

Bonjour

C’est à UNO

Merci pour cette information effectivement quand j’ai déplacé les branchements de l’encodeur au pins 2 et 3 Celui-ci ré-marche j’agrémente ou désagrément de la variable (encoderPos) fonctionne mais ne fonctionne pas quand j’ appuyer sur un bouton merci de votre aide

Encodeur_Rotatif_Clavier_Matrixiel.ino (12.1 KB)

Bonjour, je ne suis pas un expert dans la programmation Arduino. A ta place j'utiliserais une interruption si appuis du bouton de l'encodeur pour la mise en mémoire de la variable. Il y a une bibliothèque pour l'encodeur, je l'ai utilisé avec un compte-tour pour ma fraiseuse (calcul de la vitesse suivant la sélection de la matière et du diamètre de la fraise, sélection par rotation ++ ou -- de l'encodeur et validation par appuis du bouton). Cdt. Marcus.

bonjour

marcus_95

j’appuie bien sur le bouton de l’encodeur Pour valider la valeur de l’encodeur

les boutons câbler comme un clavier matricielle servent à sélectionner une variable que je veux agrémente ou désagrément pendant qu'un boutons du clavier est appuyer

je suis débutant

merci

Ok si je comprend bien: tu appuis sur une touche du clavier matriciel tout en restant appuyé tu incrémente ou décrémente le compteur sur l'encodeur après tu appuis sur le bouton de l'encodeur pour valider la valeur de la variable. Jamais facile d'expliqué son montage.

Oui c’est exactement cela

merci

Bonjour, l'appuis sur le bouton doit déclencher une interruption. Je ne suis pas fan de attachInterrupt, a chacun son truc. Ne pas oublier la déclarations des variables en volatile pour être prisent en compte. Delay ne bloque pas une interruption, pour l'anti-rebont utile une boucle for. Si je me trompe pas. Cdt. Marcus.

PS c'est un super forum, j'y ai appris beaucoup de choses et les membres son top.

grancaba: Oui c’est exactement cela

merci

Bonsoir Sans que cela réponde complétement à ton problème Lorsque qu'il s'agit d'utiliser de l'encodeur en quadrature sur de la base arduino "basique" je regarde déjà vers la lib de PJRC

Pour faire court avec les codeurs A/B , il faut déjà savoir de quoi il s'agit (utilité)

entre : un codeur en entrée d'info faible débit ( faible nb pulses par tour , vitesse rotation faible ) , comme je suppose le tiens ou un un codeur accouplé derrière un équipage mécanique ( resolution importante par tour d'encodeur/ vitesse de rotation élevée )

vu du code , pour restitution d'info la logique reste la même (traiter la quadrature)

basiquement , pour de l'encodeur "entrée manuelle" , il est tres souvent possible/ suffisant de travailler simplement en "polling"

La lib évoquée permet justement de choisir la meilleure méthode entre - tout interruption (rapidité) - un peu d'interruption (compromis - pas d'interruption (polling)

Pour programmer cela « proprement » vous pouvez prendre l’approche d’une machine à état qui détecte quand un événement clavier ou encodeur arrive et décide quoi faire en fonction de cela.

cf mon tuto Programmation Automate fini / Machine à état pour copmprendre les concepts - tout débutant devrait maîtriser cela