No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

129 líneas
3.2KB

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define GB_MATH_IMPLEMENTATION
  4. #include "include/gb_math.h"
  5. #include "include/stepper.h"
  6. #include "include/path.h"
  7. #include "include/stepper_params.h"
  8. #include "include/sensor.h"
  9. #include "include/controller.h"
  10. #include "xtimer.h"
  11. #include "thread.h"
  12. #include "servo.h"
  13. #include "thread_flags.h"
  14. #define STACKSIZE THREAD_STACKSIZE_DEFAULT
  15. #define PRIO (THREAD_PRIORITY_MAIN - 1)
  16. static char stack[STACKSIZE];
  17. //static event_queue_t queue;
  18. void test_velocity(stepper_t *stepper, int steps){
  19. //float angle;
  20. stepper_set_direction(stepper, STEPPER_FORWARD);
  21. for ( int i = 0; i < steps; i++)
  22. {
  23. stepper_step(stepper);
  24. xtimer_usleep(400);
  25. //stepper_get_angle(stepper, &angle);
  26. //printf("Angle: %f | Steps: %i\n",angle,i);
  27. }
  28. printf("reverse\n");
  29. stepper_set_direction(stepper, STEPPER_REVERSE);
  30. for ( int i = 0; i < steps; i++)
  31. {
  32. stepper_step(stepper);
  33. xtimer_usleep(400);
  34. //stepper_get_angle(stepper, &angle);
  35. //printf("Angle: %f | Steps: %i\n",angle,i);
  36. }
  37. }
  38. typedef struct{
  39. event_t event;
  40. thread_t *thread;
  41. thread_flags_t flags;
  42. } test_t;
  43. static void *claiming_thread(void *arg)
  44. {
  45. event_queue_t *dqs = arg;
  46. event_queue_claim(dqs);
  47. event_loop(dqs);
  48. return NULL;
  49. }
  50. int main(void)
  51. {
  52. event_queue_t queue = EVENT_QUEUE_INIT_DETACHED;
  53. event_queue_init_detached(&queue);
  54. thread_create(stack, sizeof(stack), PRIO, 0, claiming_thread, &queue, "ct");
  55. thread_t* main_thread = thread_get_active();
  56. servo_t servo;
  57. servo_init(&servo, PWM_DEV(0), 2, 0, 1000);
  58. path_t path;
  59. path_init(&path);
  60. path_add_char(&path, 'S');
  61. path_add_char(&path, 'Q');
  62. path_add_char(&path, 'X');
  63. point_t point1= {.x = 72, .y = 89};
  64. path_add_vec(&path, &point1, PATH_MOVE);
  65. point_t point2= {.x = 72, .y = 89};
  66. path_add_vec(&path, &point2, PATH_MOVE);
  67. path_reverse(&path);
  68. path_reset(&path);
  69. // Set stepper A
  70. stepper_t stepper_a;
  71. stepper_a.queue = &queue;
  72. stepper_a.thread = main_thread;
  73. stepper_a.flags = 0x1;
  74. stepper_a.id = 'A';
  75. stepper_init(&stepper_a, &stepper_params[0]);
  76. // Set stepper B
  77. stepper_t stepper_b;
  78. stepper_b.queue = &queue;
  79. stepper_b.thread = main_thread;
  80. stepper_b.flags = 0x2;
  81. stepper_b.id = 'B';
  82. stepper_params_t stepper_params_b;
  83. memcpy(&stepper_params_b, &stepper_params[0], sizeof(stepper_params_t));
  84. stepper_params_b.dir_pin = GPIO_PIN(1,1);
  85. stepper_params_b.step_pin = GPIO_PIN(1,2);
  86. stepper_params_b.enable_pin = GPIO_PIN(1,12);
  87. stepper_init(&stepper_b, &stepper_params_b);
  88. controller_t controller_scara;
  89. controller_scara.stepper_a = &stepper_a;
  90. controller_scara.stepper_b = &stepper_b;
  91. controller_scara.servo = &servo;
  92. controller_scara.time_step = 4000;
  93. controller_scara.path = &path;
  94. controller_init(&controller_scara);
  95. controller_loop(&controller_scara);
  96. return 0;
  97. }
  98. int test_registers(stepper_t *dev) {
  99. xtimer_usleep(10000);
  100. stepper_read(dev, 0x0);
  101. xtimer_usleep(10000);
  102. stepper_read(dev, 0x6C);
  103. xtimer_usleep(10000);
  104. stepper_read(dev, 0x70);
  105. xtimer_usleep(10000);
  106. return STEPPER_OK;
  107. }