Arduinoで作ろう(24) 赤外線リモコンの信号解読
Arduinoの中華製シールドを収集するのが趣味なのですが,少し前に買った KEYESTUDIO多機能シールドVer.1 を使って,TVリモコンの赤外線信号解読をやってみました。
いろいろなパーツが載ってますが,赤外線レシーバ(たぶんVS1838)とブザーを使います。
I2CのLCDを接続できるピンも出てるので,コレをつないでみました。(リンク先の説明には,I2Cアドレスは0x27と書いてありますが,実際には0x3Fでした) このLCD用のライブラリはココでダウンロードできます。
/*
* SHARPリモコンの信号を赤外線レシーバで受信
*/#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2); // I2Cアドレス 0x3F, 16x2
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;void setup(){
//Serial.begin(9600);
lcd.init();
lcd.backlight();
irrecv.enableIRIn();
pinMode(5,OUTPUT);
}void loop() {
if (irrecv.decode(&results)) {
lcd.setCursor(0, 0);
lcd.print("HEX:");
lcd.print(results.value, HEX);lcd.print(" ");
lcd.setCursor(0, 1);
switch (results.value) {
case 0x5324450A:lcd.print("button: 1");break;
case 0xE072CF12:lcd.print("button: 2");break;
case 0xCB96DB61:lcd.print("button: 3");break;
case 0x2F834551:lcd.print("button: 4");break;
case 0x81041FF3:lcd.print("button: 5");break;
case 0x9B14063:lcd.print("button: 6");break;
case 0x1E5F84CF:lcd.print("button: 7");break;
case 0xAB5F67EF:lcd.print("button: 8");break;
case 0xF9792C4D:lcd.print("button: 9");break;
case 0x82264CBD:lcd.print("button:10");break;
case 0x2A0F2522:lcd.print("button:11");break;
case 0x7E31B95A:lcd.print("button:12");break;
default:lcd.print("button: ?");break; //1から12以外のボタンが押されたとき
}
for(int i=31;i>=0;i--){
digitalWrite(5,bitRead(results.value,i));
//Serial.print(bitRead(results.value,i));
}
//Serial.println("");
irrecv.resume(); // Receive the next value
}
delay(200);
}
スケッチはこちら→ 20190821_irremote.ino
SHARPのTVリモコンをIRレシーバに向けて操作すると,受信した信号を16進数で表示し,さらにswitch~caseで分けて,押されたボタンをLCDに表示するようにしてあります。他メーカーのリモコンなら,switch~caseの部分を書き換えればOKです。
あと,bitRead(results.value,i)で32桁のバイナリデータを取り出して,これでブザーを鳴らしています。押したボタンによって音が異なります。
| 固定リンク | 0
「Arduino」カテゴリの記事
- WCH-LinkE とWCH-Link は別モノである(2023.12.02)
- Arduinoで作ろう(63) UNO R4 WiFiでスクロールNTP時計(2023.12.01)
- Arduinoで作ろう(62) ESP8266+SSD1306でNTP時計(2023.11.18)
- 新型 Arduino UNO R4 MINIMA を買った(2023.07.01)