Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

215 linhas
5.5KB

  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 event_queue = EVENT_QUEUE_INIT_DETACHED;
  53. event_queue_init_detached(&event_queue);
  54. thread_create(stack, sizeof(stack), PRIO, 0, claiming_thread, &event_queue, "ct");
  55. event_t event1 = {.handler = set1};
  56. event_t event2 = {.handler = set1};
  57. thread_t *main_thread = thread_get_active();
  58. test_t test1 = {
  59. .event = event1,
  60. .thread = main_thread,
  61. .flags = 0x1
  62. };
  63. test_t test2 = {
  64. .event = event2,
  65. .thread = main_thread,
  66. .flags = 0x2
  67. };
  68. event_timeout_t timeout1;
  69. event_timeout_t timeout2;
  70. event_timeout_init(&timeout1, &event_queue, (event_t*)&test1);
  71. event_timeout_init(&timeout2, &event_queue, (event_t*)&test2);
  72. event_timeout_set(&timeout1, 1000000);
  73. event_timeout_set(&timeout2, 3000000);
  74. printf("Timeouts are set\n");
  75. thread_flags_wait_all(0x3);
  76. printf("Flags are set\n");
  77. }*/
  78. /*
  79. int main(void)
  80. {
  81. event_queue_init(&queue);
  82. stepper_t stepper_a;
  83. stepper_a.queue = &queue;
  84. stepper_init(&stepper_a, &stepper_params[0]);
  85. test_velocity(&stepper_a,800);
  86. //stepper_set_velocity(&stepper_a, 20);
  87. //event_loop(&queue);
  88. stepper_disable(&stepper_a);
  89. return 0;
  90. }
  91. */
  92. /*int main(void)
  93. {
  94. stepper_t stepper_a;
  95. stepper_t stepper_b;
  96. controller_t controller_scara;
  97. controller_scara.stepper_a = &stepper_a;
  98. controller_scara.stepper_b = &stepper_b;
  99. controller_scara.queue = &queue;
  100. controller_scara.time_step = 10000;
  101. controller_scara.arm_a = 0.070;
  102. controller_scara.arm_b = 0.055;
  103. gbVec2 setpoint = {
  104. .x = 0.015,
  105. .y = 0.085,
  106. };
  107. float anglea;
  108. float angleb;
  109. controller_inverse_kinematics(&controller_scara, &setpoint, &anglea, &angleb);
  110. printf("Angle A: %f, B: %f\n", anglea,angleb);
  111. }
  112. */
  113. int main(void)
  114. {
  115. //printf("Frequentie: %lu Hz\n");
  116. servo_t servo;
  117. int servo_ret = servo_init(&servo, PWM_DEV(0), 2, 0, 1000);
  118. printf("Servo_set: %i\n", servo_ret);
  119. servo_set(&servo,350);
  120. xtimer_usleep(1000000);
  121. servo_set(&servo,750);
  122. xtimer_usleep(1000000);
  123. return 0;
  124. event_queue_t queue = EVENT_QUEUE_INIT_DETACHED;
  125. event_queue_init_detached(&queue);
  126. thread_create(stack, sizeof(stack), PRIO, 0, claiming_thread, &queue, "ct");
  127. thread_t* main_thread = thread_get_active();
  128. path_t path;
  129. path_init(&path);
  130. //point_t point = {.x = 0, .y = 0};
  131. //path_add_vec(&path, &point, PATH_DRAW);
  132. //point_t point1= {.x = 72, .y = 90};
  133. //path_add_vec(&path, &point1, PATH_DRAW);
  134. path_add_char(&path, 'S');
  135. path_add_char(&path, 'Q');
  136. path_add_char(&path, 'X');
  137. point_t point1= {.x = 72, .y = 89};
  138. path_add_vec(&path, &point1, PATH_MOVE);
  139. point_t point2= {.x = 72, .y = 89};
  140. path_add_vec(&path, &point2, PATH_MOVE);
  141. //path_add_char(&path, '!');
  142. path_reverse(&path);
  143. path_reset(&path);
  144. // Set stepper A
  145. stepper_t stepper_a;
  146. stepper_a.queue = &queue;
  147. stepper_a.thread = main_thread;
  148. stepper_a.flags = 0x1;
  149. stepper_a.id = 'A';
  150. stepper_init(&stepper_a, &stepper_params[0]);
  151. // Set stepper B
  152. stepper_t stepper_b;
  153. stepper_b.queue = &queue;
  154. stepper_b.thread = main_thread;
  155. stepper_b.flags = 0x2;
  156. stepper_b.id = 'B';
  157. stepper_params_t stepper_params_b;
  158. memcpy(&stepper_params_b, &stepper_params[0], sizeof(stepper_params_t));
  159. stepper_params_b.dir_pin = GPIO_PIN(1,1);
  160. stepper_params_b.step_pin = GPIO_PIN(1,2);
  161. stepper_params_b.enable_pin = GPIO_PIN(1,12);
  162. stepper_init(&stepper_b, &stepper_params_b);
  163. controller_t controller_scara;
  164. controller_scara.stepper_a = &stepper_a;
  165. controller_scara.stepper_b = &stepper_b;
  166. controller_scara.time_step = 4000;
  167. controller_scara.path = &path;
  168. controller_init(&controller_scara);
  169. for (int i = 0; i < 50; i++){
  170. controller_loop(&controller_scara);
  171. }
  172. printf("einde\n");
  173. //event_loop(&queue);
  174. return 0;
  175. }
  176. int test_registers(stepper_t *dev) {
  177. xtimer_usleep(10000);
  178. stepper_read(dev, 0x0);
  179. xtimer_usleep(10000);
  180. stepper_read(dev, 0x6C);
  181. xtimer_usleep(10000);
  182. stepper_read(dev, 0x70);
  183. xtimer_usleep(10000);
  184. return STEPPER_OK;
  185. }