公開: 2013/05/20
TVリモコンの受信プログラム
今回の内容
Japaninoを使って、TVリモコンの命令を赤外線で送信することでTVを動かします。そのために、TVリモコンの命令を受信して解読するプログラム(受信プログラムと呼ぶ)および受信回路を製作していきます。
前回と次回の内容
前回は、TVリモコンを作成するためのTVリモコンのフォーマットを説明しました。
次回は、TVリモコンの送信回路とプログラムについて説明していきます。
[追記] JapaninoでTVリモコンを作成するための記事をまとめましたので、ぜひご覧ください。
Japaninoでリモコン作成
受信用回路
受信用回路は、赤外線受信モジュールを、japaninoのD3に繋ぐだけです。もちろんjapaninoに電源をつなぐことを忘れずに。
受信用プログラム
作成したTVリモコン信号受信プログラムは以下の通りです。このプログラムは、VIERAでのみ動作を確認しました。
#define READ_PIN 3 // 赤外線受信モジュール ピン番号 int Limit; //HIGHとLOWの閾値 // 初期化処理 void setup() { Limit = 1000; //HIGHとLOWの閾値 : 1000us Serial.begin(9600); // パソコン(ArduinoIDE)とシリアル通信の準備を行う pinMode(READ_PIN,INPUT); // 赤外線受信モジュールに接続ピンをデジタル入力に設定 Serial.println("Receive data..."); } // メインの処理 void loop() { unsigned long dt; //offかon時間計測用 int i , cnt; int receiveData[64]; dt = 0; if (digitalRead(READ_PIN) == LOW) { //点灯したら /* リーダ部のチェックを行う */ dt = micros(); //現在の時刻(us)を得る while (digitalRead(READ_PIN) == LOW) ; //点灯時間の計測 dt = micros() - dt; //点灯時間 } /* リーダ部有りなら処理する(3400us以上のonにて判断する) */ if (dt >= 3400) { //点灯時間が3400us以上なら、処理する i = 0 ; while(digitalRead(READ_PIN) == HIGH) ; //ここまでがリーダ部 offを読み飛ばす // データ部の読み込み while (1) { while(digitalRead(READ_PIN) == LOW) ; //消灯するまで待つ dt = micros(); //off時間の測定開始 cnt = 0 ; while(digitalRead(READ_PIN) == HIGH) { //消灯したら、off時間計測 delayMicroseconds(10) ; //10us単位で cnt++ ; if (cnt >= 1200){ //12000us(12ms)以上 offならエラー break ; } } dt = micros() - dt; //off時間 if(dt >= 10000){ //10000us(10ms)以上ならストップデータ Serial.println("Stop"); break; } if(dt >= Limit){ //Limit(1000us)以上なら 1 receiveData[i] = 1 ; } else{ //Limit(1000us)未満なら 0 receiveData[i] = 0 ; } i++; } // データ有りなら表示を行う if (i != 0) { printData(i, receiveData); } } } // 受信データをシリアルモニタ画面に送り表示をさせる処理 void printData(int num, int *data) { for(int i=0; i<num; i++){ if(i%4 == 0){ Serial.print(" "); } Serial.print(","); Serial.print(data[i]); } Serial.println("\n"); }
このプログラムを前回のようにJapaninoへ書き込み、実行する(図2)。実行したら、赤外線受信モジュールに向かってテレビのリモコンを向けてボタンを押してください(図3)。リモコンが送信したデータ(0,1の信号)が受信されると思います(図4)。
<< リモコンのフォーマットへ | 送信用プログラムへ >> |