Остановка шагового двигателя кнопкой
- Войдите на сайт для отправки комментариев
Втр, 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(); }
Так получается, как будто бы кнопка изначально была нажата.
Попробовал вот так написать:
Т.е. при нажатии кнопки, двигатель работает. Но код тоже выполняется некорректно.
После запуска, двигатель крутится очень медленно, а после нажатия кнопки, он ускоряется.
а в библиотеке есть функция stepper.stop(), в чём проблема её использовать.
Не совсем понял, причем тут она?!
Пффф. У меня на макетной плате свободного места нет. Зрение не очень. Не туда подключил землю. Стыдно, темя закрыта.