Accel Stepper

MorR2n
Offline
Зарегистрирован: 29.08.2016

Есть задача управлять шаговиком с кнопок.

Т.е. нажал одну кнопку- шаговик вращается в одном направлени пока кнопка нажата.

нажал другую- вращается в обратном направлении.

if ((digitalRead(move_forward) == HIGH)&&Stepper1.distanceToGo()==0)
{
  Stepper1.move(300);
  delay(100);
}
if ((digitalRead(move_backward) == HIGH)&&Stepper1.distanceToGo()==0)
{
  delay(100);
  Stepper1.move(300);
}

Stepper1.run();

 такой вариант плох тем, что при зажатой кнопке шаговик делает "микрошаги", а при ее отжатии резко доделывает все оставшиеся шаги.

если у кого-то есть описание процедур/функций AccelStepper- поделитесь, пожалуйста.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015
MorR2n
Offline
Зарегистрирован: 29.08.2016

к сожалению ты не понял вопроса.

нет необходимости считывать события с кнопки.

vvadim
Offline
Зарегистрирован: 23.05.2012
MorR2n
Offline
Зарегистрирован: 29.08.2016
BUTTON move_forward(30);                                              // кнопка включения/выключения наплавки
BUTTON move_backward(31);                                             // кнопка увеличения диаметра наплавки


void setup() {
  
  move_forward.read();
  
  move_backward.read();
  
  Stepper1.setMaxSpeed(3000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)

  Stepper1.setAcceleration(3000); //устанавливаем ускорение (шагов/секунду^2)

}

void loop() {

  if (move_forward.click_down )
  {
    Stepper1.move(400);
    delay(100);
  }
  if (move_backward.click_down )
  {
    delay(100);
    Stepper1.move(400);
  }

  Stepper1.run();

вообще не реагирует на нажатие кнопок

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

кнопочки читать нужно в лупе, а не в сетапе, обращение к .read() как бы обновляет показания кнопочек, перенесите из сетапа в луп

MorR2n
Offline
Зарегистрирован: 29.08.2016

Да, немногоим ранее я понял свою ошибку))

MorR2n
Offline
Зарегистрирован: 29.08.2016

Но вопрос в теме остается открытый. Как при нажатой кнопке заставить вращаться шаговик в том или ином направлении пока кнопка не будет отпущена? Т.е. условно, на бесконечное кол-во шагов.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Попробуйте так:
При нажатой кнопке ставим не Stepper1.move(400); те.400 шагов
а Stepper1.move(1); те.держим - идем отпустили - стоим
 
MorR2n
Offline
Зарегистрирован: 29.08.2016
void loop() {
 
  if (digitalRead(30)==HIGH)
  {
    Stepper1.move(0);
    Stepper1.run();
    Stepper1.moveTo(10000);
   
   while(digitalRead(30)!=LOW)
   {
     Stepper1.run();
   }
Stepper1.stop();
}

  if (digitalRead(31)==HIGH)
  {
    Stepper1.move(0);
    Stepper1.run();
    Stepper1.moveTo(0);
   
   while(digitalRead(31)!=LOW)
   {
     Stepper1.run();
   }
   Stepper1.stop(); 
  }

Нашел решение, немного корявое.
Может кому пригодиться.