赤外線信号の送受信を可能にするライブラリです。
Arduinoライブラリ「IRremote」として利用可能です。
? Google翻訳
サポートされている IR プロトコル
特徴
バージョン 4.x の新機能
バージョン 3.x の新機能
2.x プログラムを 4.x バージョンに変換する
古い MSB ファースト 32 ビット IR データ コードを新しい LSB ファースト 32 ビット IR データ コードに変換する方法
古いチュートリアルで 3.x バージョンを使用するとエラーが発生する
2.x を使い続ける
なぜ*.cppではなく*.hppなのか
新しい *.hpp ファイルの使用
チュートリアル
IRコードを指定する3つの方法
IRReceiverのピン配置
IRコードの受信
免責事項
その他のライブラリ (これらのプロトコルをカバーしている可能性があります)
プロトコル=PULSE_DISTANCE
プロトコル=不明
IRremoteでサポートされていないプロトコルに対処する方法
デコードされたIRData構造体
あいまいなプロトコル
さまざまなプロトコルの RAM 使用量l
未知のプロトコルの処理
IRコードの送信
公開IRコードデータベースのリスト
IRDB IR コードの送信
送信ピン
小型 NEC 受信機および送信機
FASTプロトコル
よくある質問とヒント
受信は、analogWrite() またはtone() の後、またはモーターの動作後に停止します。
受信セットオーバーフローフラグ
Neopixels、FastLed などの問題
別のライブラリでは動作しない/コンパイルできない
複数の IR 受信側および送信側インスタンス
送信される出力信号の強度を増加します
最小 CPU クロック周波数
Bang & Olufsen プロトコル
このライブラリの例
WOKWI オンラインの例
ロボットカーのIR制御
問題と議論
このライブラリのコンパイル オプション/マクロ
Arduino IDEでインクルード(*.h)ファイルを変更する
Sloeber IDE を使用したコンパイル オプションの変更
サポートされているボード
タイマーとピンの使用法
他のライブラリや、tone() やanalogWrite() などの Arduino コマンドとの非互換性
送信用ハードウェアPWM信号生成
送信に 30% のデューティ サイクルを使用するのはなぜですか
信号をデコードする方法
NEC エンコード図
5つのArduino IR受信ライブラリの簡単な比較
歴史
役立つリンク
貢献者
ライセンス
著作権
NEC / Onkyo / Apple
Denon / Sharp
Panasonic / Kaseikyo
JVC
LG
RC5
RC6
Samsung
Sony
Universal Pulse Distance
Universal Pulse Width
Universal Pulse Distance Width
Hash
Pronto
BoseWave
Bang & Olufsen
Lego
FAST
Whynter
MagiQuest
次のように#include <IRremote.hpp>
行の前にマクロを定義することで、プロトコルのオフとオンを切り替えることができます。
#define DECODE_NEC//#define DECODE_DENON#include <IRremote.hpp>
たくさんのチュートリアルと例。
積極的にメンテナンスされています。
生のタイミング データの送受信を可能にします。
4.3 IrSender.begin(DISABLE_LED_FEEDBACK)
機能しなくなるため、代わりにIrSender.begin(DISABLE_LED_FEEDBACK, 0)
を使用してください。
新しいユニバーサルパルス距離 / パルス幅 / パルス距離幅デコーダが追加され、以前の未知のプロトコルの多くをカバーします。
IrReceiver.printIRSendUsage(&Serial)
によって受信したコマンドを送信する方法のコードの出力。
RawData タイプは 32 ビット プラットフォームでは 64 ビットになり、したがって、 decodedIRData.decodedRawData
は、以前の 32 ビットよりも多くのプロトコルの完全なフレーム情報を含めることができます。
コマンド受信後のコールバック- メッセージを受信するとすぐにコードを呼び出します。
PULSE_DISTANCE
+ PULSE_WIDTH
プロトコルの処理が改善されました。
新しい FAST プロトコル。
printIRSendUsage()
を使用した、対応する送信関数の自動出力。
#define DECODE_DISTANCE
#define DECODE_DISTANCE_WIDTH
に置き換える必要があります (このデコーダーを明示的に有効にした場合のみ)。
パラメータbool hasStopBit
不要になり、関数sendPulseDistanceWidth()
などで削除されました。
任意のピンを受信に使用でき、 SEND_PWM_BY_TIMER
が定義されていない場合は送信にも使用できます。
送信/受信時にフィードバック LED をアクティブにすることができます。
8/16 ビット **コマンド値、16 ビットアドレス、プロトコル番号がデコード用に提供されます (古い 32 ビット値の代わりに)。
プロトコル値はプロトコル標準に準拠します。
NEC、Panasonic、Sony、Samsung、JVC は LSB ファーストでデコードして送信します。
ユニバーサル ディスタンス プロトコルをサポートし、これまで知られていなかったプロトコルの多くをカバーします。
tone()ライブラリと互換性があります。 ReceiveDemo の例を参照してください。
同時送信と受信。 SendAndReceive の例を参照してください。
より多くのプラットフォームをサポートします。
IR を使用せずに既存の受信デバイスに直接接続するために、アクティブ ローの受信機信号をシミュレートするだけの非 PWM 信号の生成が可能になります。
ソース コード内で直接、簡単なプロトコル設定を行うことができます。
メモリ使用量を削減し、デコード時間を短縮します。
非常に小型の NEC 専用デコーダが含まれており、タイマー リソースを必要としません。
-> 5つのArduino IRライブラリの機能比較。
バージョン 3.1 以降、送信用の PWM の生成はソフトウェアによって行われるため、ハードウェア タイマーが節約され、送信用の任意の出力ピンが有効になります。
コンパイルに-flto
フラグを使用しない (古い) Arduino コアを使用している場合、コンパイル中に begin() に関する誤ったエラー メッセージが表示された場合は、IRRemote.h の#define SUPPRESS_ERROR_MESSAGE_FOR_BEGIN
行をアクティブにすることができます。
IRreceiverとIRsenderオブジェクトが追加されており、よく知られている Arduino Serialオブジェクトと同様に、定義せずに使用できます。
IRrecv IrReceiver(IR_RECEIVE_PIN);
という行を削除するだけです。および/またはIRsend IrSender;
プログラム内で、出現するIRrecv.
またはirrecv.
IrReceiver
に置き換え、すべてのIRsend
またはirsend
IrSender
に置き換えます。
デコードされた値はIrReceiver.decodedIRData
にあり、 results
にはもう含まれていないため、 decode_results results
などの行を削除します。
Serial オブジェクトの場合と同様に、setup() でIrReceiver.enableIRIn()
またはirrecv.enableIRIn()
の代わりにIrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK)
IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK)
, DISABLE_LED_FEEDBACK) を呼び出します。
送信するには、 IrSender.begin();
setup()で。
IR_SEND_PIN が定義されていない場合 ( #include <IRremote.hpp>
行の前)、たとえばIrSender.begin(3, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);
古いdecode(decode_results *aResults)
関数は、単純なdecode()
に置き換えられました。したがって、ステートメントif(irrecv.decode(&results))
がある場合は、それをif (IrReceiver.decode())
に置き換えます。
デコードされた結果はIrReceiver.decodedIRData
に含まれ、 results
にはもう含まれないため、 results.value
およびresults.decode_type
(および同様のもの) の出現をIrReceiver.decodedIRData.decodedRawData
およびIrReceiver.decodedIRData.protocol
に置き換えます。
Overflow、Repeat、およびその他のフラグがIrReceiver.receivedIRData.flags
に追加されました。
ほとんど使用されません: results.rawbuf
およびresults.rawlen
IrReceiver.decodedIRData.rawDataPtr->rawbuf
およびIrReceiver.decodedIRData.rawDataPtr->rawlen
に置き換える必要があります。
NEC、Panasonic、Sony、Samsung、JVC の5 つのプロトコルが LSB ファーストに変換されています。古い MSB データを送信する送信関数は、 sendNECMSB
、 sendSamsungMSB()
、 sendSonyMSB()
、およびsendJVCMSB()
に名前変更されました。古いsendSAMSUNG()
およびsendSony()
MSB 関数は引き続き使用できます。 sendPanasonic()
関数の古い MSB バージョンは削除されました。これは、誰も認識していないバグがあったため、使用されることはないと考えられていました。
MSB コードを LSB に変換するには、以下を参照してください。
#include <IRremote.h>#define RECV_PIN 2IRrecv irrecv(RECV_PIN); decode_results 結果;void setup() { ... シリアル.begin(115200); // シリアル通信を確立する irrecv.enableIRIn(); // 受信機を開始する}void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); ... irrecv.resume(); // 次の値を受け取る } ... }
#include <IRremote.hpp>#define IR_RECEIVE_PIN 2void setup() { ... シリアル.begin(115200); // // シリアル通信を確立する IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // 受信機を開始する}void loop() { if (IrReceiver.decode()) { Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // 「古い」生データを印刷します IrReceiver.printIRResultShort(&Serial); // 受信したデータを1行にまとめて印刷します IrReceiver.printIRSendUsage(&Serial); // このデータの送信に必要なステートメントを出力します ... IrReceiver.resume(); // 次の値の受信を有効にする } ... }
NEC、Panasonic、Sony、Samsung、JVCの新しいデコーダーの場合、これらのプロトコルの定義が示すように、結果IrReceiver.decodedIRData.decodedRawData
はLSB-firstになりました。
一方を他方に変換するには、バイト/ニブルの位置を反転してから各バイト/ニブルのすべてのビット位置を反転するか、それを 1 つのバイナリ文字列として書き込み、反転/ミラー化する必要があります。
例: 0xCB 34 01 02
ニブルリバース後0x20 10 43 BC
各ニブルのビット反転後の0x40 80 2C D3
0->0 1->8 2->4 3->C 4->2 5->A 6->6 7->E 8->1 9->9 A->5 B->D C->3 D->B E->7 F->F
0xCB340102
バイナリ1100 1011 0011 0100 0000 0001 0000 0010
です。
0x40802CD3
バイナリ0100 0000 1000 0000 0010 1100 1101 0011
です。
最初のバイナリ シーケンスを逆方向 (右から左) に読み取ると、2 番目のシーケンスが得られます。これにはbitreverseOneByte()
またはbitreverse32Bit()
を使用できます。
古い MSB コードを変換せずに送信するには、 sendNECMSB()
、 sendSonyMSB()
、 sendSamsungMSB()
、 sendJVCMSB()
を使用します。
IRremote.hpp
ではなくIRremote.h
を含む古いチュートリアル コードでエラーが発生した場合は、バージョン 2.4.0 にロールバックしてみてください。
ほとんどの場合、コードは実行され、新しい機能を見逃すことはありません。
プロジェクトには、2017 年にリリースされたオリジナルの 2.4 か、下位互換性のある最後の 2.8 バージョンを使用することを検討してください。
これで十分かもしれませんし、32 ビット IR コードを完璧に処理できます。
これがあなたのケースに当てはまらない場合でも、4.x は少なくとも下位互換性を保とうとしており、古いサンプルは引き続き正常に動作するはずですのでご安心ください。
次のデコーダのみが使用可能です。
NEC
Denon
Panasonic
JVC
LG
RC5
RC6
Samsung
Sony
irrecv.decode(&results)
の呼び出しでは、2.x のような古い MSB ファースト デコーダーが使用され、 results.value
に 32 ビット コードが設定されます。
より意味のある (定数) 8/16 ビット アドレスおよび 8 ビット コマンドへのデコードはありません。
すべての *.cpp ファイルは、この cpp ファイル専用のコンパイラの呼び出しによって個別にコンパイルされます。これらの呼び出しは、IDE/make システムによって管理されます。 Arduino IDE では、 VerifyまたはUploadをクリックすると呼び出しが実行されます。
さて、Arduino に関する問題は次のとおりです。
すべての *.cpp ファイル、特に使用するライブラリのコンパイル オプションを設定するにはどうすればよいですか?
Sloeber や PlatformIO などの IDE は、プロジェクトごとにオプションのセットを指定できるようにすることでこれをサポートします。これらのオプションは、 -DTRACE
などのコンパイラ呼び出しごとに追加されます。
しかし、Arduino にはこの機能がありません。したがって、回避策は、すべてのソースを個別にコンパイルするのではなく、ソースに含めることによって 1 つの巨大なソース ファイルに連結することです。
これは、例えば#include "IRremote.hpp"
によって行われます。
しかし、なぜ#include "IRremote.cpp"
を含まないのでしょうか?
試してみると、大量のエラーが表示されます。これは、*.cpp ファイルの各関数が 2 回コンパイルされるためです。1 回目は巨大なファイルをコンパイルし、2 回目は *.cpp ファイルを個別にコンパイルします。
そのため、拡張子cpp を使用することはできなくなりました。解決策の 1 つは、拡張子としてhpp を使用して、それが含まれている *.cpp ファイルであることを示すことです。
他のすべての拡張子、たとえばcinclude も機能しますが、 hpp が常識のようです。
コンパイル オプションをより簡単にサポートするには、メイン プログラム (別名、setup() およびloop() を含む *.ino ファイル) で#include <IRremote.h>
の代わりにステートメント#include <IRremote.hpp>
を使用する必要があります。
他のすべてのファイルでは、 multiple definitions
リンカー エラーを防ぐために、次のコードを使用する必要があります。
#define USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE#include <IRremote.hpp>
メイン プログラム内のすべてのマクロが#include <IRremote.hpp>
の前に定義されていることを確認してください。
それ以外の場合、次のマクロはデフォルト値で確実にオーバーライドされます。
RAW_BUFFER_LENGTH
IR_SEND_PIN
SEND_PWM_BY_TIMER
DroneBot Workshop による IR リモコンと IRremote ライブラリの詳細な紹介。
特定の IR コードを指定するには 3 つの異なる方法があります。
各マーク/パルスとスペース/パルス間の距離のタイミングはリストまたは配列で指定されます。これにより、すべての IR コードを指定できるようになりますが、大量のメモリが必要となり、まったく読み取れません。周波数や繰り返しの仕様を含む、このようなタイミング アレイの正式な定義の 1 つは、 Prontoフォーマットです。
より低い時間解像度を使用すると、メモリを節約できます。 IRremote の場合、int16 値の代わりにバイト値を使用することにより、メモリ要件を半分にする 50 μs の分解能を使用できます。受信目的には、 decodeHash()
デコーダによって提供されるタイミングのハッシュを使用できます。
バイナリ ビットストリーム/16 進値をエンコードする 3 つの主なエンコード スキームがあります。
PULSE_DISTANCE
。パルス間の距離によってビット値が決まります。これには常にストップ ビットが必要です。例としては、NEC および KASEIKYO プロトコルがあります。パルス幅はほとんどのプロトコルで一定です。
PULSE_WIDTH
。パルスの幅はビット値を決定し、パルスの距離は一定です。これにはストップビットは必要ありません。唯一知られている例は SONY プロトコルです。
位相/マンチェスター符号化。クロックに対するパルス/ポーズの遷移時間 (位相) がビット値を決定します。例としては、RC5 プロトコルと RC6 プロトコルがあります。
位相エンコーディングには一定のビット長があり、一定のパルス幅を持つPULSE_DISTANCE
と、一定のビット長がないPULSE_WIDTH
あります。
非一定パルス幅エンコーディングを使用したPULSE_DISTANCE
のよく知られた例は、RS232 シリアル エンコーディングです。ここでは、一定でないパルス幅を使用して、一定のビット長を有効にしています。
ほとんどの IR 信号には、受信回路の自動ゲインの設定に役立つ特別なヘッダーがあります。このヘッダーはエンコードの一部ではありませんが、多くの場合、特殊なプロトコルにとって重要であるため、再現可能である必要があります。
PULSE_DISTANCE
エンコードを使用し、パルス/ポーズの組み合わせに 2 進数の 0/1 より多くが含まれるコードがあることに注意してください。これには、2 つ以上の異なるパルスまたは休止長の組み合わせが必要です。 HobToHood プロトコルはこのようなエンコーディングを使用します。
エンコード方式を使用すると、IR コードの仕様がビットストリーム/16 進値に減らされます。これはデフォルトでは LSB であり、ヘッダー、0、および 1 のパルス/ポーズ タイミングです。16 進値は非常に読みやすくなります。これらの方式では、アドレス、コマンド、チェックサムなどのセマンティクスをこのビットストリームに置くことはできません。
IRremote に直接実装される一般的なプロトコルがいくつかあります。これらは、周波数、ヘッダー、0、1 のタイミング、およびチェックサム、繰り返し距離、繰り返しコーディング、ビット トグルなどの他の値を指定します。16 進値のセマンティクスも指定され、2 つのパラメーターアドレスのみを使用できます。とIRコードを指定するコマンドです。これによりメモリが節約され、可読性が高くなります。多くの場合、アドレスも一定であるため、メモリ要件がさらに削減されます。
Adafruit IR センサーのチュートリアル
プログラムでは、次のコマンドを使用して、完全に受信された IR フレームを確認します。
if (IrReceiver.decode()) {}
これにより、受信データもデコードされます。
デコードが成功すると、IR データは IRData 構造体に含まれ、 IrReceiver.decodedIRData
として利用できます。
struct IRData { decode_type_t プロトコル; // UNKNOWN、NEC、SONY、RC5、PULSE_DISTANCE、... uint16_t アドレス; // デコードされたアドレス uint16_t コマンド; // デコードされたコマンド uint16_t extra; // Kaseikyo の不明なベンダー ID に使用されます。距離プロトコルのデコードに使用されるティック。 uint16_t ビット数; // データ (アドレス + コマンド + パリティ) として受信したビット数 - 異なる長さが可能である場合にプロトコル長を決定します。 uint8_t フラグ; // IRDATA_FLAGS_IS_REPEAT、IRDATA_FLAGS_WAS_OVERFLOW など。IRDATA_FLAGS_* 定義を参照 IRRawDataType デコードされたRawData; // 最大 32 (32 ビット CPU アーキテクチャの場合は 64 ビット) ビットのデコードされた生データ。sendRaw 関数に使用されます。 uint32_t デコードされたRawDataArray[RAW_DATA_ARRAY_SIZE]; // 送信関数に使用される 32 ビット デコードされた生データ。 irparams_struct *rawDataPtr; // デコードされる生のタイミング データのポインタ。主に、ISR を受信することによってデータ バッファーが満たされます。};
これは、flags フィールドに含まれるフラグのリストです。
たとえばif(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)
で確認してください。
フラグ名 | 説明 |
---|---|
IRDATA_FLAGS_IS_REPEAT | 前のフレーム間のギャップは、繰り返しに予想される最大ギャップよりも小さいです。 !!!約 100 ミリ秒以内にリモコンの 2 つの異なるボタンを押すことはほとんど不可能であるため、変更されたコマンドやアドレスはチェックされません。 |
IRDATA_FLAGS_IS_AUTO_REPEAT | 現在のリピート フレームはリピートであり、常に通常のフレームの後に送信されるため、回避することはできません。 DENON および LEGO プロトコルにのみ指定されます。 |
IRDATA_FLAGS_PARITY_FAILED | 現在の (オートリピート) フレームがパリティ チェックに違反しました。 |
IRDATA_FLAGS_TOGGLE_BIT | RC5 または RC6 トグル ビットが設定されている場合に設定されます。 |
IRDATA_FLAGS_EXTRA_INFO | アドレスとデータには含まれない追加情報があります (Kaseikyo の不明なベンダー ID、または decodedRawDataArray など)。 |
IRDATA_FLAGS_WAS_OVERFLOW | 指定されたRAW_BUFFER_LENGTH に対してマークとスペースが多すぎます。オーバーフローのフラグが無限に付けられるのを避けるために、この場合、irparams.rawlen は 0 に設定されます。 |
IRDATA_FLAGS_IS_MSB_FIRST | この値は主に (既知の) プロトコルによって決定されます。 |
auto myRawdata= IrReceiver.decodedIRData.decodedRawData;
ここでは、 IrReceiver.decodedIRData.flags
の定義について説明します。
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRResultRawFormatted(&Serial, true);`
生データは、受信信号に関連する Arduino タイマーの内部状態に依存するため、毎回わずかに異なる可能性があります。 (解像度の問題)。デコードされた値は、そのようなわずかな違いを許容して解釈された値です。
IrReceiver.printIRSendUsage(&Serial);
NEC プロトコルは 8 ビットのアドレスと 8 ビットのコマンドとして定義されています。ただし、物理アドレスとデータのフィールドはそれぞれ 16 ビット幅です。追加の 8 ビットは、パリティ チェックのために反転されたアドレスまたはコマンドを送信するために使用されます。
拡張 NEC プロトコルは、 16 ビット アドレスに対してアドレスの追加の 8 パリティ ビットを使用するため、アドレスのパリティ チェックが無効になります。
ONKYO プロトコルは、16 ビットのアドレスとコマンドに対して、アドレスとコマンドの追加の 8 パリティ ビットを使用します。
パリティが正しい場合、デコーダは 16 ビット値を 8 ビット値に削減します。パリティが正しくない場合は、パリティ エラーがないと想定されますが、拡張 NEC または拡張 NEC プロトコル プロトコルを想定して、値はパリティなしの 16 ビット値として扱われます。
しかし、ここで、たとえば16 ビットアドレス 0x00FF または 0x32CD を受信したいときに問題が発生します。デコーダは、これを 0xFF / 0xCD の正しいパリティを持つ NEC 8 ビット アドレス 0x00 / 0x32 として解釈し、0x00 / 0x32 に減算します。
これに対処する 1 つの方法は、 #define DECODE_ONKYO
を使用して、ライブラリに常にONKYO プロトコル解釈を使用させることです。もう 1 つの方法は、 IrReceiver.decodedIRData.protocol
が ONKYO ではなく NEC であるかどうかを確認し、手動でパリティ削減を元に戻すことです。
長押しすると、 NEC プロトコルはフレームを繰り返さず、特別な短い繰り返しフレームを送信します。これにより、長押しと繰り返し押しを簡単に区別できるようになり、バッテリーのエネルギーが少し節約されます。この動作は、NEC および LG や Samsung などの派生プロトコルにとって非常に独特です。
しかし、もちろん、NEC プロトコルを使用し、長押しされたときに特別な短いリピート フレームを送信する代わりに最初のフレームのみを繰り返すリモート コントロール システムもあります。これをNEC2プロトコルと名付け、 sendNEC2()
で送信します。
ただし、NEC2 プロトコルは、最初のフレームの後、長押しした場合にのみ NEC ライブラリ デコーダによって検出されることに注意してください。
長押しすると、 SamsungLG プロトコルはフレームを繰り返さず、特別な短い繰り返しフレームを送信します。
RAW_BUFFER_LENGTH
は、受信した IR タイミング データがデコード前に保存されるバイト バッファーの長さを決定します。
1 ビットは 1 つのマークとスペースで構成され、最大 48 ビットの標準プロトコルには100 で十分です。常に追加の 4 バイトが必要です。最初のギャップに 1 バイト、ヘッダーに 2 バイト、ストップ ビットに 1 バイトです。
48ビット プロトコルは、PANASONIC、KASEIKYO、SAMSUNG48、RC6 です。
NEC、SAMSUNG、WHYNTER、SONY(20)、LG(28) などの32ビット プロトコルでは、バッファ長 68 が必要です。
BOSEWAVE、DENON、FAST、JVC、LEGO_PF、RC5、SONY(12 または 15) などの16ビット プロトコルでは、バッファ長 36 が必要です。
MAGIQUEST には112のバッファ長が必要です。
エアコンは多くの場合、最大 750 ビットのより長いプロトコル データ ストリームを送信します。
RECORD_GAP_MICROS
によって決定されるレコード ギャップがデフォルトの 8 ミリ秒から 20 ミリ秒を超えて変更されると、バッファはバイトではなく uint16_t バッファになり、2 倍の RAM が必要になります。
このライブラリは、比較的低レベルのリソースを備えた MCU 内に適合するように設計されており、動作するために MCU の一部のリソースを必要とする他のアプリケーションと一緒にライブラリとして動作することを目的としています。
ReceiveDemo サンプルを使用して、IR プロトコルに関するすべての情報を出力します。
ReceiveDump の例では、より多くの情報が得られますが、情報の出力に時間がかかるため、反復検出が不十分です。
使用しているプロトコルがこのライブラリでサポートされていないと思われる場合は、特にマンチェスター プロトコルをより適切にサポートする IRMP ライブラリを試してみてください。
エアコンの場合は、IRremoteESP8266 ライブラリを試してみてください。これは、優れたプロトコル セットと多くのエアコンをサポートし、ESP32 でも動作します。
Raw-IR-decoder-for-Arduino はライブラリではなく、特にエアコンのプロトコルをデコードする多くの方法を提供する Arduino のサンプル スケッチです。これらのプロトコルの送信は、Arduino ライブラリ HeatpumpIR によって実行できます。
次のようなものが得られた場合:
PULSE_DISTANCE: HeaderMarkMicros=8900 HeaderSpaceMicros=4450 MarkMicros=550 OneSpaceMicros=1700 ZeroSpaceMicros=600 NumberOfBits=56 0x43D8613C 0x3BC3BC
次に、 56 ビットで構成されるコードがあり、これはおそらくエアコンのリモコンからのものです。
sendPulseDistanceWidth()
を使用して送信できます。
uint32_t tRawData[] = { 0xB02002, 0xA010 }; IrSender.sendPulseDistance(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, false, 0, 0);
sendPulseDistanceWidthData()
2 回呼び出して送信できます。1 回目は最初の 32 ビットで、次は残りの 24 ビットです。
PULSE_DISTANCE
/ PULSE_WIDTH
デコーダは、タイミング ストリームを 16 進値として格納されたビットストリームにデコードするだけです。これらのデコーダは、アドレス、コマンド、チェックサムなどのセマンティクスをこのビットストリームに置くことはできません。ただし、ビットストリームはタイミング ストリームよりもはるかに読みやすいです。このビットストリームは、デフォルトでは LSB ファーストで読み取られます。 LSB がさらなる調査に適さない場合は、ここで変更できます。
RAM が 2k 以下の場合、デコーダは RAM スペースを節約するために最大 2500 マイクロ秒までのマークまたはスペース期間のみを受け入れます。それ以外の場合は、最大 10 ミリ秒までの期間を受け入れます。
たとえば、ReceiveDemo の例の出力としてProtocol=UNKNOWN Hash=0x13BD886C 35 bits received
場合は、プロトコルのデコードに問題があるか、サポートされていないプロトコルのいずれかです。
奇数のビットを受信した場合は、受信回路に問題がある可能性があります。おそらく IR 信号が弱すぎるためです。
+ 600,- 600 + 550,- 150 + 200,- 100 + 750,- 550
のようなタイミングが表示される場合は、1 つの 450 μs スペースが 200 μs のスパイク/エラー信号を挟んで 2 つの 150 μs スペースと 100 μs スペースに分割されています。おそらく、受信機に欠陥があるか、近くにある別の発光源と関連して信号が弱いためです。
+ 500,- 550 + 450,- 550 + 450,- 500 + 500,-1550
のようなタイミングが表示される場合、一般にマークはスペースより短いため、これを補うためにMARK_EXCESS_MICROS
(ino ファイルで指定) を負の値にする必要があります。デコード時。
Protocol=UNKNOWN Hash=0x0 1 bits received
場合は、最初のマークの後のスペースがRECORD_GAP_MICROS
より長い可能性があります。これは、一部の LG エアコン プロトコルで観察されました。 .ino ファイルの#include <IRremote.hpp>
行の前に#define RECORD_GAP_MICROS 12000
などの行を追加して再試行してください。
UNKNOWN プロトコルの理由を見つけるためのサポート情報をさらに表示するには、IRremoteInt.h の行//#define DEBUG
有効にする必要があります。
IR トランスミッターがどのプロトコルを使用しているかわからない場合は、いくつかの選択肢があります。
ハッシュ値を使用して、どのコマンドを受信したかを判断するだけです。 SimpleReceiverForHashCodes の例を参照してください。
IRreceiveDemo サンプルまたは IRreceiveDump サンプルを使用して、IR タイミングをダンプします。その後、SendRawDemo サンプルを使用してこのタイミングを再現/送信できます。
IRMP AllProtocol の例では、サポートされている 40 プロトコルのいずれかのプロトコルとデータを出力します。同じライブラリを使用してこのコードを送信できます。
より大きな Arduino ボード (100 kByte を超えるプログラム メモリ) が手元にある場合は、Arduino ライブラリ DecodeIR の IRremoteDecode サンプルを試すことができます。
IrScrutinizer を使用します。 「Arduino Raw」としてエクスポートすることで、プロトコルの送信スケッチを自動的に生成できます。 IRremote、古い IRLib、および Infrared4Arduino をサポートします。
操作したい IR コードを生成できるデバイス (別名 IR リモート) が手元にある場合は、ReceiveDemo サンプルを使用してコードを受信することをお勧めします。これにより、コードの送信方法がシリアル出力で示されます。
Protocol=LG Address=0x2 Command=0x3434 Raw-Data=0x23434E 28 bits MSB first Send with: IrSender.sendLG(0x2, 0x3434, <numberOfRepeats>);
アドレスが定数であり、コマンドが適切にグループ化されている場合があることがわかります。
送信に使用する繰り返しの数がわからない場合は、 3 から始めるのが良いでしょう。これが機能する場合は、後でより低い値を確認できます。
DECODE_DISTANCE_WIDTH
を有効にした場合、 printIRSendUsage()
によって出力されるコードは8 ビット プラットフォームと 32 ビット プラットフォームで異なるため、受信プログラムを送信プログラムと同じプラットフォームで実行することが最善です。
すべての送信関数は、必要に応じてリピートの送信をサポートします。リピートフレームはプロトコルで定められた一定周期で送信されます。たとえば、NEC の場合、開始から開始まで 110 ミリ秒です。
最後に送信されたマークの後には遅延がないことに注意してください。リピート フレームの送信を独自に処理する場合は、正しいデコードを可能にするために、リピート フレームの前に適切な遅延を挿入する必要があります。
古い MSB コードを変換せずに送信するには、 sendNECMSB()
、 sendSonyMSB()
、 sendSamsungMSB()
、 sendJVCMSB()
を使用します。
Flipper-IRDB データベースにあるコードもアドレス/コマンド スキームを使用しているため、変換は非常に簡単です。
プロトコルの一致は、NECext -> NECext (または Onkyo)、Samsung32 -> Samsung、SIRC20 -> 20 ビットの Sony などです。
irdb データベースにあるコードは、デバイス、サブデバイス、および機能を指定します。ほとんどの場合、デバイスとサブデバイスはアドレス パラメータの上位バイトと下位バイトとして取得でき、関数は、アドレス、コマンド、および繰り返し回数パラメータを持つ新しい構造化関数のコマンド パラメータです。たとえばIrSender.sendNEC((device << 8) | subdevice, 0x19, 2)
。
正確なマッピングは、 IR プロトコルの IRP 定義ファイルにあります。 「D」と「S」はデバイスとサブデバイスを示し、「F」は機能を示します。
SEND_PWM_BY_TIMER
がアクティブではないため、デフォルトで PWM 信号がソフトウェア ビット バンギングで生成されるため、任意のピンを送信ピンとして選択できます。
ESP32 LEDC では、チャンネル 0 が IR PWM の生成に使用されます。
IR_SEND_PIN
を (c マクロとして) 指定すると、プログラム サイズが削減され、AVR の送信タイミングが向上します。 setSendPin(uint8_t aSendPinNumber)
など、変数を使用して送信ピンを指定する場合は、このIR_SEND_PIN
マクロを無効にする必要があります。その後、IR フレームを送信する前にいつでも送信ピンを変更できます。このライブラリのコンパイル オプション/マクロも参照してください。
http://www.harctoolbox.org/IR-resources.html
フリッパー IRDB データベース
フリッパーデコード | IRリモートデコード |
---|---|
サムスン32 | サムスン |
NEC | NEC |
次へ | オンキヨー |
<スタートビット><ベンダーID:16><ベンダーIDパリティ:4><ジャンル1:4><ジャンル2:4><コマンド:10><ID:2><パリティ:8><ストップビット> ID はアドレスの MSB です。 住所: 8A 02 20 00 コマンド: 56 03 00 00 -> IRリモート: アドレス 0x6A8、sendPanasonic (02 20 用)、コマンド 0x35 | <スタート ビット><VendorID:16><VendorID パリティ:4><アドレス:12><コマンド:8><VendorID パリティ、アドレスおよびコマンドのパリティ:8><ストップ ビット> |
NEC、NEC バリアント、または FAST (以下を参照) プロトコルのみを必要とするアプリケーションの場合、コード サイズが 500 バイトと非常に小さく、タイマーを必要としない特別な受信機/送信機が含まれています。
IRremote のように 50 µs ごとに入力をサンプリングする代わりに、TinyReceiver レシーバーはオンザフライ デコードにピン変更割り込みを使用するため、プロトコルの選択が制限されます。
レベルが変更されるたびに、レベルと最後の変更からの時間が使用されて、プロトコルが段階的にデコードされます。
この動作原理では、IRremote のようにタイムアウトを待ってからプロトコルをデコードすることはできません。
代わりに、最終的なデコードとオプションのユーザー提供コールバック関数handleTinyReceivedIRData()
の呼び出しを行うために、プロトコルの最後のビット (レベル変更) がどれであるかを知る必要があります。
これは、プロトコルのビット数、したがってプロトコル (ファミリー) を知る必要があることを意味します。
TinyReceiver と IRDispatcherDemo のサンプルを確認してください。
IRremote.hpp
の代わりにTinyIRReceiver.hpp
またはTinyIRSender.hpp
を含めるよう注意してください。
//#define USE_ONKYO_PROTOCOL // NEC と同様ですが、16 ビットのアドレスとコマンドをそれぞれ 8 ビットの通常値と 8 ビットの反転値としてではなく、1 つの 16 ビット値として受け取ります。//#define USE_FAST_PROTOCOL // NEC の代わりに FAST プロトコルを使用します / ONKYO#include "TinyIRReceiver.hpp"void setup() { initPCIInterruptForTinyReceiver(); // IR 入力信号の変化時に割り込みの生成を有効にする}void loop() { if (TinyReceiverDecode()) { printTinyReceiverResultMinimal(&Serial); } //resume() は必要ありません :-)}
#include "TinyIRSender.hpp"void setup() { sendNEC(3, 0, 11, 2); // アドレス 0 とコマンド 11 を 2 回繰り返してピン 3 に送信します。}void loop() {}
より多くのプロトコルをサポートする別の小さな受信機と送信機がここにあります。
FAST プロトコルは、アドレスがなく、パリティがあり、ヘッダーが短い、独自に変更された JVC プロトコルです。これは、別のボード上でプロトコル フレームを送信したイベントに迅速に応答することを目的としています。 FAST は送信に 21 ミリ秒かかり、 50 ミリ秒間隔で送信されます。エラー検出用に完全な 8 ビット パリティを備えています。
ビットタイミングはJVCっぽい
ヘッダーは短く、3156 μs 対 12500 μs
アドレスがなく、16 ビット データがあり、8 ビット コマンドおよび 8 ビット反転コマンドとして解釈され、(6 + (16 * 3) + 1) * 526 = 55 * 526 = 28930 マイクロ秒または 29 ミリ秒の固定プロトコル長になります。
リピートは完全なフレームとして送信されますが、周期は 50 ミリ秒、距離は 21 ミリ秒です。
#define IR_SEND_PIN 3#include <IRremote.hpp>void setup() { sendFAST(11, 2); // コマンド 11 を 2 回繰り返してピン 3 に送信します。}void loop() {}
#define USE_FAST_PROTOCOL // FAST プロトコルを使用します。アドレスなしと 16 ビット データ。8 ビット コマンドおよび 8 ビット反転コマンドとして解釈されます#include "TinyIRSender.hpp"void setup() { sendFAST(3, 11, 2); // コマンド 11 を 2 回繰り返してピン 3 に送信します。}void loop() {}
FAST プロトコルは IRremote および TinyIRReceiver で受信できます。
50 μs の受信サンプル間隔はタイマーによって生成されます。多くのボードでは、これはハードウェアタイマーでなければなりません。ソフトウェアタイマーが利用可能な一部のボードでは、ソフトウェアタイマーが使用されます。
受信に使用されるハードウェアタイマーは、 analogWrite()
に使用しないでください。
特に、モーター制御はしばしばanalogWrite()
関数を使用するため、ここに示すピンで使用される場合、受信を停止します。
UNOおよびその他のAVRボードでは、レシーバータイマーはトーンタイマーと同じです。したがって、受信はtone()
コマンドの後に停止します。 receedemoの例を参照してください。それを処理する方法、つまりIrReceiver.restartTimer()
の使用方法を参照してください。
RAW_BUFFER_LENGTH
プロトコルのすべてのマークとスペースに対して小さすぎる場合、フラグIRDATA_FLAGS_WAS_OVERFLOW
が設定されています。これは、エアコンのような長いプロトコルフレームで発生する可能性があります。また、 RECORD_GAP_MICROS
フレームとTHRの繰り返しフレームの間の実際のギャップよりも小さい場合、両方を1つの連続したフレームとして解釈する場合にも発生する可能性があります。その後、タイミングを捨てて、どの理由が当てはまるかを確認するのが最善です。
ネオピクセル(別名WS2811/WS2812/WS2812B)または他のライブラリをより長い時間ブロックする他のライブラリ(> 50 µs)を使用すると、Irremoteは正しく機能しません。
Adafruit Neopixel LIBを使用する場合でも、Fastledでは、基本Arduinosのような多くの下端CPUで50 µsを超える下端CPUで無効になります。次に、これにより、IR割り込みハンドラーが必要なときに実行されないようにします。このビデオも参照してください。
1つの回避策はif (IrReceiver.isIdle()) { strip.show();}
でneopixelデータを送信する前に、IRレシーバーがアイドル状態になるのを待つことです。
これにより、少なくとも実行中のIR送信を破壊し、neopixelの更新レートを繰り返すことは非常にうまく機能する可能性があります。
これについては、より強力なプロセッサに他のソリューションがあります。マークマーリンのこのページを参照してください
別のライブラリは、Line IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
無効にした場合にのみ動作/コンパイルしています。 。
これは、多くの場合、他のライブラリとのタイマーリソースの競合によるものです。以下をご覧ください。
このライブラリは、CPUごとに1つのIRレシーバーと1つのIR送信者オブジェクト(IRRECVおよびIRSEND)のみをサポートしています。
ただし、送信はシリアルタスクであるため、 setSendPin()
使用してピンを送信して送信して、複数の送信者をエミュレートできます。
レシーバーは、50 µsごとに1つのピンからデジタルIR信号値を読み取る特別なタイマートリガー機能を使用します。
そのため、複数のIRレシーバーは、複数のIRレシーバーの出力ピンを一緒に接続することによってのみ使用できます。 IRレシーバーモジュールは、VCCに対してわずか30K抵抗器を備えた出力デバイスとしてNPNトランジスタを内部的に使用します。これは基本的に「オープンコレクター」であり、複数の出力ピンを1つのArduino入力ピンに接続できます。
ただし、受信機の1つからの弱い /乱れた信号も、別の受信機からの良好な信号を妨害することに注意してください。
IRパワーを無料で増やす最良の方法は、 2つまたは3つのIRダイオードを直列に使用することです。 1つのダイオードには、20 mAで1.2ボルトまたは100 mAで1.5ボルトが必要なため、5ボルトの出力で最大3つのダイオードを供給できます。
1.2 Vと20 mAと5 Vの供給で2ダイオードを電源にするには、抵抗を次のものに設定します(5 V -2.4 V) - > 2.6 V / 20 MA = 130Ωになります。
3つのダイオードの場合、1.4 V / 20 mA = 70Ωが必要です。
AVRピンでの損失があるため、実際の電流は低い場合があります。たとえば、20 maで0.3 V。
20 mAを超える最新のものを必要としない場合、外部トランジスタを使用する必要はありません(少なくともAVRチップの場合)。
Arduino Nanosでは、私は常に100Ωシリーズ抵抗と1つのIR LEDを使用しています。
受信の場合、50 µsタイマーISR(割り込みサービスルーチン)が16 MHzの雰囲気で約12 µsかかるため、最小限のCPUクロック周波数は4 MHzです。
投票を必要としないTinyreceiverは、1 MHzで実行されます。
送信の場合、デフォルトのソフトウェア生成PWMは、8 MHzで実行されているAVRに問題があります。 PWM周波数は38 kHzではなく約30です。RC6は信頼できません。 #define SEND_PWM_BY_TIMER
によってタイマーPWM生成に切り替えることができます。
BANG&Olufsenプロトコルデコーダーは、デフォルトでは有効にされていません。つまり、#Define DECODE_<XYZ>
によってプロトコルが明示的に有効になっていない場合。 #define DECODE_BEO
によって常に明示的に有効にする必要があります。これは、 IR送信周波数が455 kHzであるため、異なるレシーバーハードウェア(TSOP7000)が必要なためです。
また、 455 kHz PWM信号を生成することは現在、 SEND_PWM_BY_TIMER
にのみ実装されているため、 SEND_PWM_BY_TIMER
またはUSE_NO_SEND_PWM
が定義されている場合のみ作業を送信します。
詳細については、ir_bangolufsen.hppを参照してください。
例は、ファイル>例>カスタムライブラリ / Irremoteの例で入手できます。
このCPUには、Attiny85とattiny88の8kフラッシュに例を適合させるには、ArduinoライブラリのaTtinySerialoutが必要です。
DroneBotワークショップSimplereCeiverとSimpleSenderも参照してください。
SimpleCeiverとSimpleSenderの例は、良い出発点です。簡単な例は、Wokwiでオンラインでテストできます。
SimpleCeiverForHashCodesは、ハッシュデコーダーのみを使用します。 6を超えるすべてのIRフレームを32ビットハッシュコードに変換するため、未知のプロトコルを受信できるようになります。
参照:http://www.righto.com/2010/01/using-arbitrary-remotes with-arduino.html
コードサイズまたはタイマーの使用が重要な場合は、これらの例を見てください。
Tinyreceiverの例では、NEC、拡張NEC、Onkyo、および高速プロトコルのみを受け取ることができるが、タイマーは必要ないTinyirreceiverライブラリを使用します。彼らは、ハエのデコードにピンチェンジ割り込みを使用します。これが、制限されたプロトコルの選択の理由です。
Tinyreceiverは、Wokwiでオンラインでテストできます。
Tinysenderの例では、 NEC、Onkyo、Fastプロトコルのみを送信できるTinyirsenderライブラリを使用しています。
Simplesenderの例のように、8ビットアドレスと8ビットコマンドを備えた標準形式のNECプロトコルコードを送信します。拡張NEC、Onkyo、および高速プロトコルを使用して送信するオプションがあります。 780バイトのプログラムメモリと26バイトのRAMをSimplesenderと比較して保存します。これは同じことを行いますが、Irremoteライブラリを使用します(したがってはるかに柔軟です)。
プロトコルがNECではなく、コードサイズが重要な場合は、この例をご覧ください。
ReceiveEMOはすべてのプロトコルを受信し、受信した各パケットでArduino Tone()関数を使用してビープ音を生成します。
1つのIRボタン(1つのコマンドの複数のリピートの受信)のロングプレスが検出されます。
AllProtoColsonLCDには、 1602 LCDに短い結果が表示されます。 LCDは、並列またはシリアル(I2C)を接続できます。
デバッグピンをグランドに接続することにより、各フレームの生値を強制的に印刷できます。デバッグピンのピン番号は、ボードとLCD接続タイプに依存するため、セットアップ中に印刷されます。
この例は、IrremoteとTone()を一緒に使用する方法の例としても機能します。
すべてのプロトコルを受信し、Pronto形式を含むさまざまなフレーバーで受信信号をダンプします。印刷には時間がかかるため、繰り返しの信号はスキップまたは不明と解釈される場合があります。
利用可能なすべてのプロトコルを少なくとも1回送信します。
送信中の受信を示します。
Button Pressで最後にIR信号を受信して再生して再生します。既知のプロトコルのIRフレームは、適切なプロトコルエンコーダーによって送信されます。 UNKNOWN
プロトコルフレームは生データとして保存され、 sendRaw()
で送信されます。
ユニバーサル距離幅デコーダーで各IRフレームをデコードし、データを保存して、 sendPulseDistanceWidthFromArray()
でボタンを押して送信してください。
RAMが2k以下の場合、デコーダーはRAMスペースを節約するために最大2500マイクロ秒までのマークまたはスペース期間のみを受け入れます。
距離幅のプロトコルのデータを保存するには、17バイトが必要です。 Receiveandsendの例では、既知のプロトコルデータには16バイト、EGNECプロトコルの生データに37バイトが必要です。
IRリモートマクロエキスパンダーとして機能します。 Samsung32プロトコルを受信し、指定された入力フレームを受信すると、その間に適切な遅延がある複数のSamsung32フレームが送信されます。これは、私の古いSamsung H5273 TVのNetflix-Keyエミュレーションとして機能します。
さまざまなIRコードのプログラムのさまざまな機能を呼び出すためのフレームワーク。
リモートでリレー(出力ピンに接続)を制御します。
IRRECVクラスをIRRECVクラスをIrremoteから使用するユーザー定義クラスの例。
シリアル入力によって制御されるLGエアコンIRコードを送信する例。
関数bool Aircondition_LG::sendCommandAndParameter(char aCommand, int aParameter)
を使用するだけで、他のコマンドソースでエアコンを制御できます。
ファイルACLG.Hには、LGエアコンIRプロトコルのコマンドドキュメントが含まれています。 LG AKB73315611リモートのリバースエンジニアリングに基づいています。
Ireceivertiminganalysisは、シミュレーションが実行されている間にWOKWIを[レシーバー]でクリックして、個々のIRコードを指定してオンラインでテストできます。
AEG / ELEKTROLUX HOB2HOODプロトコルの受信と送信の例。
この例では、IRレシーバーモジュールによって配信される信号を分析します。値を使用して、受信信号の安定性と、プロトコルを決定するためのヒントを決定できます。
また、 MARK_EXCESS_MICROS
値を計算します。これは、IRレシーバーモジュールによって導入されたマーク(パルス)持続時間の拡張です。
Wokwiでオンラインでテストできます。シミュレーション中にレシーバーをクリックして、個々のNEC IRコードを指定します。
1つのプログラムでemo + senddemoを受信しました。送信中の受信を示します。ここでは、IRダイオード入力(黄色)からの受信機出力(青)の遅延が表示されます。
シンプルなレシーバー
IRキー5によるシンプルなトグル
Tinyreceiver
receivertiminganalysis
LCD出力およびスイッチステートメントを備えたレシーバー
Arduino pwmmotorcontrolライブラリのこの例は、Irremote Libraryを使用してロボット車の基本的な機能を制御します。
各チャネルに2つのPWMモーターチャネル、2つのモーターを制御します。
ここでは、車のアセンブリとコードの指示可能なものを見つけることができます。
TL1838 IRレシーバーを備えたIR_ROBOTCARが拡張ボードに接続されています。
いくつかの例を最初にテストせずに問題を開かないでください!
問題がある場合は、この問題を示すMCVE(最小限の検証可能な例)を投稿してください。私の経験では、ほとんどの場合、このMCVEを作成しているときに問題を見つけることです。
コードブロックを使用します。私たちがあなたのコードを読むことができるときにあなたを助けるのに役立ちます!
ライブラリをさまざまな要件にカスタマイズするには、いくつかのコンパイルオプション /マクロがあります。
これらのマクロは、有効にするために、 #include <IRremote.hpp>
の前にプログラムで定義する必要があります。
それらを有効 /無効にしてそれらを変更するか、該当する場合は値を変更します。
名前 | デフォルト値 | 説明 |
---|---|---|
RAW_BUFFER_LENGTH | 200 | 生の入力UINT16_Tバッファのバッファサイズ。偶然でなければなりません!小さすぎる場合、オーバーフローフラグが設定されます。最大48ビットの定期的なプロトコルには100で十分ですが、ほとんどのエアコンプロトコルでは、最大750の値が必要です。 Receecumpの例を使用して、要件の最小値を見つけます。 200の値には200バイトRAMが必要です。 |
EXCLUDE_UNIVERSAL_PROTOCOLS | 無効 | パルス距離幅プロトコルのユニバーサルデコーダーと、 decode() からデコードハッシュ(すべてのプロトコルの特別なデコーダー)を除外します。最大1000バイトのプログラムメモリを節約します。 |
DECODE_<Protocol name> | 全て | デコードされる個々のプロトコルの選択。複数のプロトコルを指定できます。ここを参照 |
DECODE_STRICT_CHECKS | 無効 | 一定のマークプロトコルのマークの長さのようなプロトコルタイミングの追加の必要な特性を確認してください。スペースの長さがビット値を決定します。プログラムメモリの最大194バイトを追加する必要があります。 |
IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK | 無効 | プログラムメモリの最大60バイトと2バイトのRAMを節約します。 |
MARK_EXCESS_MICROS | 20 | MARK_EXCESS_MICROSはすべてのマークから差し引かれ、デコード前にすべてのスペースに追加され、異なるIRレシーバーモジュールの信号形成を補正します。 |
RECORD_GAP_MICROS | 5000 | プロトコルの終わりを検出するためのIR送信間の最小ギャップ。 4500 µsのNECヘッダースペースなど、プロトコルのどのスペースよりも大きくなければなりません。 コマンドと繰り返しの間のどのギャップよりも小さい必要があります。たとえば、ソニーの再送信ギャップは約24ミリ秒です。 これは、受信コマンドの終了とデコードの開始の間の遅延であることに留意してください。 |
DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE | 50 ram <= 2kの場合、その他200 | 200の値を使用すると、マークまたはスペース期間を10ミリ秒までデコードできます。 |
IR_INPUT_IS_ACTIVE_HIGH | 無効 | アクティブな高出力信号を持つRFレシーバーを使用する場合、有効にします。 |
IR_SEND_PIN | 無効 | 指定されている場合、プログラムのサイズを削減し、AVRの送信タイミングを改善します。変数を使用してsetSendPin(uint8_t aSendPinNumber) を使用して送信ピンEGを指定する場合は、ソースでこのマクロを使用 /無効にしないでください。 |
SEND_PWM_BY_TIMER | 無効 | ソフトウェアのキャリアPWM生成を無効にし、ハードウェアPWM(タイマーによる)を使用します。より正確なPWM生成、特に義務CYCの利点があります
拡大する
追加情報
関連アプリ
おすすめ
関連情報
すべて
|