#ifndef CONTROLLER_H #define CONTROLLER_H #include "event.h" #include "gb_math.h" #include "stepper.h" #include "servo.h" #include "path.h" #include "angle.h" #ifndef SERVO_RAISED #define SERVO_RAISED (500U) #endif #ifndef SERVO_LOWERED #define SERVO_LOWERED (750U) #endif #define VEL_DIV 1024 #ifdef __cplusplus extern "C" { #endif enum { CONTROLLER_OK = 0, CONTROLLER_ERR = -1, CONTROLLER_NO_PATH = -2, CONTROLLER_STATISFIED = -3, }; typedef struct { stepper_t *stepper_a; stepper_t *stepper_b; uint32_t time_step; servo_t *servo; bool lifted; path_t *path; thread_flags_t flags; } controller_t; /** * @brief Initialize controller * * @param[out] control struct describing the controller */ int controller_init(controller_t *control); /** * @brief execute main loop of the controller * * @param[in] control struct describing the controller */ int controller_loop(controller_t *control); /** * @brief home both stepper motors * * @param[in] control struct describing the controller */ int controller_home(controller_t *control); /** * @brief lower the marker position * * @param[in] control struct describing the controller */ void controller_lower_marker(controller_t *control); /** * @brief raise the marker position * * @param[in] control struct describing the controller */ void controller_raise_marker(controller_t *control); #ifdef __cplusplus } #endif #endif /* CONTROLLER_H */