请让我知道如何使用 C 或 C++ 解码红外遥控代码。
4 回答
好吧,我不知道 C++,但这里是 C#:
void ReadRemote()
{
while(!Console.KeyAvailable)
Console.Write(DecoderClass.ReadIR(IRType.TVRemoteControl));
}
不同的制造商使用不同的编码方案、不同的时序,甚至不同的调制频率。典型的 IR 接收器传感器在硬件中执行解调,以便输出逻辑脉冲序列而不是OOK调制信号。接收器需要匹配发射器的调制频率。如果要接收多个调制频率,则必须使用简单的 IR 光电二极管并为每个感兴趣的调制频率提供自己的 OOK 载波检测器电路,或者使用多个接收器。
获得解调脉冲序列后,只需根据特定制造商的编码方案对其进行解码即可。我只为索尼 SIRC遥控器做过此操作,以将其用作机器人控制器。传感器触发中断并且脉冲定时被锁定在每个中断上。如果您的设备具有输入捕获和比较计时器硬件,您可以减少开销并提高准确性(尽管这可能不是必需的)。
这里有很多关于不同协议和制造商的资源
要么购买一些硬件,然后进行 C 或 c++ api 调用(例如 lirc)。或者,如果您有兴趣解码协议并使用软件而不是硬件来完成,那么您想使用微控制器。
它既有趣又简单,我推荐它作为第一个微控制器项目。有一些流行的协议,大多数是几个主题的变体。基本上你会得到一个接收器,你可以从 radio shack 那里得到,尽管以前 radio shack 中的无线电组件的数量(也许这就是他们将名称改为 shack 的原因)要少得多,并且被埋在一个小抽屉里商店的后面,很快就不见了。无论如何,在那里获得一个接收器或digikey或mouser,一个微控制器,计算上升沿和下降沿之间的时钟滴答数(接收器已移除~40Khz载波频率)将这些时间与预期的协议进行比较,并从零开始确定。只需一个微控制器和一个红外灯就可以进行传输,但有点棘手,因为您需要进行调制。
多协议接收器可能不如特定协议接收器好,就像 gcc 在任何一个平台上都不是很好,但在所有平台上都很好。构建自己的产品很有趣,有教育意义,并且通常会产生更好的接收器,尽管您无法匹配批量生产产品的价格。部分问题还与载波频率变化有关,理想情况下,您希望选择与您使用的协议的载波频率相匹配的接收器。它会有所不同,例如,您可以在 30 英尺之外,而不是 8 英尺远。它也可以在 3 英尺外工作,但不能在 1 英尺或 3 英寸外工作。之类的东西。