#ifndef MOTOR_CONTROLLER_H #define MOTOR_CONTROLLER_H #include "rotary_encoder_driver.h" #include "motor_driver.h" #include "p_controller.h" #include "digital_out.h" class State; class MotorController { private: static constexpr double DEFAULT_REFERENCE_RPM = 40.0; static constexpr double PWM_PER_PERCENT = 255.0 / 100.0; static const uint8_t LED_PIN = 5; // PB5 = D13 = LED_BUILTIN State* current_state; State& initialization_state; State& operational_state; State& stopped_state; RotaryEncoderDriver& encoder; MotorDriver& motor; P_controller& controller; Digital_out led; double reference_rpm; public: MotorController( RotaryEncoderDriver& encoder, MotorDriver& motor, P_controller& controller, State& initialization, State& operational, State& stopped ); // void set_states( // State* initialization, // State* operational, // State* stopped // ); void begin(); void update(); void command(char c); void transition_to(State& new_state); void to_initialization(); void to_operational(); void to_stopped(); bool fault_active(); void run_speed_controller(); void stop_motor(); void reset_speed_measurement(); void led_on(); void led_off(); }; #endif