Остановка шагового двигателя кнопкой
- Войдите на сайт для отправки комментариев
Втр, 28/11/2017 - 14:34
Не понимаю, почему вот так не работает:
#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();
}
Так получается, как будто бы кнопка изначально была нажата.
Попробовал вот так написать:
ISR (TIMER1_COMPA_vect) { if(digitalRead(buttonPin)==1){ Stepper1.run(); } }Т.е. при нажатии кнопки, двигатель работает. Но код тоже выполняется некорректно.
После запуска, двигатель крутится очень медленно, а после нажатия кнопки, он ускоряется.
а в библиотеке есть функция stepper.stop(), в чём проблема её использовать.
Не совсем понял, причем тут она?!
Пффф. У меня на макетной плате свободного места нет. Зрение не очень. Не туда подключил землю. Стыдно, темя закрыта.