AccelStepper крутим шаговиком в две стороны

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

Всем здрасте!

Кто подскажет  как покрутить шаговиком в две стороны.

Начинает движение шаговик с нажатия кнопки одиночного. Останавливается при срабатывании концевика limitswitch. пока что могу определенное расстояние движения задавать. но необходимо чтобы шаговик прекращал движение при срабатывании концевика.

AccelStepper - библиотека

#include <AccelStepper.h>
 #define stepper_pin_step 4
#define stepper_pin_dir  5
 float steps_per_pulse = 2;
 AccelStepper stepper(AccelStepper::DRIVER, stepper_pin_step, stepper_pin_dir);
#define button1 6
#define button2 7
const int limitswitch1 = 8;
const int limitswitch2 = 9;
void setup(){
    stepper.setMaxSpeed(50000);
  stepper.setAcceleration(50000);
  stepper.setSpeed(50000);
     pinMode(button1, INPUT_PULLUP);
     pinMode(button2, INPUT_PULLUP);
	pinMode(limitswitch1, INPUT_PULLUP);
	pinMode(limitswitch2, INPUT_PULLUP);
}
void loop(){
if (digitalRead(button1) == LOW && digitalRead(button2) == HIGH){//red button
    stepper.runToNewPosition(10000);
    stepper.setCurrentPosition(0);
}
if (digitalRead(button1) == HIGH && digitalRead(button2) == LOW){//green button
      stepper.runToNewPosition(-10000);
    stepper.setCurrentPosition(0);
}
 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В 21 и 25 строках используется функция, которая блокирует код пока не выполнится. Там же прямо перед ней комментарий есть: "Blocks until the new target position is reached"

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

благодарю. сменю код отпишусь.

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

пока тестирую такой код




if(movehome){
    stepper.moveTo(positionhome); 
    positionhome++;
}
if(moveload){
    stepper.moveTo(positionhome); 
    positionhome--;
}

if (digitalRead(buttonhome) == LOW && digitalRead(buttonload) == HIGH){//red button
  movehome = true;
  moveload = false;
}
if (digitalRead(buttonhome) == HIGH && digitalRead(buttonload) == LOW){//green button
  movehome = false;
  moveload = true;
}

if (digitalRead(limitswitchhome) == LOW){
positionhome = 0; 
stepper.setCurrentPosition(0);
movehome = false; } 

if (digitalRead(limitswitchload) == HIGH){ 
positionhome = 0;
stepper.setCurrentPosition(0);
moveload = false; }