ZigZag:
Bonsoir,Je trouve ta signature pas fausse du tout.
Parfois l'imagination permet de compenser le savoir quand il nous en manque.
Mais lá avec l'encodeur tu coince.
Donc compense ton imagination par le savoir, consulte les informations concernant cet encodeur cela te permettra de cerner son mode de fonctionnement
Merci,
j'ai lu tout ce qu'il y avait à lire sur les encodeurs rotatif, et j'ai déjà essayé plein de code différents que j'ai greffé à celui que j'ai joint sur ce poste, mais sans aucun résultat.
c'est pourquoi, je vient ici sur ce forum en quête de savoir, auprès de vous tous, les grand maître pour qui le code arduino n'a aucun secret. ![]()
j'ai pensé utiliser le code ci dessous, en l'adaptant bien sur à mon code, mais ça ne fonctionne pas.
Arduino
int val;
int PinCLK = 4;
int PinDT = 5;
int PinSW = 0;
static long encoderPos = -1; // Au 1er démarrage, il passera à 0
int PinCLKLast = LOW;
int nbPas = 20; // Résolution de l'encodeur
int n = LOW;
void setup() {
pinMode (PinCLK,INPUT);
pinMode (PinDT,INPUT);
pinMode (PinSW,INPUT);
Serial.begin (9600);
}
void loop() {
if (!(digitalRead(PinSW))) { // Reset la position si on appui sur le potentiomètre
encoderPos = 0;
//Serial.println("Reset position");
}
n = digitalRead(PinCLK);
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) {
Serial.print("Sens antihoraire, position ");
encoderPos--;
if ( encoderPos < 0 ) {
encoderPos = nbPas;
}
} else {
Serial.print("Sens horaire, position ");
encoderPos++;
if ( encoderPos > ( nbPas - 1 ) ) {
encoderPos = 0;
}
}
Serial.print (encoderPos); Serial.print(", angle "); Serial.println( abs ( encoderPos * ( 360 / nbPas ) ) );
//Serial.print ("/");
}
PinCLKLast = n;
}