我最近遇到了ShiftPWM,它经过优化以使用移位寄存器控制 RGB LED。
我下载了源代码并且能够运行我的面包板上提供的示例没有问题。我什至稍微调整了草图,并且使用 ShiftPWM 库中的函数感觉很舒服。
我想在我正在处理的当前项目中包含 ShiftPWM 功能,该项目已经有大量的库文件。我想#include "ShiftPWM.h
进入我的Registers.h
文件,这样我就可以使用自己的语法和面向对象的层次结构来点亮我的 LED。
在示例 arduino 草图中,我需要在包含 ShiftPWM 库文件之前定义一些常量:
#define SHIFTPWM_NOSPI
const int ShiftPWM_latchPin = 2;
const int ShiftPWM_dataPin = 4;
const int ShiftPWM_clockPin = 3;
const bool ShiftPWM_invertOutputs = true;
const bool ShiftPWM_balanceLoad = false;
#include "ShiftPWM.h"
所以我想我可以简单地将这些行Registers.h
以及用于点亮 LED 的设置代码和其他函数复制到我的文件中。
但是,当我这样做并尝试编译仅包含 的 arduino 草图时Registers.h
,我的编译器给了我以下(缩写)错误:
multiple definitions of '__vector_11'
.../ShiftPWM/ShiftPWM.h:175 first defined here
multiple definitions of 'ShiftPWM'
.../ShiftPWM/ShiftPWM.h:175 first defined here
它所指的行是这样的:
ISR(TIMER1_COMPA_vect) {
ShiftPWM_handleInterrupt();
}
我的研究表明,这行代码与 arduino 用来运行中断的计时器有关。例如,当人们尝试运行 arduino Servo 和 Tone 库时,经常会收到“__vector_11 的多个定义”错误,因为他们都尝试使用 timer1。
我想知道为什么我只是通过尝试从我自己的自定义库链接到 ShiftPWM 库来得到这个错误。在我的代码中,我没有手动设置任何类型的计时器。我假设它源于一些链接问题,但我真的无法弄清楚那可能是什么。
任何帮助表示赞赏。