EncoderPIO

pio
pio/EncoderPIO.h
pio driver stable

Méthodes publiques

Méthode Description Paramètres Retour
EncoderPIO()
EncoderPIO(uint8_t pinA, uint8_t pinB, PIO pio = pio0, uint8_t smIndex = 0);
// /* // * @param pinA : broche signal A de l'encodeur // * @param pinB : broche signal B de l'encodeur // * @param pio : PIO0 ou PIO1 (défaut : pio0) // * @param smIndex : state machine (0 à 3, défaut : 0)
begin()
begin();
// /* // * Initialise le PIO et démarre la state machine. // * @return true si succès // */ true
update()
update();
// /* // * Met à jour le compteur et la direction depuis le FIFO PIO. // * À appeler dans loop(). // */
getTurns()
getTurns() const {
// /* // * @return nombre de tours complets (CPR impulsions = 1 tour) // */ nombre
getCount()
getCount() const {
// /* // * @return compteur brut d'impulsions // */ compteur
getDirection()
getDirection() const {
// /* // * @return direction du dernier mouvement // */ direction
getSpeed()
getSpeed() const {
// /* // * @return vitesse en impulsions/seconde // */ vitesse
reset()
reset();
// /* // * Remet le compteur et les tours à zéro. // */
setCPR()
setCPR(uint16_t cpr) {
// /* // * @param cpr : impulsions par tour (défaut : 20) // */

Variables membres


            return _turns;
return _count;
return _direction;
return _speed;
uint8_t   _pinA;
uint8_t   _pinB;
PIO       _pio;
uint8_t   _smIndex;
int       _pioOffset;
int32_t   _count;
int32_t   _turns;
uint16_t  _cpr;
Direction _direction;
float     _speed;
int32_t   _lastCount;
uint32_t  _lastTime;
uint8_t   _lastState;

                    

Code source


        // #pragma once
// #include <Arduino.h>
// #include <hardware/pio.h>
// #include <hardware/clocks.h>
// #include "Encoder.pio"

// namespace crepp::pio {

// /*
//  * =========================
//  * Driver Encodeur Quadrature PIO
//  * -------------------------
//  * Utilise le PIO du RP2040 pour compter
//  * les impulsions et détecter la direction
//  * sans charge CPU.
//  *
//  * @badge driver
//  * @badge stable
//  * =========================
//  */
// class EncoderPIO {
// public:
//     enum class Direction {
//         NONE         = 0,
//         CLOCKWISE    = 1,
//         COUNTER_CLOCKWISE = -1
//     };

//     /*
//      * @param pinA     : broche signal A de l'encodeur
//      * @param pinB     : broche signal B de l'encodeur
//      * @param pio      : PIO0 ou PIO1 (défaut : pio0)
//      * @param smIndex  : state machine (0 à 3, défaut : 0)
//      */
//     EncoderPIO(uint8_t pinA, uint8_t pinB, PIO pio = pio0, uint8_t smIndex = 0);

//     /*
//      * Initialise le PIO et démarre la state machine.
//      * @return true si succès
//      */
//     bool begin();

//     /*
//      * Met à jour le compteur et la direction depuis le FIFO PIO.
//      * À appeler dans loop().
//      */
//     void update();

//     /*
//      * @return nombre de tours complets (CPR impulsions = 1 tour)
//      */
//     int32_t getTurns() const   { return _turns; }

//     /*
//      * @return compteur brut d'impulsions
//      */
//     int32_t getCount() const   { return _count; }

//     /*
//      * @return direction du dernier mouvement
//      */
//     Direction getDirection() const { return _direction; }

//     /*
//      * @return vitesse en impulsions/seconde
//      */
//     float getSpeed() const     { return _speed; }

//     /*
//      * Remet le compteur et les tours à zéro.
//      */
//     void reset();

//     /*
//      * @param cpr : impulsions par tour (défaut : 20)
//      */
//     void setCPR(uint16_t cpr)  { _cpr = cpr; }

// private:
//     uint8_t   _pinA;
//     uint8_t   _pinB;
//     PIO       _pio;
//     uint8_t   _smIndex;
//     int       _pioOffset;

//     int32_t   _count;
//     int32_t   _turns;
//     uint16_t  _cpr;        ///< Counts Per Revolution
//     Direction _direction;

//     float     _speed;
//     int32_t   _lastCount;
//     uint32_t  _lastTime;

//     uint8_t   _lastState;  ///< Dernier état {B, A} pour décodage
// };

// } // namespace crepp::pio