質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Arduino

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

Q&A

解決済

4回答

4969閲覧

赤外線リモコン受信モジュールとリモコンで16進数っぽいので決めたLEDを光らせたいのですがどう書けばいいのかわかりません。

OtoMura

総合スコア22

Arduino

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

0グッド

0クリップ

投稿2018/10/14 14:43

int ir = 7; int A = 13; int B = 12; int C = 11; void setup() { Serial.begin(9800); //モニターに出力するための設定 pinMode(ir,INPUT); //2ピンに接続した赤外線センサ pinMode(A,OUTPUT); //3ピンに接続したLED pinMode(B,OUTPUT); pinMode(C,OUTPUT); } void loop() { if(digitalRead(ir)==8F71FE0){  ここがダメでした digitalWrite(A,HIGH); delay(80); }else{ digitalWrite(A,LOW); } }

8F71FE0というのでひかるLEDを決めて光らせたいです。
うまくいったらこれを3つつけてできるのか試したいです。

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

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

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

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

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

guest

回答4

0

Arduinoには、IRremoteという赤外線リモコン用のライブラリがあるので、それを利用すべきだと思います。
(自由自在にArduinoのハードウェアと、プログラムを操れるようになってから、自前のコードの開発にかかったのほうが良いです)

Arduinoで赤外線リモコンの値を読み取り、送信する方法のような記事が参考になるでしょう。

==
digitalRead(inputPin)という関数は、inputPinで指定した入力ピンに入っている電圧が低い(LOW)か高い(HIGH)かを返すものです。

赤外線リモコンから出力される赤外線の波形が返される訳ではありません。

この説明で、下記の部分のコードでは、なぜダメかという事が理解できますか?

if(digitalRead(ir)==8F71FE0){  ここがダメでした

投稿2018/10/17 12:46

coco_bauer

総合スコア6915

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

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

OtoMura

2018/10/18 13:50

返信遅れてすみません。 赤外線リモコン関係を初めて扱ったのでそのコードのダメな理由もわからずとりあえずつ作ろうというノリで作りました。 すみませんが理由と正しいコードを教えてもらえますか?
OtoMura

2018/10/20 03:56

ありがとうございました。
guest

0

https://deviceplus.jp/hobby/entry023/

こちらを参考にしてみてください。

投稿2018/10/17 12:31

mappy

総合スコア65

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

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

OtoMura

2018/10/18 13:50

ありがとうございます。
mappy

2018/10/19 10:48

URLのシリアルモニタで表示されている Unknown encoding: ******* (32bit) の*******の部分をメモに控えて、if文なりswitch文なりで振り分ければいいです。 long irr_value = results->value; で*******の部分がirr_valueに格納されるはずです。
OtoMura

2018/10/19 13:02

ありがとうございます。 ちょっと試して見ます。
OtoMura

2018/10/19 13:37 編集

すみません。わかりませんでした。 よければ具体的なプログラムを書いて貼ってもらえますか?
OtoMura

2018/10/20 03:56

ありがとうございました。 どうにかできました。
guest

0

自己解決

このプログラムはIRremoteの必要なとこを抜き出して作ったものです。

#include <IRremote.h>
int recvPin = 7;
IRrecv irrecv(recvPin);

void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}

void ircode (decode_results *results) {
Serial.print(results->value, HEX);
}
void dumpInfo (decode_results *results)
{
if (results->overflow) {
Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN");
return;
}
Serial.print(results->value);

if (results->value == 150413280) { //results->valueに赤外線リモコンから受け取ったそれ
digitalWrite(13, HIGH); //ぞれのデータが入ってるので(results->value ==
Serial.print("光ったよーー"); //150413280)をいじってやるとうまくいきます。
delay(100);
digitalWrite(13, LOW);
}
if (results->value == 150413025) {
digitalWrite(12, HIGH);
Serial.print("光ったよーー2");
delay(100);
digitalWrite(12, LOW);
}
}

void loop() {
decode_results results;
if (irrecv.decode(&results)) { // Grab an IR code
dumpInfo(&results); // Output the results
Serial.println(""); // Blank line between entries
irrecv.resume(); // Prepare for the next value
}

}

結果

150413280光ったよーー
4294967295
150413280光ったよーー
150413025光ったよーー2
150413280光ったよーー
4294967295
150413280光ったよーー
150413025光ったよーー2

こんな感じでできました。

投稿2018/10/20 03:54

OtoMura

総合スコア22

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

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

mappy

2018/10/21 15:23

if文の赤外線リモコンから受け取ったデータを10進で150413280と記載していますが 16進で表記する際は0x08F71FE0と先頭に0xをつける必要があります。 最初の投稿のプログラムでも if(digitalRead(ir)==8F71FE0){  ここがダメでした と書かれていますが、正しくは if(digitalRead(ir)==0x8F71FE0){ です。但し、修正したからと言って動かないとおもいますが、今後の参考までに。
OtoMura

2018/10/28 02:01

なるほどありがとございます
guest

0

いまいち意味不明だけど、リモコンのLEDをシリアル通信で光らせてみればお望みのことができるかと思われますが

投稿2018/10/14 14:55

編集2018/10/14 15:08
y_waiwai

総合スコア87719

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

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

OtoMura

2018/10/14 15:14

赤外線のリモコンでやりたいんですがボタンの区別がわかりません
OtoMura

2018/10/14 15:15

こんな感じのやつです
y_waiwai

2018/10/14 23:54

ならそのリモコンからどういうデータが出ているのか調べて、そのデータを受信できるようなコードを組む必要がありますねー
OtoMura

2018/10/15 13:02

そのコードを教えてもらえますか?
OtoMura

2018/10/15 13:06

コードは Code : 8F71FE0 (32 bits) Timing[67]: +9050, -4400 + 650, - 500 + 600, - 500 + 650, - 450 + 650, - 500 + 600, -1600 + 650, - 500 + 600, - 500 + 650, - 450 + 650, -1600 + 650, -1550 + 650, -1600 + 650, -1600 + 600, - 500 + 600, -1600 + 650, -1600 + 650, -1600 + 600, - 500 + 650, - 450 + 650, - 500 + 600, -1600 + 650, -1600 + 600, -1600 + 650, -1600 + 600, -1600 + 650, -1600 + 650, -1550 + 650, -1600 + 650, - 450 + 650, - 500 + 600, - 500 + 650, - 500 + 600, - 500 + 600 unsigned int rawData[67] = {9050,4400, 650,500, 600,500, 650,450, 650,500, 600,1600, 650,500, 600,500, 650,450, 650,1600, 650,1550, 650,1600, 650,1600, 600,500, 600,1600, 650,1600, 650,1600, 600,500, 650,450, 650,500, 600,1600, 650,1600, 600,1600, 650,1600, 600,1600, 650,1600, 650,1550, 650,1600, 650,450, 650,500, 600,500, 650,500, 600,500, 600}; // NEC 8F71FE0 unsigned int data = 0x8F71FE0; の<8F71FE0>だと思うのですがあってますか?
y_waiwai

2018/10/15 22:55

まずは実際に受信したタイミングをシリアルで出力してみては。 実際に受信したタイミングをを見比べればどうすればいいかわかるでしょ #そのタイミングが安定的に出てくれるのか、もチェックして
OtoMura

2018/10/20 03:55

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問