[*Altar小车动起来*]3. 红外遥控-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10977|回复: 4

[*Altar小车动起来*]3. 红外遥控

[复制链接]
发表于 2016-11-18 18:18 | 显示全部楼层 |阅读模式
本帖最后由 vickywong 于 2016-11-18 18:34 编辑

    用自带的红外遥控器控制小车,需要先知道遥控器每个键的键值。然后定义哪个键是控制什么的,在程序里写。
    获得键值的方法:红外接收模块只接UNO转接板的红外口,加载以下程序,用遥控器对着红外模块按键,从电脑的串口监视器就可以看到每个按键的键值。在程序里写的时候数值前面要加0x。
红外遥控.JPG
获得红外遥控器键值的程序:
[mw_shl_code=cpp,true]#include <IRremote.h> //加载红外库
int RecvPin =A0; //定义/红外接收器的引脚接在 A0
IRrecv irrecv(RecvPin);//设置RecvPin定义的端口为红外信号接收端口
decode_results results;//定义results变量为红外结果存放位置
int key; //定义一个整数key,这很重要
void setup(){
  Serial.begin(9600); //开启串口,波特率为9600
  irrecv.enableIRIn(); // 启动红外解码,初始化红外遥控器
}
void loop() {
  if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
    key=results.value; //定义的key作为接受结果
    Serial.println(key, HEX); //显示十六进制的红外编码
    irrecv.resume(); // 继续等待接收下一组信号
}
}
[/mw_shl_code]

打开串口监视器,记下每个按键的值,可以写到小车程序里作为控制的。示例用红外遥控的小车程序:
[mw_shl_code=cpp,true]#include <IRremote.h> //加载红外库
int RecvPin =A0; //定义/红外接收器的引脚接在 A0
IRrecv irrecv(RecvPin);//设置RecvPin定义的端口为红外信号接收端口
decode_results results;//定义results变量为红外结果存放位置
int key; //定义一个整数key,就是键值

const byte inPin_leftB = 6;
const byte inPin_leftA = 9;
const byte inPin_rightA = 3;
const byte inPin_rightB = 5;

void setup(){
  Serial.begin(9600); //开启串口,波特率为9600
  irrecv.enableIRIn(); // 启动红外解码,初始化红外遥控器

pinMode(inPin_leftA,OUTPUT);
  pinMode(inPin_leftB,OUTPUT);
  pinMode(inPin_rightA,OUTPUT);
  pinMode(inPin_rightB,OUTPUT);
}
void loop() {
  if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
    key=results.value; //定义的key作为接受结果
    //Serial.println(key, HEX); //显示十六进制的红外编码
    irrecv.resume(); // 继续等待接收下一组信号
}
switch(key)
  {
    case 0xXXXX: //用哪个键作为前进键就写那个键的值
    goUp(160);
    break;
    case 0xXXXX:
    goBack(100);
    break;
    case 0xXXXX:
    goLeft(100);
    break;
    case 0xXXXX:
    goRight(100);
    break;
    case 0xXXXX:
    goStop();
    break;
}
}
void goUp(int up_speed)
{
  analogWrite(inPin_leftA,0);
  analogWrite(inPin_rightA,0);
  analogWrite(inPin_leftB,up_speed);
  analogWrite(inPin_rightB,up_speed);
}
void goLeft(int left_speed)
{
  analogWrite(inPin_leftA,255);
  analogWrite(inPin_rightB,255);
  analogWrite(inPin_leftB,left_speed);
  analogWrite(inPin_rightA,left_speed);
}
void goRight(int right_speed)
{
  analogWrite(inPin_leftB,255);
  analogWrite(inPin_rightA,255);
  analogWrite(inPin_leftA,right_speed);
  analogWrite(inPin_rightB,right_speed);
}
void goBack(int back_speed)
{
  analogWrite(inPin_leftB,255);
  analogWrite(inPin_rightB,255);
  analogWrite(inPin_leftA,back_speed);
  analogWrite(inPin_rightA,back_speed);
}
void goStop()
{
  analogWrite(inPin_leftA,0);
  analogWrite(inPin_leftB,0);
  analogWrite(inPin_rightA,0);
  analogWrite(inPin_rightB,0);
}
[/mw_shl_code]

 楼主| 发表于 2016-11-18 18:23 | 显示全部楼层
发了好几遍才发上来,还被扣积分
发表于 2016-11-18 20:42 | 显示全部楼层
心疼你1秒,话说怎么发贴怎么会扣积分?
 楼主| 发表于 2016-11-18 21:11 | 显示全部楼层
jianwei569 发表于 2016-11-18 20:42
心疼你1秒,话说怎么发贴怎么会扣积分?

话说发了5遍都发不上,就点了一下保存,就被扣了6分!

评分

参与人数 1金币 +10 收起 理由
syl312 + 10 淡定

查看全部评分

发表于 2016-12-12 18:31 | 显示全部楼层
vickywong 发表于 2016-11-18 21:11
话说发了5遍都发不上,就点了一下保存,就被扣了6分!

给你补回去,插件检测有关键词,误删了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 01:57 , Processed in 0.089157 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表