Остановка шагового двигателя кнопкой

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не понимаю, почему вот так не работает:

#include <AccelStepper.h>

AccelStepper Stepper1(1,25,24); 

int col = 0;
const int buttonPin = 33;

int dir = -1;

void setup() {
  pinMode(buttonPin, INPUT);
  Stepper1.setAcceleration(2000);

    // Инициализировать TIMER1
  noInterrupts (); // отключить все прерывания
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 125; // сравнить регистр 16 МГц / 256/500 Гц (2ms=125)
  TCCR1B |= (1 << WGM12); // Режим СТС
  TCCR1B |= (1 << CS12); // 256 делитель
  TIMSK1 |= (1 << OCIE1A ); // включить таймер сравнить прерываний
  interrupts(); // включить все прерывания

  
}

ISR (TIMER1_COMPA_vect){

  if(digitalRead(buttonPin)==1){
    col=1;
  }
  if(col==0){
    Stepper1.run();
  }

}

void loop() {
    Stepper1.move(100*dir);
}

Вот этот кусок кода:

  if(digitalRead(buttonPin)==1){
    col=1;
  }
  if(col==0){
    Stepper1.run();
  }

Так получается, как будто бы кнопка изначально была нажата.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Попробовал вот так написать:

ISR (TIMER1_COMPA_vect)
{

  if(digitalRead(buttonPin)==1){
    Stepper1.run();
  }
  

}

Т.е. при нажатии кнопки, двигатель работает. Но код тоже выполняется некорректно.

После запуска, двигатель крутится очень медленно, а после нажатия кнопки, он ускоряется.

vvadim
Offline
Зарегистрирован: 23.05.2012

а в библиотеке есть функция stepper.stop(), в чём проблема её использовать.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Не совсем понял, причем тут она?!

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Пффф. У меня на макетной плате свободного места нет. Зрение не очень. Не туда подключил землю. Стыдно, темя закрыта.