Несколько двигателей с digitalWriteFast - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь использовать библиотеку digitalWriteFast для управления несколькими двигателями и кодировщиками. Библиотека работает только с выводами, определенными как const int. Минимальный пример, над которым я работаю, выглядит так:

// digitalWriteFast from:
// https://github.com/NicksonYap/digitalWriteFast
#include <digitalWriteFast.h>

// setup for motors
const int m_1[] = {A0, A4, 23, 24};
const int m_2[] = {A1, A5, 22, 25};

void motor_setup(const int id) {
  pinModeFast(m_1[id], OUTPUT);
  digitalWriteFast(m_1[id], HIGH);

  pinModeFast(m_2[id], OUTPUT);
  digitalWriteFast(m_2[id], HIGH);
}

void motor_forwards(const int id) {
  digitalWriteFast(m_1[id], LOW);
  digitalWriteFast(m_2[id], HIGH);
}

void setup() {
  motor_setup(0);
  //motor_setup(1);
}

void loop() {
  motor_forwards(0);
  //motor_forwards(1);
}

Код компилируется только с одним двигателем. Если вы раскомментируете строки //motor_setup(1); и //motor_forwards(1);, возникает ошибка:

Call to 'NonConstantUsed' declared with attribute error:

Сначала я попытался использовать классы, но не могу передать const int экземплярам. Есть идеи на эту тему?

1 Ответ

0 голосов
/ 24 января 2019

digitalWriteFast необходимо передать константу времени компиляции . В то время как ваши 1, переданные в функции motor_setup и motor_forwards, являются константой времени компиляции, параметр const int id все еще является переменной, поэтому доступ к m_1[id] и m_2[id] также является переменным.

...