ben74
April 30, 2023, 2:51pm
1
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.
QUELQUES RÈGLES SIMPLES À LIRE IMPÉRATIVEMENT AVANT DE POSTER
Elles faciliteront la vie de tous et contribueront à rendre votre expérience la plus enrichissante possible.
Bienvenue !!!
Vous rejoignez une communauté : nous incitons très fortement les nouveaux arrivants sur la partie francophone à rédiger dans ce fil de discussion une rapide présentation personnelle.
Aidez nous à vous aider : les réponses qui sont faites sur le forum francophone arduino sont majorit…
En particulier, la mise en forme du code avec les balises code
J-M-L
April 30, 2023, 9:42pm
3
Merci de mettre les balises de code
Moi j’utilise la bibliothèque encoder library
Bonjour ben74
Pour les balises, +1
ca rend le copier/coller plus pratique
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
ben74
May 1, 2023, 12:43pm
7
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
ben74
May 1, 2023, 12:51pm
9
oui désolé je viens de comprendre
ben74
May 1, 2023, 12:53pm
10
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
J-M-L
May 1, 2023, 12:56pm
11
celui du premier post aussi. Merci de nous aider à conserver le forum "propre" et lisible
system
Closed
October 28, 2023, 12:57pm
12
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.