ハードウエア

追加部品は、赤外線受光モジュール 使用したのは 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