Как заставить шаговый двигатель вращаться на 360 градусов с течением времени?

У меня есть этот код для управления моим шаговым двигателем в Javascript с помощью Espruino.

function motorStep(mySteps){
  var stepperPins = [C6,C7,C8,C9]; // Change these to your pins (digital output)
  var stepBits = [0b0110,0b0101,0b1001,0b1010];

  if (mySteps<0) //reverse
  {
    stepBits.reverse();
    mySteps = -mySteps;
  }

  for (i=0; i< mySteps ; i++)
  {
    digitalWrite(stepperPins, stepBits[i % stepBits.length]);
    //then we need to wait before sending next command
    wait(1); //some motors might need a longer delay
  }

}

function wait(ms){
  var d = new Date();
  var d2 = null;
  do { d2 = new Date(); }
  while(d2-d < ms);
}

Я сделал функцию setWatch, чтобы искать нажатие кнопки, чтобы затем запустить функцию

setWatch(function () {
action goes here
}, BTN2, {
 repeat : true,
 edge : "rising"
});

Я ищу шаговый двигатель, чтобы сделать полный оборот за 6 минут. Для полного шага на 360 оборотов шаговый двигатель - это 350 шагов, так что между каждым шагом будет ждать 1030 мс (360000/350?). Поэтому, когда я нажимаю BTN2, шаговый двигатель вращается на 360 градусов в течение 6 минут.

Я не уверен, как объединить два, кто-нибудь из вас может мне помочь?

Если я сделаю это:

setWatch(function () {
motorStep(350);
}, BTN2, {
 repeat : true,
 edge : "rising"
});

Как бы я кодировал время, необходимое для выполнения полного действия?

1 ответ

Измените свою функцию motorstep, чтобы получить дополнительный аргумент:

function motorStep(mySteps, delay){
  var stepperPins = [C6,C7,C8,C9]; // Change these to your pins (digital output)
  var stepBits = [0b0110,0b0101,0b1001,0b1010];

  if (mySteps<0) //reverse
  {
    stepBits.reverse();
    mySteps = -mySteps;
  }

  for (i=0; i< mySteps ; i++)
  {
    digitalWrite(stepperPins, stepBits[i % stepBits.length]);
    //then we need to wait before sending next command
    wait(delay); //some motors might need a longer delay
  }

}

и назовите это следующим образом:

motorStep(350, 360000L/350) ;

У меня нет espruino под рукой, поэтому я могу только надеяться, что это работает.

Другие вопросы по тегам