Как выйти из цикла ?

Вопросы об управлении шаговыми двигателями
vic310
Сообщения: 3
Зарегистрирован: 06 апр 2019, 14:44

Как выйти из цикла ?

Сообщение vic310 » 06 апр 2019, 15:02

Здравствуйте , подтолкните в нужную сторону,пожалуйста.Из примеров слепил под свои нужды и не могу заставить работать один раз по кнопке.

Код: Выделить всё

#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();


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Как выйти из цикла ?

Сообщение Эдуард » 06 апр 2019, 15:12

Здравствуйте!
А что должно выполняться по нажатию кнопки? Вся последовательность?

vic310
Сообщения: 3
Зарегистрирован: 06 апр 2019, 14:44

Re: Как выйти из цикла ?

Сообщение vic310 » 06 апр 2019, 15:21

Отработал против часовой,постоял,вернулся.Глушилка на аппаратуре диз.двигателя

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Как выйти из цикла ?

Сообщение Эдуард » 06 апр 2019, 15:36

Могу ошибиться. Попробуйте.

Код: Выделить всё

#include <Button.h>
#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, 40); // создание объекта для кнопки 1
unsigned int timeCounter; // счетчик времени
byte md=0; // режим: 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); // делитель частоты


}


void loop() {

  if (md == 0) {
    if ( button1.flagClick == true ) {
      myMotor.step(-50);
      md= 1;
    }
  }

  else if (md == 1) {
    // против часовой стрелки
    if (myMotor.readSteps() == 0) { md=2; timeCounter=0; }
  }
   
  else if (md == 2) {
    // пауза 1 сек
    if (timeCounter >= 1000) {
      md=0;
      myMotor.step(50);
      button1.flagClick=false;
      }
}


}
//-------------------------------------- обработчик прерывания 1 мс
void timerInterrupt() {
myMotor.control(); // управление двигателем
button1.scanState(); // вызов метода ожидания стабильного состояния для кнопки
timeCounter++; // счетчик времени
}

vic310
Сообщения: 3
Зарегистрирован: 06 апр 2019, 14:44

Re: Как выйти из цикла ?

Сообщение vic310 » 06 апр 2019, 15:50

Спасибо, работает, постараюсь разобраться как. Завтра буду пробовать вставить этот скетч в основную программу, там этот же моторчик управляется педалью газа. Примеры из Ваших уроков очень помогли. Не прощаюсь.


Вернуться в «Шаговые двигатели и драйверы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя