|
- #include "include/controller.h"
-
- int controller_init(controller_t *control)
- {
- gpio_init(BTN0_PIN,BTN0_MODE);
- controller_home(control);
- control->flags = control->stepper_a->flags | control->stepper_b->flags;
- return 0;
- }
-
- int controller_loop(controller_t *control){
- path_node_t *setpoint = (path_node_t*)control->path->current.next;
- //printf("start controller loop\n");
- while(setpoint->list.next != 0x0){
- if ((setpoint->point.x > 127) | (setpoint->point.x < 0) | (setpoint->point.y > 127) | (setpoint->point.y < 0 ) ) {
- printf("Controller Error, x and y value are out of range x: %i, y: %i\n", setpoint->point.x, setpoint->point.y);
- return CONTROLLER_ERR;
- }
- if (setpoint->modus == PATH_MOVE) {
- controller_raise_marker(control);
- } else {
- controller_lower_marker(control);
- }
- //printf("Controller: look up x: %i, y: %i\n", setpoint->point.x, setpoint->point.y);
- int16_t angle1 = lookup_table_angle1[setpoint->point.y][setpoint->point.x];
- int16_t angle2 = lookup_table_angle2[setpoint->point.y][setpoint->point.x];
- //printf("Controller: next setpoint A: %i, B: %i\n",angle1, angle2);
- stepper_set_setpoint(control->stepper_a, angle1, control->time_step);
- stepper_set_setpoint(control->stepper_b, angle2, control->time_step);
- xtimer_usleep(10000);
- thread_flags_wait_all(control->flags);
- setpoint = path_next(setpoint);
- }
- printf("controller loop done\n");
- return CONTROLLER_OK;
- }
-
- int controller_home(controller_t *control){
- stepper_disable(control->stepper_b);
- stepper_disable(control->stepper_a);
- while(gpio_read(BTN0_PIN)!=0)
- {
- }
- xtimer_usleep(1000000);
- stepper_enable(control->stepper_b);
- stepper_set_direction(control->stepper_b,STEPPER_FORWARD);
- while(gpio_read(BTN0_PIN)!=0){
- stepper_step(control->stepper_b);
- xtimer_usleep(3000);
- }
- stepper_enable(control->stepper_a);
- stepper_set_direction(control->stepper_a,STEPPER_REVERSE);
- stepper_set_direction(control->stepper_b,STEPPER_REVERSE);
- uint32_t homing_b_steps = stepper_get_count(control->stepper_a,1.92);
- uint32_t homing_a_steps= stepper_get_count(control->stepper_b,0.75);
- uint32_t homing_combined = homing_b_steps - homing_a_steps;
- for(uint32_t i = 0; i < homing_combined; i++)
- {
- stepper_step(control->stepper_b);
- xtimer_usleep(1000);
- }
- stepper_enable(control->stepper_b);
- for(uint32_t i = 0; i < homing_a_steps; i++)
- {
- stepper_step(control->stepper_b);
- stepper_step(control->stepper_a);
- xtimer_usleep(1000);
- }
- control->stepper_a->step_count = stepper_get_count(control->stepper_a,GB_MATH_PI/2.0);
- control->stepper_b->step_count = 0;
- float angle_a;
- float angle_b;
- stepper_get_angle(control->stepper_a, &angle_a);
- stepper_get_angle(control->stepper_b, &angle_b);
- //printf("angle1: %f, angle2 %f\n", angle1, angle2);
- printf("Angle A: %f, B: %f\n", angle_a, angle_b);
- while(gpio_read(BTN0_PIN)!=0)
- {
- }
- xtimer_usleep(500000);
- return 0;
- }
-
- void controller_raise_marker(controller_t *control)
- {
- servo_set(control->servo,SERVO_RAISED);
- if(!control->lifted){
- xtimer_usleep(100000);
- control->lifted = true;
- }
- }
-
- void controller_lower_marker(controller_t *control)
- {
- servo_set(control->servo,SERVO_LOWERED);
- if(control->lifted){
- xtimer_usleep(100000);
- control->lifted = false;
- }
- }
|