Encodeur rotatif - problème

Bonjour,

Je voulais afficher les positions du potentiomètre grâce à un code trouvé sur internet le problème c'est que quand j'augmente de 1 ça diminue parfois et inversement.
Exemple :
image

Voici mon code :

//Parameters
const int clkPin 	= 7;
const int dtPin 	= 8;
const int swPin 	= 4;

//Variables
int rotVal 	= 0;
bool clkState 	= LOW;
bool clkLast 	= HIGH;
bool swState 	= HIGH;
bool swLast 	= HIGH;

void setup() {
 	//Init Serial USB
 	Serial.begin(9600);
 	Serial.println(F("Initialize System"));
 	//Init Rotary
 	pinMode(clkPin,INPUT);
 	pinMode(dtPin,INPUT);
 	pinMode(swPin,INPUT_PULLUP);
}

void loop() {
 	readRotary();
}

void readRotary( ) { /* function readRotary */
 	////Test routine for Rotary
 	// gestion position
 	clkState = digitalRead(clkPin);
 	if ((clkLast == LOW) && (clkState == HIGH)) {//rotary moving
 			Serial.print("Rotary position ");
 			if (digitalRead(dtPin) == HIGH) {
 					rotVal = rotVal - 1;
 					if ( rotVal < 0 ) {
 							rotVal = 0;
 					}
 			}
 			else {
 					rotVal++;
 					if ( rotVal > 10 ) {
 							rotVal = 10;
 					}
 			}
 			Serial.println(rotVal);
 			delay(200);
 	}
 	clkLast = clkState;

 	//gestion bouton
 	swState = digitalRead(swPin);
 	if (swState == LOW && swLast == HIGH) {
 			Serial.println("Rotary pressed");
 			delay(100);//debounce
 	}
 	swLast = swState;
}

Un tout grand merci d'avance pour vos réponses !

Tu as des résistances de pullup externes?

Je ne pense pas mais je suis pas sûr de savoir ce que c'est.

Prenez la bibliothèque encoder library

Je pose a question parce que je vois dans ton setup() que tu configures l'entrée du switch en INPUT_PULLUP et les 2 entrées de l'encodeur en INPUT seulement.

Ceci donne à penser que tu utilises des résistances externes sur les entrées de l'encodeur. Dans le même temps les erreurs dont tu parles me font penser au comportement d'entrées en l'air.

Donc si tu as des résistances externes sur les entrées de l'encodeur le problème est ailleurs et si tu n'en as pas je conseillerais de faire.

Autrement, il y a des librairies qui font très bien la gestion d'un encodeur.
http://www.pjrc.com/teensy/td_libs_Encoder.html

1 Like

Merci beaucoup pour vos réponses. J'ai trouvé la solution.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.