2011年8月19日星期五

Arduino软件生成遥控方波与AUX遥控器原始方波的对比

这篇博客是前面AUX遥控器红外信号分析的续篇。

由于红外协议有好几种,功力原因,分析起来比较困难,因此权衡之后,还是决定采取用软件方式,模拟AUX空调的遥控信号。

前面博文分析得出结论是,帧与帧之间的间隔(这个词语可能跟标准术语有区别,在此是指相邻的下降沿和上升沿之间的间隔时间)是760us,源代码中设置的间隔为912us,这个数字是综合考虑delay以及源程序中其它指令的耗时等因素,以及考察红外方波波形之后计算所得。

而实际产生的波形与遥控器的原始波形之间,存在比较大的差异,而且这个差异比较怪异,
  1. 整个信号宽度比原始信号要宽出一截(见图1);
  2. 1T、2T波形的宽度有比较大的差距,比原始信号要宽(见图2);
  3. 4T比原始信号宽度要窄(见图3);
  4. 两个9T信号之间几乎没有差别(见图3)。
图1

图2

图3



源代码:


char *strOpen="000000000111101101101010101011011011011011010101010110101010101011011011011010101101010101010101010101011010101010101010101010101010101101010101010101010101010101010101010101010101010110101010101010101101101101101011010101010101010101101101010110";

int lenOfOpen =246;
unsigned int openCode[246];
int pinOut= 28;

void setup()
{
  pinMode(pinOut,OUTPUT);
  Serial.begin(9600);
  StringToArray();

}

void StringToArray()
{
  int i;
  char c;

  for (i=0; i<lenOfOpen; i++)
  {
    c= strOpen[i];

    //Serial.print(c);
    //Serial.print('|');


    if (c=='1')
      openCode[i]=1;
    else
      openCode[i]=0;

    //debug mode
    //Serial.println(openCode[i]);

  }
}

void loop()
{
  int i;
  for (i=0; i< lenOfOpen; i++)
  {
    digitalWrite(pinOut, openCode[i]);
    delayMicroseconds(912);
    //Serial.println(openCode[i]);
  }
}

需要重新计算间隔时间。


没有评论:

发表评论