设为首页 加入收藏

TOP

WinCE下用C++实现掌上电脑遥控TV(二)
2014-11-23 19:56:29 】 浏览:503
Tags:WinCE 下用 实现 掌上电脑 遥控
代码6次
  for(int x=0;x<6;x++) {
   MakeStream(lValue); //发送代码
   dwCount=GetTickCount();
   while(GetTickCount()    i++;
  }
  return true;
}
  注意这个函数调用另外一个函数MakeStream(long)6次,每两次调用之间停顿26毫秒。我发现该代码必须发送好几次才能使接收设备响应,大概是为防止假行为的缘故吧。26毫秒对于接收设备登记该代码是必需的,在下一个代码出现之前。

  这个函数MakeStream(long)把字节流写入IrPort,并根据是否有起始位(1或者0)来确保发送正确的数据包长度。包含数据字节(0xdb)的缓冲区是以一个ByteArray形式存在的。

  函数Close()用于在端口使用后,自然地关闭IrPort。

  这个函数在我的ornada上运行良好。请看下面的讨论以进一步确定你要做的可能性改变。

BOOL CIrPulse::MakeStream(DWORD lValue) {
  DWORD dwStreamLength;
  //创建开始脉冲
  dwStreamLength=iHPulse/charWidth;
  ASSERT(Write((const char *)bPulseStream.GetData(),
  dwStreamLength)==dwStreamLength);
  // ************************************
  // ***** 在下一个脉冲到来前延迟一段时间
  // ************************************
  //循环操作代码中的位来发送脉冲
  for(int i=0;i   if(lValue & 1) {
    //创建一个脉冲1
    dwStreamLength=i1Pulse/charWidth;
    ASSERT(Write((const char *)bPulseStream.GetData(),
    dwStreamLength)==dwStreamLength);
    // *********************************
    // ***在下一个脉冲到来前延迟一段时间
    // *********************************
   }
   else {
    //创建一个脉冲 0
    dwStreamLength=i0Pulse/charWidth;
    ASSERT(Write((const char *)bPulseStream.GetData(),
    dwStreamLength)==dwStreamLength);
    // ********************************
    // **在下一个脉冲到来前延迟一段时间
    // ********************************
   }
   lValue >>= 1;
  }
  return TRUE;
}

  我在所附源代码中包含了一个简单的应用程序,它使用CIrPulse来创建一台索尼TV的远距离遥控。它具有基本的频道选择、音量调整和开/关机的功能。

 
 4. 特别注意

  因为该CIrPort类使用一个串行端口连接到该IR端口,所以必须生成一个40KHz的载波信号,这通过从该串行端口发送恰当的字符来实现。幸好,如果我们发送字符0xdb,以115200波特,用8个数据位,2个停止位和奇偶校验,这样就能产生一种极接近38.4KHz的载波信号。我们所有的索尼设备接收这种数据是没有问题的。

  最大的问题是,如何实现间隔每次脉冲的沉默周期。不可能由串行端口来产生该沉默周期,因为就算你发送一个0x0字符,由于存在起始和停止位,你仍然在该IR上得到脉冲。我通过发送不同的字符进行试验,依据的前提是如果你不以40KHz的频率发送一个载波信号,这有可能使设备误把这个当作一个沉默。这样做的优点是你可以产生一个包含完整的代码的byteArray,以确保准确计时。但是结果并不一致,所以我拒绝使用这个方法,为的是实现在两次从串行端口发出成组的0xdb字符之间支持暂停。因为需要的延迟是以550μs的顺序;到目前为止,我还没有找到取得独立于处理器速度的暂停的方法。在我的Jornada上,是完全不必产生一个延迟的,
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++动态链接库编程之MFC扩展 DLL 下一篇Visual C++中DDB与DIB位图编程全..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目