Advertisement
Guest User

test2

a guest
Jul 28th, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include <math.h>
  2.  
  3. #define Y_STEP_PIN 60
  4. #define Y_DIR_PIN 61
  5. #define Y_ENABLE_PIN 56
  6. #define Y_MIN_PIN 14
  7. #define Y_MAX_PIN 15
  8.  
  9. static const uint8_t MOTOR_STEP_PREDELIMITER = 16;
  10. static const float MOTOR_DEGREE_PER_STEP = 1.8f;
  11. static const uint8_t DRIVER_PIN_DELAY = 250;
  12.  
  13. void setup() {
  14. pinMode(Y_DIR_PIN, OUTPUT);
  15. digitalWrite(Y_DIR_PIN, HIGH);
  16.  
  17. pinMode(Y_ENABLE_PIN, OUTPUT);
  18. digitalWrite(Y_ENABLE_PIN, LOW);
  19.  
  20. pinMode(Y_STEP_PIN, OUTPUT);
  21. pinMode(Y_MIN_PIN, INPUT_PULLUP);
  22. pinMode(Y_MAX_PIN, INPUT_PULLUP);
  23.  
  24. Serial.begin(115200);
  25. }
  26.  
  27. void motor_step()
  28. {
  29. digitalWrite(Y_STEP_PIN, HIGH);
  30. delayMicroseconds(DRIVER_PIN_DELAY);
  31. digitalWrite(Y_STEP_PIN, LOW);
  32. delayMicroseconds(DRIVER_PIN_DELAY);
  33. }
  34.  
  35. void rotate_on_click()
  36. {
  37. static size_t step_counter = 0;
  38. if (digitalRead(Y_MIN_PIN) || digitalRead(Y_MAX_PIN)) {
  39. motor_step();
  40. step_counter++;
  41.  
  42. if ((step_counter % 5) == 0) {
  43. Serial.print(step_counter);
  44. Serial.print("\n");
  45. }
  46. }
  47. }
  48.  
  49. size_t degree2steps(size_t degree)
  50. {
  51. return round((float)(MOTOR_STEP_PREDELIMITER * degree) / MOTOR_DEGREE_PER_STEP);
  52. }
  53.  
  54. void rotate_N_degree_on_click(size_t target_angle)
  55. {
  56. if (digitalRead(Y_MIN_PIN) || digitalRead(Y_MAX_PIN)) {
  57. const size_t steps = degree2steps(target_angle);
  58. for (size_t step_counter = 0; step_counter < steps; step_counter++) {
  59. motor_step();
  60. }
  61. }
  62. }
  63.  
  64. void loop ()
  65. {
  66. rotate_on_click();
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement