ハードウエア
追加部品は、赤外線受光モジュール 使用したのは PL-IRM1261-C438 です。
電源電圧範囲:2.4~5.5Vと3.3Vでも5Vでも動きます。
消費電流:2.5mA(無信号時)、38kHz用です。ノイズ防止用のシールドも付いています。
出力をPIO1_11につなぎました。
ソフトウエア
赤外線リモコンのフォーマットでWeb検索すると情報がでます。
日本での主なフォーマットは、NEC、SONY、家電製品協会(AEHA)になります。
そんなのお構いなしに、シリアルで流れてきた信号を10ビットの16進数のデータにしました。
UARTでパソコンに送り、使用するボタンの信号パターンを確認しておきます。
SONYのビデオリモコンデータ
数字は長さです、
再生 165 37 80 38 82 81 39 39 80 81 79 16進--> 167
停止 165 41 41 42 84 83 41 42 83 83 83 16進--> 067
165がスタートの合図、40前後を0、80前後を1としました。
結果として、再生が165、停止が67となりました。
プログラム
// IR リモコン
int16_t IR_in(void)
{
int16_t IR0 = 0;
int16_t IR;
int16_t IRx = 0;
int16_t t =0;
int8_t a = 0;
while(a < 10) //10bitで判断
{
IR = GPIOGetValue(1, 11); //IR入力
GPIOSetValue(2, 0, IR); // 赤外線によりLED Redを変化
if( IR == IR0)
{ // 赤外線の変化無し
t++;
if(t>1000)
{
t=0;
}
delay(1);
}
else // 赤外線の変化有り
{
if(IR == 1)
{
IRx = IRx << 1;
UART_printf("%u ",t);
a++;
if(t>70) //時間により 1 とする
{
IRx++;
if(t>120) //スタートビット
{
a=0;
IRx=0;
}
}
}
IR0 = IR;
t=0;
delay(1);
}
}
if(IRx>0)
{
UART_printf("*%x\n",IRx);
return IRx;
}
return 0;
}
こちらも利用させて頂きました。
void delay(int count)
{
int j=0,i=0;
for(j=0;j<count;j++)
{
/* At 48MHz, the below loop introduces delay of 10 μsec */
for(i=0;i<30;i++);
}
}
割り込みを使いたかったのですが、できませんでした。(理解不足 orz )
最終更新:2011年07月23日 20:18