SCM赤外線受信アルゴリズム

現在、市場での赤外線リモコンは、このようなようにテレビのリモコン、リモコン照明、リモートコントロールのおもちゃとして、より広く使用しました。

ここでは主に書かれた赤外線リモコン受信機、コードの赤外線受信機を見てコードを紹介:

  1  空隙 user_gpio_init(ボイド  2  {
   3    / * <出力プッシュプル、ローレベル、10MHzの!* / 
  4    GPIO_Init(GPIOC、GPIO_PIN_LNIB、GPIO_MODE_OUT_PP_LOW_SLOW)。// FI 0..3 
  5    GPIO_Init(GPIOC、GPIO_PIN_4、GPIO_MODE_OUT_PP_LOW_SLOW)。// BI 
  6    / * !<入力プルアップ、外部割込み* / 
  7    GPIO_Init(GPIOC、GPIO_PIN_7、GPIO_MODE_IN_PU_IT)。   // データ
  8    / * 選択したポートの外部割り込み感度を設定し@brief。* / 
  9    / *!<割り込み立ち下がりエッジでのみ* / 
10    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC、EXTI_SENSITIVITY_FALL_ONLY)。
11  }
 12  //は割り込みルーチン
13  空隙 portC_isr(ボイド14  {
 15    静的U8のone_byteと、
16    静的U8指数;
17    静的U8のbits_of_byte。
18    スイッチ(IR_State)
 19    {
 20    ケースIDL:
 21      {
 22        time_125us = 0 23       IR_State ++ ;
24        ブレーク;
25      }
 26    ケースSTART:
 27      {
 28が       あれば(time_125us> 104// OK、準備完了データを受信するための
29        {
 30          time_125us = 0 31          one_byte = 0 32          インデックス= 0 33          bits_of_byte = 0 34          IR_State ++ ;
35        }
 36        IR_State-- ;
37        ブレーク;
38      }
 39    ケースDATA:
 40      {
 41        であれば((time_125us < 14)&&(time_125us> 6))// 0 
42        {
 43          one_byte << = 1 44          bits_of_byte ++ ;
45        }
 46        他の 場合((time_125us> 14)&&(time_125us < 23))// 1 
47        {
 48          one_byte << =1 ;
49          one_byte + = 1 ;
50          bits_of_byte ++ ;
51        }
 52        他の
53        {
 54          IR_State = IDL。
55        }
 56        time_125us = 0 57        であれば(bits_of_byte> = 8// 得1バイト準備
58        {
 59          g_u8arr_buf [インデックス++] = one_byte。
60          time_release_125us = 0 61          もし(インデックス> = 4 62          {
 63            // __disable_interrupt()。
64            であれば((g_u8arr_buf [ 3 ] == 0x13に)&&(g_u8arr_buf [ 2 ] == 0xEC)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の// 0x00FFEC13 
65            {
 66              なら g_motor_busy(! = $ 00 67              {
 68                エンジン停止。
69                g_motor_busy = 0 70              }
 71            }
 72            他の 場合((g_u8arr_buf [ 3 ] == $ 53)&&(g_u8arr_buf [ 2 ] == 0xACの)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の// 0x00FFAC53 
73            {
 74              // time_release_125us = 0; 
75              であれば(g_motor_busy =!0x5a 76              {
 77                MotorForward。
78                g_motor_busy = 0x5a;
79              }
 80            }
 81            他の 場合((g_u8arr_buf [ 3 ] == 0x33の)&&(g_u8arr_buf [ 2 ] == 0xCC)&&(g_u8arr_buf [ 1 ] == 0xFFで)&& g_u8arr_buf [ 0 ] == 0x00の// 0x00FFCC33 
82            {
 83              // time_release_125us = 0。
84              であれば(g_motor_busy =!0x3cの85              {
 86                MotorBackward。
87                g_motor_busy =0x3cの;
88              }
 89            }
 90            他の
91            {
 92              であれば(!g_motor_busy = $ 00 93              {
 94                MotorStop。
95                g_motor_busy = 0 96              }
 97            }
 98            IR_State = IDL。
99            // __enable_interrupt(); 
100          }
 101          bits_of_byte = 0 102          one_byte =0 ;
103        }
 104        ブレーク105      }
 106    デフォルト107      {
 108        IR_State = IDL。
109        ブレーク110      }
 111    }
 112 }

共通の赤外線コードの形式は:ヘッダは、データ送信開始後13.5ms信号です。エンコードされたデータは、約1ミリ秒で約2msの1又は0を表し、0又は1を表します。これは、定義された自分自身を見ることが主な理由です。

アルゴリズムの焦点は、タイマーの精度、および赤外線連続読み出しの感度を調整されています。

 

おすすめ

転載: www.cnblogs.com/lumao1122-Milolu/p/11411130.html