|
本帖最后由 vickywong 于 2016-11-18 18:34 编辑
用自带的红外遥控器控制小车,需要先知道遥控器每个键的键值。然后定义哪个键是控制什么的,在程序里写。
获得键值的方法:红外接收模块只接UNO转接板的红外口,加载以下程序,用遥控器对着红外模块按键,从电脑的串口监视器就可以看到每个按键的键值。在程序里写的时候数值前面要加0x。
获得红外遥控器键值的程序:
[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]
|
|