🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

1664閲覧

赤外線のUNKNOWNについて

Alyn

総合スコア51

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/03/02 11:19

編集2021/03/02 12:56

前提・実現したいこと

Arduinoで赤外線で以下のデータを送信したいです。
しかしdecode_typeがUNKNOWNのため、どうやって送信すればよいかわかりません。
どの関数を使用して送信すればよいか教えてください。

※取得したリモコンはLuminous製です。

decode_typevaluebitsSizerawbufrawlen
-16A5F97E33214127884

赤外線を受信したソースコード

Arduino

1#include <IRremote.h> 2 3int Recvpin = 11; 4int Ledpin = 12; 5 6IRrecv irrecv(Recvpin); // create instance of 'irrecv' 7decode_results results; // create instance of 'decode_results' 8 9void setup() 10{ 11 Serial.begin(9600); 12 Serial.println("IR Receiver Button Decode"); 13 irrecv.enableIRIn(); // Start the receiver 14 Serial.print("decode_type"); Serial.print('\t'); 15 Serial.print("value"); Serial.print('\t'); 16 Serial.print("bits"); Serial.print('\t'); 17 Serial.print("Size"); Serial.print('\t'); 18 Serial.print("rawbuf"); Serial.print('\t'); 19 Serial.println("rawlen"); 20} 21 22void loop() 23{ 24 int result = 0; 25 26 if(irrecv.decode(&results)) 27 { 28 Serial_print(); 29 irrecv.resume(); 30 } 31} 32 33void Serial_print() 34{ 35 int SIZE = (sizeof(results.rawbuf) / sizeof(int)); 36 Serial.print(results.decode_type); 37 Serial.print('\t'); 38 Serial.print(results.value, HEX); 39 Serial.print('\t'); 40 Serial.print(results.bits); 41 Serial.print('\t'); 42 Serial.print(SIZE); 43 Serial.print('\t'); 44 for(int i = 0; i < SIZE; i++) 45 { 46 Serial.print(results.rawbuf[i]); 47 Serial.print('\t'); 48 } 49 Serial.println(results.rawlen); 50}

使用機材

Arduino Uno Rev3
AX-1838HS (Infrared Receiver Module)

追記

上記表で取得したデータはIRremoteライブラリを使用したものであるため、正しく取得できていないかもしれません。
なので他に正しく取得する方法がございましたら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下の赤外線受信コードでシグナルを取得した最頻値をirLight[]に格納し、IRremoteライブラリを使用した赤外線送信コードで無事に実装できました。

【参考ページ】
https://hawksnowlog.blogspot.com/2017/01/control-infrared-with-arduino.html

【赤外線受信コード】

Arduino

1#define maxLen 800 2 3volatile unsigned int irBuffer[maxLen]; 4volatile unsigned int x = 0; 5 6void setup() { 7 Serial.begin(2000000); 8 attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE); 9 Serial.println(F("Press the button on the remote now - once only")); 10} 11 12void loop() { 13 if (x) { 14 Serial.print(F("Raw: (")); 15 Serial.print((x - 1)); 16 Serial.print(F(")\t")); 17 detachInterrupt(0); 18 for (int i = 1; i < x; i++) { 19 // if (!(i & 0x1)) Serial.print(F("-")); 20 Serial.print(irBuffer[i] - irBuffer[i - 1]); 21 Serial.print('\t'); 22 } 23 x = 0; 24 Serial.println(); 25 attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE); 26 } 27 delay(2000); 28} 29 30void rxIR_Interrupt_Handler() { 31 if (x > maxLen) return; 32 irBuffer[x++] = micros(); 33}

【赤外線送信コード】

Arduino

1uint16_t irLight[83] = {3528,1600,380,1340....}; 2irsend.sendRaw(irLight, 83, 38); 3irrecv.enableIRIn();

投稿2021/03/02 16:24

Alyn

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問