Arduino Mega 2560 LESSON:14 赤外線受信モジュール
概要
赤外線受信モジュールを接続するレッスンです。
完成図は以下のとおりです。
KiCADで追加した部品
- Conn_01x03:Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)
- +5V
- GND
- PWR_FLAG
KiCADで追加したフットプリント
- Conn_01x03:Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical
- Conn_01x03:Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical
PCB図は以下のようなもの。
3DPreview図は以下のようなもの。
コードは以下のとおりです。
//www.elegoo.com
//2023.05.05
#include "IRremote.h"
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11
/*-----( Declare objects )-----*/
IRrecv irrecv(receiver); // create instance of 'irrecv'
//vairable uses to store the last decodedRawData
uint32_t last_decodedRawData = 0;
/*-----( Function )-----*/
void translateIR() // takes action based on IR code received
{
// 受信したプロトコル名を表示
Serial.print("Protocol: ");
Serial.println(getProtocolString(irrecv.decodedIRData.protocol));
// Check if it is a repeat IR code
if (irrecv.decodedIRData.flags)
{
//set the current decodedRawData to the last decodedRawData
irrecv.decodedIRData.decodedRawData = last_decodedRawData;
Serial.println("REPEAT!");
} else
{
//output the IR code on the serial monitor
Serial.print("IR code:0x");
Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
}
//map the IR code to the remote key
switch (irrecv.decodedIRData.decodedRawData)
{
//標準NECプロトコル
case 0xBA45FF00: Serial.println("POWER"); break;
case 0xB847FF00: Serial.println("FUNC/STOP"); break;
case 0xB946FF00: Serial.println("VOL+"); break;
case 0xBB44FF00: Serial.println("FAST BACK"); break;
case 0xBF40FF00: Serial.println("PAUSE"); break;
case 0xBC43FF00: Serial.println("FAST FORWARD"); break;
case 0xF807FF00: Serial.println("DOWN"); break;
case 0xEA15FF00: Serial.println("VOL-"); break;
case 0xF609FF00: Serial.println("UP"); break;
case 0xE619FF00: Serial.println("EQ"); break;
case 0xF20DFF00: Serial.println("ST/REPT"); break;
case 0xE916FF00: Serial.println("0"); break;
case 0xF30CFF00: Serial.println("1"); break;
case 0xE718FF00: Serial.println("2"); break;
case 0xA15EFF00: Serial.println("3"); break;
case 0xF708FF00: Serial.println("4"); break;
case 0xE31CFF00: Serial.println("5"); break;
case 0xA55AFF00: Serial.println("6"); break;
case 0xBD42FF00: Serial.println("7"); break;
case 0xAD52FF00: Serial.println("8"); break;
case 0xB54AFF00: Serial.println("9"); break;
default:
Serial.println(" other button ");
}// End Case
//store the last decodedRawData
last_decodedRawData = irrecv.decodedIRData.decodedRawData;
delay(500); // Do not get immediate repeat
} //END translateIR
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600);
Serial.println("IR Receiver Button Decode");
irrecv.enableIRIn(); // Start the receiver
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
if (irrecv.decode()) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
}/* --(end main loop )-- */
いろいろなリモコンコードを取得するのは以下のコード
#define RAW_BUFFER_LENGTH 750
#include <IRremote.hpp>
const int IR_RECEIVE_PIN = 11;
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
Serial.println("IR Remote Analyzer");
Serial.println("TV / Recorder / Air Conditioner");
Serial.println("Toshiba / Daikin signal investigation");
}
void loop() {
if (IrReceiver.decode()) {
Serial.println();
Serial.println("============================");
// 受信バッファが足りなかった場合
if (IrReceiver.decodedIRData.flags &
IRDATA_FLAGS_WAS_OVERFLOW) {
Serial.println("WARNING: Buffer overflow!");
}
// ライブラリによるプロトコル解析
IrReceiver.printIRResultShort(&Serial);
// 受信ビット数
Serial.print("Bits: ");
Serial.println(IrReceiver.decodedIRData.numberOfBits);
// リピート判定
if (IrReceiver.decodedIRData.flags &
IRDATA_FLAGS_IS_REPEAT) {
Serial.println("Repeat signal");
}
// 生のパルスデータ
Serial.println("--- Raw Timing ---");
IrReceiver.printIRResultRawFormatted(&Serial, true);
Serial.println("============================");
IrReceiver.resume();
}
}