手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

用家里旧的红外遥控器控制树莓派小车

来源:本站整理 作者:佚名 时间:2019-05-09 TAG: 我要投稿

0×01 前言
红外遥控是一种无线、非接触控制技术,在工业控制、航空航天、家电等领域都得到了广泛应用。大部分的电视的遥控器,空调遥控器就都是红外遥控。在baidu上检索了树莓派小车的各种控制方案,没有?#19994;?#32418;外遥控的控制方案。所以本文尝试使用红外控制方案对树莓派小车进行控制。
0×02 所需材料
1. 树莓派小车。(树莓派小车的安?#23433;?#26159;本文重点,如果读者不熟悉小车的安装,请自行搜索。)
2. 红外接收头
型号:VS1838B(价格很便宜,几毛钱一个。)

3. 家里废旧的红外遥控器

0×03 红外通讯协议学习
遥控器的基带通信协议很多,大概有几十种,用的最多的就是 NEC 协议了,下面开始了解下NEC协议。

图 1 NEC 协议数据格式
NEC 协议的数据格式包括了引导码、用户码、用户码(或者用户码反码)、按键键码?#22270;?#30721;反码,最后一个停止位。停止位主要起隔离作用,一般不进行判断,编程时我们也不予理会。其中数据编码总共是 4 个字节 32 位。第一个字节是用户码,第二个字节可能也是用户码,或者是用户码的反码,具体由生产商决定,第三个字节就是当前按键的键数据码,而第四个字节是键数据码的反码,可用于对数据的?#26469;懟?br/> 注意: NEC 协议中的每一位数据?#26087;?#20063;需要进行编码,编码后再进行载波调制。
引导码:9ms 的载波+4.5ms 的空?#23567;?br/> 比特值“0”:560us 的载波+560us 的空?#23567;?br/> 比特值“1”:560us 的载波+1.68ms 的空?#23567;?br/> 红外接收头,当收?#25509;?#36733;波的信号的时候,会输出一个低电平,空闲的时候会输出高电平,我们用逻辑分析仪抓出来一个红外按键通过解码后的图形来了解一下,如图 2 所示。

  图 2  红外遥控器按键编码
从图上可以看出,先是 9ms 载波加 4.5ms 空闲的起始码,数据码是低位在前,高位在后,数据码第一个字节是 8 组 560us 的载波加 560us 的空闲,也就是 0×00,第二个字节是 8 组 560us的载波加 1.68ms 的空闲,可以看出来是 0xFF,这两个字节就是用户码和用户码的反码。按键的键码二进制是 0x0C,反码就是 0xF3,最后跟了一个 560us 载波停止位。对于我们的遥控器来说,不同的按键,就是键码?#22270;?#30721;反码的区分,用户码是一样的。这样我们就可以通过单片机的程序,?#35757;?#21069;的按键的键码给解析出来。
额外提一句:空调的遥控器比较特殊,用户码?#22270;?#30424;均存储数据。
0×04 监听红外遥控
VS1838B的3个管脚分别为OUT、GND、VCC。当收?#25509;?#36733;波的信号的时候,OUT管脚会输出一个低电平,空闲的时候会输出高电平。
本次将树莓派的18引脚作为红外接?#25214;?#33050;。
监听红外的机能代码如下:
#define IR_INPUT_PIN  (18)
#define ERROR  (0xFE)
// 请事先破获遥控器的各个键的按键码,然后与小车的前、后、左、右、停的行为相对应。
// 以下5个值需要与遥控器的按键码匹配。
#define IR_CONTROL_KEY_UP       (0x01)
#define IR_CONTROL_KEY_DOWN     (0x02)
#define IR_CONTROL_KEY_LEFT     (0x03)
#define IR_CONTROL_KEY_RIGHT    (0x04)
#define IR_CONTROL_KEY_STOP     (0x05)
// 信号量
sem_t g_edge_falling, g_edge_rising;
void setup();
void edgeFalling();
void edgeRising();
void GPIO_wait_for_edge(int event);
bool IRStart();
unsigned char getByte();
unsigned char getKey();
void setup()
{
    if(-1==wiringPiSetup())
    {
        std::cerr"wiringPi setup error"std::endl;
        exit(-1);
    }
   
    pinMode(IR_INPUT_PIN,INPUT);            //配置引脚为输入
    pullUpDnControl(IR_INPUT_PIN,PUD_UP);   //引?#27966;?#25289;到3.3v
    //注册中断处理函数
    if(0>wiringPiISR(IR_INPUT_PIN,INT_EDGE_FALLING,edgeFalling))
    {
        std::cerr"interrupt function[INT_EDGE_FALLING] register failure"std::endl;
        exit(-1);
    }
    if(0>wiringPiISR(IR_INPUT_PIN,INT_EDGE_RISING,edgeRising))
    {
        std::cerr"interrupt function[INT_EDGE_RISING] register failure"std::endl;
        exit(-1);
    }
}
void edgeFalling() {
    sem_post(&g_edge_falling);
}
void edgeRising() {
    sem_post(&g_edge_rising);

[1] [2] [3] [4]  下一页

?#26087;?#26126;】:黑吧安全网(http://www.rliwo.live)登载此文出于传递更多信息之目的,并不代表本站赞同其观点?#25237;?#20854;真实性负责,仅?#35270;?#32593;络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱[email protected],我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        购买彩票权威网址
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中
        以太币矿机购买 王八有特码 重庆时时彩的正规网址 ac米兰vs恩波利比分 马德里竞技对莱加内斯 富裕人生送彩金 快乐10分玩法介绍 微信棋牌群号大全 北京赛车pk10计划表 黑龙江快乐10分走势图