Страница 1 из 1

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

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

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

#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++; // счетчик времени
}

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(); // управвление двигателем
}

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

Добавлено: 15 янв 2020, 01:29
sliva80
СПАСИБО ЗА ОТВЕТ ОЧЕНЬ ПОМОГ!!! В будущем могу к вам обращаться по вопросам ?

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

Добавлено: 15 янв 2020, 16:13
Эдуард
Да, конечно, если это не займет много времени.

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

Добавлено: 18 янв 2020, 01:46
sliva80
по идее это код с не большой до работкой можно применить и к радио модулю на 433 мгц

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

Добавлено: 20 янв 2020, 02:10
sliva80
этот скетч рабочий

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

#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. чем это можно помочь чтобы не грелся