Comme indiqué sur le thread qui parle du câblage, il est intéressant de mettre les codeurs sur des pins d'interruption.
Code pour gérer la lecture des encodeurs avec les interruptions sur les pins 2 et 3 et utilisation d'un timer
// Les includes : #include <TimerOne.h> // Pour le timer // Zone des #define #define PINENCODEURA 2 #define PINENCODEURB 3 // Zone des volatiles pour toutes les variables qui sont manipulées pendant des interruptions volatile int16_t count = 0; // comptage de tick d'encoder qui sera incrémenté sur interruption " On change " sur les interruptions 0 et 1 volatile int16_t vitesse = 0; // vitesse du moteur( en ticks / 0,1s ) volatile int32_t pos = 0; // position du moteur (en tick ) // à mettre dans le setup : pinMode(PINENCODEURA, INPUT_PULLUP); pinMode(PINENCODEURB, INPUT_PULLUP); // Timer Timer1.initialize(100000); // set a timer of length 100000 microseconds = 0.1 sec - or 10Hz Timer1.attachInterrupt( timerIsr ); // Interruption pour les codeurs attachInterrupt(0, counterA, CHANGE); // lorsqu'il y une modification sur le pin 2, on interrompt le programme pour enclencher le comptage attachInterrupt(1, counterB, CHANGE); // lorsqu'il y une modification sur le pin 3, on interrompt le programme pour enclencher le comptage // Fonctions d'interruptions void counterA() { byte state = PIND; // lit tout le port D d'un coup dont les pins 2 et 3, plus rapide que digitalRead... (((state >> PINENCODEURA) & 1) ^ ((state >> PINENCODEURB) & 1)) ? count++ : count--; // régler ++ et -- pour que faire avancer => + } void counterB() { byte state = PIND; (((state >> PINENCODEURA) & 1 ) ^ ((state >> PINENCODEURB) & 1)) ? count-- : count++; // régler ++ et -- pour que faire avancer => + } // Timer qui gère l'asservissement du moteur void timerIsr() { vitesse = count; pos += count; count = 0; // gestion du PID du moteur à ajouter ici }
Ce qui est intéressant c'est que ce même genre de code sera utilisé dans le projet cocotix mais avec quelques variations pour gérer deux moteurs, et c'est le genre de code utilisé pour le projet cocotix, sur le robot à chenille rick hunter et sur le robot robil 2WD
Si vous avez des questions sur le code proposé hésitez pas à les poser car après on passera à la mise en place du PID qui utilise ce code là =)