【问题标题】:Multiple motors with digitalWriteFast带有 digitalWriteFast 的多个电机
【发布时间】:2019-01-24 09:01:36
【问题描述】:

我尝试使用库 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 传递给实例。关于这个主题有什么想法吗?

【问题讨论】:

  • 我对arduino一无所知,但看起来一半的错误消息丢失了?通常在冒号后面跟着一些东西。如果缺少某些内容,请您添加它并将错误消息格式化为代码。这更具可读性。
  • 非常感谢您的回答。不幸的是,错误消息到此结束。 (即使启用了高级错误消息)

标签: list arduino int constants


【解决方案1】:

digitalWriteFast 需要传递一个 compile-time 常量。虽然传递给 motor_setupmotor_forwards 函数的 1 是编译时常量,但参数 const int id 仍然是变量,因此对 m_1[id]m_2[id] 的访问也是变量。

【讨论】:

  • 是的,这听起来是正确的。我还没有找到传递变量的解决方案。我通过分别为每个电机编写一个函数来解决这个问题。这不是优雅的方式,但它正在工作;)
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 2012-10-21
  • 2021-06-29
  • 1970-01-01
  • 2020-03-04
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多