微雪官网产品资料
立即注册 找回密码

QQ登录

只需一步,快速开始

微雪课堂

搜索
微雪课堂 首页 智能车 查看内容

树莓派智能车AlphaBot教程4:遥控

2017-5-3 10:56| 发布者: kaloha| 查看: 4281| 评论: 0|原作者: 微雪电子

摘要: 遥控是小车的一个重要功能,常用的要控制方式有红外,蓝牙,wifi, NRF等。遥控程序大概类似,就是小车接受到传输过来的命令然后做相应的动作,只是传输的方式不一样而已。本章主要讲解红外以及蓝牙,后面章节讲到wif ...
遥控是小车的一个重要功能,常用的要控制方式有红外,蓝牙,wifi, NRF等。遥控程序大概类似,就是小车接受到传输过来的命令然后做相应的动作,只是传输的方式不一样而已。本章主要讲解红外以及蓝牙,后面章节讲到wifi.
红外遥控:
小车采用LFN0038K接收头,可以接受红外信号。配套的红外遥控器输出的脉冲信号遵循标准的NEC编码协议。
红外 NEC 协议编码采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的"0";以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1


协议:
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如下图。

| 引导码 | 用户识别码 |用户识别码反码 | 操作码 | 操作码反码 |
首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码
一个命令只发送一次,即使遥控器上的按键一直按着。但是会每110mS发送一次重复码,直到遥控器按键释放。重复码比较简单:一个9mSAGC脉冲、2.25mS间隔、560uS脉冲。

一次完整的命令脉冲如下图:


蓝牙遥控
蓝牙遥控通常采用蓝牙模块,蓝牙模块一般采用TTL串口控制。配对后即可作为全双工串口使用,无需了解任何蓝牙协议。Alphabot2-Ar留有Xbee接口,可以接入双模蓝牙串口模块。

蓝牙模块发送命令可以是一个字符或者字符串,如下图ardiono程序。单片机接受到字符串是判断是否和已知的命令相匹配,然后做出相应动作。


当命令比较多时,可以采用JSON格式的命令,区分各种命令的类别。JSON格式如下。
{"Forward":"Down"}
{"Buzzer":"On"}
JSON格式分表示为键/值对组合,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值。上图中"Forward",“Buzzer”为键,对应两种不同命令。"Down","On"为值,表示命令的值。
接收到命令后可以通过JSON库解析对应的键,得到值。例如下面程序。通过arduino的JSON库解析“Forward”键的值,如果是“Down”表示按键按下,小车前进。如果是“Up”表示按键松开。小车停止。

cpp代码:

aJsonObject *Forward = aJson.getObjectItem(msg, "Forward");
  if (Forward)
  {
     String str = Forward->valuestring;
     if(str.equals("Down"))
     {
       forward();
       Serial.println("{\"State\":\"Forward\"}");
     }
     else if (str.equals("Up"))
     {
      stop();
      Serial.println("{\"State\":\"Stop\"}");
     }
  }



138

顶一下

刚表态过的朋友 (138 人)

相关阅读

最新评论

智能车

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号  

GMT+8, 2019-5-23 05:22 , Processed in 0.068026 second(s), 26 queries .

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc & Style Design

返回顶部