Код: Выделить всё
#include <Button.h>
// программа управления шаговым двигателем с помощью библиотеки StepMotor
#include <TimerOne.h>
#include <StepMotor.h>
StepMotor myMotor(10, 11, 12, 13); // создаем объект типа StepMotor, задаем выводы для фаз
#define BUTTON_1_PIN 8 // кнопка 1 подключена к выводу 8
Button button1(BUTTON_1_PIN, 15); // создание объекта для кнопки 1
unsigned int timeCounter; // счетчик времени
byte md; // режим: 0 - вращение против ч.с., 1 - пауза, 2 - вращение против ч.с., 3 - пауза
void(* resetFunc) (void) = 0;
void setup() {
Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
myMotor.setMode(0, false ); // шаговый режим, без фиксации при остановке
myMotor.setDivider(25); // делитель частоты
}
// md= 0; // начальный режим
// myMotor.step(50); // начальный запуск
void loop() {
button1.scanState(); // вызов метода ожидания стабильного состояния для кнопки
if ( button1.flagClick == true )
// управление вращением двигателя
if (md == 0) {
// против часовой стрелки
if (myMotor.readSteps() == 0) { md=1; timeCounter=0; }
}
else if (md == 1) {
// пауза 1 сек
if (timeCounter >= 1000) { md=2; myMotor.step(50); }
}
else if (md == 2) {
// по часовой стрелке
if (myMotor.readSteps() == 0) { md=3; timeCounter=0; }
}
else {
// пауза 5 сек
if (timeCounter >= 5000) { md=0; myMotor.step(-50); }
}
}
//-------------------------------------- обработчик прерывания 1 мс
void timerInterrupt() {
myMotor.control(); // управление двигателем
timeCounter++; // счетчик времени
}
//void(* resetFunc) (void) = 0;
//resetFunc();