Encodeur rotatif

Bonjour
je voudrais que mon encodeur rotatif puisse aussi tourner a l'envers
avec ce code il tourne correctement dans le sens des aiguilles d'une montre reviens a zéro au bon moment mais si je le fait a l'envers après zéro il s'arrête et reprend à 3 n'importe ou
quelqu'un peux m'aider pour qu'il puisse passer de 0 a 57 et continuer dans ce sens aussi comme 54 51 48 45

#include "RotaryEncoder.h"
RotaryEncoder encoder(A2, A3); // (DT, CLK)

#define STEPS 3 // nombre d'étapes. ici nous voulons 4 etapes dont le 0
#define POSMIN 0 // compte pour 1 etape
#define POSMAX 59 // crans totaux avant retour a 0. attention c'est 60 si on compte le 0.

int lastPos, newPos;

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);

Serial.begin(9600); // ouvre le port série
encoder.setPosition(0 / STEPS); // initialise la position de l'encodeur pour qu'il commence toujours a 0 a la fin de la boucle
}

void loop() {
encoder.tick();
newPos = encoder.getPosition() * STEPS;

if (newPos < POSMIN) {
encoder.setPosition(POSMIN / 3 / STEPS);
newPos = POSMIN;}

else if (newPos > POSMAX) {
encoder.setPosition(POSMAX /60 / STEPS);
newPos = POSMAX;}

if (lastPos != newPos) {
Serial.println(newPos);
lastPos = newPos;
}

analogWrite(11, lastPos);

Bonjour et bienvenue,
Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et les appliquer.

En particulier, la mise en forme du code avec les balises code

Merci de mettre les balises de code


Moi j’utilise la bibliothèque encoder library

Bonjour ben74

Pour les balises, +1
image
ca rend le copier/coller plus pratique :wink:

Pour ton programme, changes cette partie:
passes de:

	if (newPos < POSMIN) 
	{
		encoder.setPosition(POSMIN / 3 / STEPS);
		newPos = POSMIN;
	}

à

if (newPos < POSMIN) 
{
	encoder.setPosition(POSMAX / STEPS);
	newPos = POSMAX;
}

Cordialement
jpbbricole

Ce n'est pas aussi simple il doit compter de 3 en 3.
Mais moi j'attends qu'il présente son code correctement.

Boinjour fdufnews

Oui, c'est aussi simple, l'incrément de 3 se faisant ici:
newPos = encoder.getPosition() * STEPS;

Ma solution est testé "en vrai".

Cordialement
jpbbricole

merci bcp
j'ai réussi avant ta réponse
j'ai mis

bool reverse = false;


  displayedPos = 1 * newPos;
   } else {
      displayedPos = newPos;   }

   if (lastPos != displayedPos) {
      Serial.println(displayedPos);
      lastPos = displayedPos;   }

   analogWrite(11, abs(lastPos));}
saisissez ou collez du code ici

et ca fonctionne parfaitement
j'essayerai avec le tiens
merci pour ton aide

Le code doit absolument être mis entre balise

oui désolé je viens de comprendre



     reverse = !reverse;
   } 

   int displayedPos;
   if (reverse) {
      displayedPos = 1 * newPos;
   } else {
      displayedPos = newPos;
   }

   if (lastPos != displayedPos) {
      Serial.println(displayedPos);
      lastPos = displayedPos;
   }

   analogWrite(11, abs(lastPos));
}
   
aisissez ou collez du code ici

celui du premier post aussi. Merci de nous aider à conserver le forum "propre" et lisible

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