управление шаговым двигателем с помощью ик пульта

Вопросы программирования в системе Ардуино
sliva80
Сообщения: 4
Зарегистрирован: 14 янв 2020, 00:48

управление шаговым двигателем с помощью ик пульта

Сообщение sliva80 » 14 янв 2020, 00:57

Доброго времени суток. Помогите с проектом. Надо при помощи пульта от телевизора шаговик крутился на определенное количество шагов.
вот наброски, но дальше я не понимаю

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

#include <TimerOne.h>
#include <StepDirDriver.h>
#include "IRremote.h"
int receiver = 6;
IRrecv irrecv(receiver);
decode_results results;


StepDirDriver myMotor(10, 11, 12);  // создаем объект типа StepDirDriver, задаем выводы для сигналов

unsigned int timeCounter; // счетчик времени
byte md;  // режим: 0 - вращение против ч.с., 1 - пауза, 2 - вращение против ч.с., 3 - пауза

void setup() {
     Serial.begin(9600);
  irrecv.enableIRIn();
   Serial.println("Enabled IRin");
  Timer1.initialize(250);  // инициализация таймера 1, период 250 мкс
  Timer1.attachInterrupt(timerInterrupt, 160);  // задаем обработчик прерываний
  myMotor.setMode(0, false);  // шаговый режим, без фиксации при остановке
  myMotor.setDivider(10);     // делитель частоты 10 (1 оборот в сек)
  md = 0; // начальный режим
  myMotor.step(300);  // начальный запуск

}

void loop() {
  if (irrecv.decode(&results))
  {  Serial.println(results.value, HEX);
    {
    switch(results.value)
    {
      case 0xBF9B64: 
     
                     if (md == 0)  {
    // 2 оборота по часовой стрелке
    if (myMotor.readSteps() == 0)
   
      md = 1;
      timeCounter = 0;
                   
    }
  }

 
    }
  }
}
 
//-------------------------------------- обработчик прерывания 0,25 мс
void  timerInterrupt() {
  myMotor.control(); // управвление двигателем
  timeCounter++; // счетчик времени
}


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

Re: управление шаговым двигателем с помощью ик пульта

Сообщение Эдуард » 14 янв 2020, 16:17

Здравствуйте!
Попробуйте.

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

#include <TimerOne.h>
#include <StepDirDriver.h>
#include "IRremote.h"
int receiver = 6;
IRrecv irrecv(receiver);
decode_results results;

StepDirDriver myMotor(10, 11, 12); // создаем объект типа StepDirDriver, задаем выводы для сигналов

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
  Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
  myMotor.setMode(0, false); // шаговый режим, без фиксации при остановке
  myMotor.setDivider(20); // делитель частоты 10 (1 оборот в сек)
  myMotor.step(300); // начальный запуск
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if( results.value == 0xBF9B64 ) myMotor.step(400);
  }
    irrecv.resume();
}

//-------------------------------------- обработчик прерывания 0,25 мс
void timerInterrupt() {
  myMotor.control(); // управвление двигателем
}

sliva80
Сообщения: 4
Зарегистрирован: 14 янв 2020, 00:48

Re: управление шаговым двигателем с помощью ик пульта

Сообщение sliva80 » 15 янв 2020, 01:29

СПАСИБО ЗА ОТВЕТ ОЧЕНЬ ПОМОГ!!! В будущем могу к вам обращаться по вопросам ?

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

Re: управление шаговым двигателем с помощью ик пульта

Сообщение Эдуард » 15 янв 2020, 16:13

Да, конечно, если это не займет много времени.

sliva80
Сообщения: 4
Зарегистрирован: 14 янв 2020, 00:48

Re: управление шаговым двигателем с помощью ик пульта

Сообщение sliva80 » 18 янв 2020, 01:46

по идее это код с не большой до работкой можно применить и к радио модулю на 433 мгц

sliva80
Сообщения: 4
Зарегистрирован: 14 янв 2020, 00:48

Re: управление шаговым двигателем с помощью ик пульта

Сообщение sliva80 » 20 янв 2020, 02:10

этот скетч рабочий

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

#include <TimerOne.h>
#include <StepDirDriver.h>
#include "IRremote.h"
int receiver = 6;
IRrecv irrecv(receiver);
decode_results results;

StepDirDriver myMotor(10, 11, 12); // создаем объект типа StepDirDriver, задаем выводы для сигналов

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  Serial.println("Enabled IRin");
  Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
  Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
  myMotor.setMode(0, false); // шаговый режим, без фиксации при остановке
  myMotor.setDivider(20); // делитель частоты 10 (1 оборот в сек)
  myMotor.step(0); // начальный запуск
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if( results.value == 0xBF9B64 ) myMotor.step(400);
    irrecv.resume();
  }
   
}

//-------------------------------------- обработчик прерывания 0,25 мс
void timerInterrupt() {
  myMotor.control(); // управвление двигателем
}

очень греется EasyDriver. чем это можно помочь чтобы не грелся


Вернуться в «Программирование Ардуино»

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

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