最近、シフト レジスタを使用して RGB LED を制御するように最適化されたShiftPWMに出会いました。
ソース コードをダウンロードし、ブレッドボードで提供されているサンプルを問題なく実行できました。スケッチを少し調整して、ShiftPWM ライブラリの関数を快適に使用できるようにしました。
私が取り組んでいる現在のプロジェクトに ShiftPWM 機能を含めたいと考えています。このプロジェクトには既に大量のライブラリ ファイルがあります。独自の構文とオブジェクト指向の階層を使用して LED を点灯できるように、ファイルに#include "ShiftPWM.h
入れたいと思います。Registers.h
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のサーボとトーンライブラリを実行しようとすると、「__vector_11の複数の定義」エラーが発生することがよくあります。これは、両方がtimer1を使用しようとするためです。
自分のカスタム ライブラリから ShiftPWM ライブラリにリンクしようとしただけで、なぜこのエラーが発生するのか疑問に思っています。私のコードのどこにも、手動でタイマーを設定する場所はありません。リンクの問題が原因だと思いますが、それが何であるかはわかりません。
どんな助けでも大歓迎です。