QPIDfirmware  v0.1
Object oriented firmware for autonomous motor drivers with encoder based PID controller and flexible interface
Class Hierarchy

Go to the graphical class hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 123]
 CQPID_ObjectBase class for all QPID classes. Establishes interface for message processing and provides error reporting and logging functions
 CQPID_EncoderMostly abstract class for any kind of rotary encoder with optional filtering for jittery or error prone inputs
 CQPID_Encoder_ESP32Implements a quadrature encoder using ESP32's super cool hardware counters (yeah!). Based on the ESP32Encoder library by Kevin Harrington (madhephaestus)
 CQPID_Encoder_QuadratureStateMachineImplements a state machine quadrature encoder based on Matthias Hertel's rotary library
 CQPID_EndstopAbstract class for any kind of endstop switch
 CQPID_Endstop_DigitalImplements the simplest form of endstop using a digital input pin
 CQPID_Endstop_PinSharedAnalogImplements an endstop connected to an analog pin with a resistor network, thus sharing the pin with other switches
 CQPID_MotorDriverMostly abstract class that defines access methods and features for generic motors, to be used in a QPID unit
 CQPID_MotorDriver_AdafruitMotorShieldV2(derived from QPID_MotorDriver) Implement a QPID_MotorDriver for DC motors hooked up to Adafruit's MotorShield V2. Control of this shield is via I2C, so it might be less responsive than other motor drivers using direct pin control
 CQPID_MotorDriver_DRV8833Implement a QPID_MotorDriver for TI's DRV8833 chip based modules. (Watch out for fake modules with the HR8833 chip, they didn't work well for me.)
 CQPID_UnitA QPID_Unit objects bundles access to three hardware components, a motor driver, an position encoder, and end stop switches. Softwarewise it represents an advanced motor contoller that can autonomously perform various control tasks