1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #pragma once
- #include "AP_WheelEncoder.h"
- #include "WheelEncoder_Backend.h"
- #include <Filter/Filter.h>
- #include <AP_Math/AP_Math.h>
- class AP_WheelEncoder_Quadrature : public AP_WheelEncoder_Backend
- {
- public:
-
- AP_WheelEncoder_Quadrature(AP_WheelEncoder &frontend, uint8_t instance, AP_WheelEncoder::WheelEncoder_State &state);
-
- void update(void) override;
- private:
-
- void update_pin(uint8_t &pin, uint8_t new_pin, uint8_t &pin_value);
-
- void irq_handler(uint8_t pin, bool pin_value, uint32_t timestamp);
-
- static uint8_t pin_ab_to_phase(bool pin_a, bool pin_b);
-
- void update_phase_and_error_count();
- struct IrqState {
- uint8_t phase;
- int32_t distance_count;
- uint32_t total_count;
- uint32_t error_count;
- uint32_t last_reading_ms;
- } irq_state;
-
- uint8_t last_pin_a = -1;
- uint8_t last_pin_b = -1;
- uint8_t last_pin_a_value;
- uint8_t last_pin_b_value;
- };
|