Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <AccelStepper.h>
- AccelStepper Stepper1(1, 13, 12); // Использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
- AccelStepper Stepper2(1, 11, 10); // Использует пин 10 и 11 для dir и step, 1 - режим "external driver" (A4988)
- #define BTN1_PIN 5 // Концевик 1, НЕМА23.
- #define BTN2_PIN 6 // Концевик 2, маленького ШД.
- #define BTN3_PIN 7 // Программа 1
- #define BTN3_PIN 8 // Программа 2
- #define MAX_SPEED 6000 // Максимальная скорость.
- #define MIN_SPEED 4000 // Минимальная скорость.
- static byte step = 1; // Шаг.
- //long steeps1 = 100; // количество шагов на 5 мм хода. думаю это не надо
- //long steeps2 = -100; // количество шагов на 5 мм хода в обратную сторону
- void setup()
- {
- pinMode(BTN1_PIN, INPUT_PULLUP); //Инициализировали кнопку "Концевик 1" на 5 пине
- pinMode(BTN2_PIN, INPUT_PULLUP); //Инициализировали кнопку "Концевик 2" на 6 пине
- pinMode(BTN3_PIN, INPUT_PULLUP); //Инициализировали кнопку "Программа 1" на 7 пине
- pinMode(BTN3_PIN, INPUT_PULLUP); //Инициализировали кнопку "Программа 1" на 7 пине
- Stepper1.setMaxSpeed(MAX_SPEED);
- Stepper1.setSpeed(MAX_SPEED);
- Stepper1.setAcceleration(13000);
- Stepper2.setMaxSpeed(MAX_SPEED);
- Stepper2.setSpeed(MAX_SPEED);
- Stepper2.setAcceleration(13000);
- }
- void loop()
- {
- switch (step) //сравнивает значение с оператором case, когда switch=case выполняется код в этом case
- {
- case 1:
- // На максимальной скорости вращаем шаговики по часовой до нажатия на концевики BTN1_PIN
- Stepper1.setMaxSpeed(MAX_SPEED);
- Stepper1.setSpeed(MAX_SPEED);
- if (digitalRead(BTN1_PIN)) //действие при нажатии "концевик 1"
- {
- Stepper1.setCurrentPosition(0); //если кнопка нажата (правда), то устанавливаем текущее положение как ноль и ждем нажатия на кнопку "программа 1"
- step++; //случается состояние step+1, т.е. переходим к CASE 2
- }
- else
- {
- if (Stepper1.distanceToGo() == 0) Stepper1.moveTo(Stepper1.currentPosition() + 1); //если кнопка еще не нажата (ложь), то двигаемся пока кнопка не будет нажата.
- Stepper1.run(); //запускаем двигатель и двигаемся пока не достигнем концевика 1
- } //как в этот же CASE добавить одновременное выполнение поиска дома для второго ЩД?
- break;
- case 2:
- // Ждем нажатия на кнопку BTN3_PIN - запуск программы 1
- if (digitalRead(BTN3_PIN)) step++; //если кнопка нажата, то переходим к CASE 3
- break;
- case 3:
- // На минимальной скорости вращаем шаговик против часовой до нажатия на концевик BTN2_PIN //нужно чтобы ехал не до концевика, а на определенное кол-во шагов и тормозил, пока прокрутится второй шаговый...
- Stepper1.setMaxSpeed(MIN_SPEED);
- Stepper1.setSpeed(MIN_SPEED);
- if (digitalRead(BTN2_PIN))
- {
- Stepper1.setCurrentPosition(0); //если кнопка нажата, это значит что доехали до нижнего концевика сбрасываем позицию в 0 и переходим к случаю 1 (CASE 1). делаем это после задержки в 5 секунд. Где-то здесь надо добавить начало вращение второго ШД. пока НЕМА стоит внизу.
- delay(5000);
- step++; //нема подождала, и пошла вверх. находясь вверху ждет команду.
- }
- else
- {
- if (Stepper1.distanceToGo() == 0) Stepper1.moveTo(Stepper1.currentPosition() + 1);
- Stepper1.run();
- }
- break;
- default: step = 1;
- }
- }
Add Comment
Please, Sign In to add comment