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