我最近遇到ShiftPWM,它经过优化,可以使用移位寄存器控制RGB LED。
我下载了源代码,并且能够运行我的面包板上提供的示例没问题。我甚至调整了草图,并且使用ShiftPWM库中的函数感觉很舒服。
我想将ShiftPWM功能包含在我正在处理的当前项目中,该项目已经拥有大量的库文件。我想#include "ShiftPWM.h
进入我的Registers.h
文件,以便我可以使用自己的语法和面向对象的层次结构来点亮我的LED。
在示例arduino sketch中,我需要在包含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 sketch(仅包含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库来获取此错误。我的代码中没有任何地方可以手动设置任何类型的计时器。我假设它源于一些链接问题,但我真的无法弄清楚它可能是什么。
感谢任何帮助。