xokkeist

Шаговые

May 19th, 2020
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.56 KB | None | 0 0
  1. #include <AccelStepper.h>
  2.  
  3. AccelStepper Stepper1(1, 13, 12); // Использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
  4. AccelStepper Stepper2(1, 11, 10); // Использует пин 10 и 11 для dir и step, 1 - режим "external driver" (A4988)
  5.  
  6. #define BTN1_PIN 5 // Концевик 1, НЕМА23.
  7. #define BTN2_PIN 6 // Концевик 2, маленького ШД.
  8. #define BTN3_PIN 7 // Программа 1
  9. #define BTN3_PIN 8 // Программа 2
  10.  
  11. #define MAX_SPEED 6000 // Максимальная скорость.
  12. #define MIN_SPEED 4000 // Минимальная скорость.
  13.  
  14. static byte step = 1; // Шаг.
  15. //long steeps1 = 100; // количество шагов на 5 мм хода. думаю это не надо
  16. //long steeps2 = -100; // количество шагов на 5 мм хода в обратную сторону
  17.  
  18.  
  19. void setup()
  20. {
  21. pinMode(BTN1_PIN, INPUT_PULLUP); //Инициализировали кнопку "Концевик 1" на 5 пине
  22. pinMode(BTN2_PIN, INPUT_PULLUP); //Инициализировали кнопку "Концевик 2" на 6 пине
  23. pinMode(BTN3_PIN, INPUT_PULLUP); //Инициализировали кнопку "Программа 1" на 7 пине
  24. pinMode(BTN3_PIN, INPUT_PULLUP); //Инициализировали кнопку "Программа 1" на 7 пине
  25. Stepper1.setMaxSpeed(MAX_SPEED);
  26. Stepper1.setSpeed(MAX_SPEED);
  27. Stepper1.setAcceleration(13000);
  28. Stepper2.setMaxSpeed(MAX_SPEED);
  29. Stepper2.setSpeed(MAX_SPEED);
  30. Stepper2.setAcceleration(13000);
  31. }
  32.  
  33. void loop()
  34. {
  35. switch (step) //сравнивает значение с оператором case, когда switch=case выполняется код в этом case
  36. {
  37. case 1:
  38. // На максимальной скорости вращаем шаговики по часовой до нажатия на концевики BTN1_PIN
  39. Stepper1.setMaxSpeed(MAX_SPEED);
  40. Stepper1.setSpeed(MAX_SPEED);
  41. if (digitalRead(BTN1_PIN)) //действие при нажатии "концевик 1"
  42. {
  43. Stepper1.setCurrentPosition(0); //если кнопка нажата (правда), то устанавливаем текущее положение как ноль и ждем нажатия на кнопку "программа 1"
  44. step++; //случается состояние step+1, т.е. переходим к CASE 2
  45. }
  46. else
  47. {
  48. if (Stepper1.distanceToGo() == 0) Stepper1.moveTo(Stepper1.currentPosition() + 1); //если кнопка еще не нажата (ложь), то двигаемся пока кнопка не будет нажата.
  49. Stepper1.run(); //запускаем двигатель и двигаемся пока не достигнем концевика 1
  50. } //как в этот же CASE добавить одновременное выполнение поиска дома для второго ЩД?
  51. break;
  52. case 2:
  53. // Ждем нажатия на кнопку BTN3_PIN - запуск программы 1
  54. if (digitalRead(BTN3_PIN)) step++; //если кнопка нажата, то переходим к CASE 3
  55. break;
  56. case 3:
  57. // На минимальной скорости вращаем шаговик против часовой до нажатия на концевик BTN2_PIN //нужно чтобы ехал не до концевика, а на определенное кол-во шагов и тормозил, пока прокрутится второй шаговый...
  58. Stepper1.setMaxSpeed(MIN_SPEED);
  59. Stepper1.setSpeed(MIN_SPEED);
  60. if (digitalRead(BTN2_PIN))
  61. {
  62. Stepper1.setCurrentPosition(0); //если кнопка нажата, это значит что доехали до нижнего концевика сбрасываем позицию в 0 и переходим к случаю 1 (CASE 1). делаем это после задержки в 5 секунд. Где-то здесь надо добавить начало вращение второго ШД. пока НЕМА стоит внизу.
  63. delay(5000);
  64. step++; //нема подождала, и пошла вверх. находясь вверху ждет команду.
  65. }
  66. else
  67. {
  68. if (Stepper1.distanceToGo() == 0) Stepper1.moveTo(Stepper1.currentPosition() + 1);
  69. Stepper1.run();
  70. }
  71. break;
  72. default: step = 1;
  73. }
  74. }
Add Comment
Please, Sign In to add comment