|
Arduino入门,最近在网上下载了一个IRremote程序包,准备搞一个遥控车,编了一套程序,把这个程序通过IDE导入到UNO控制板中,连接遥控器接收器后,可以测到控制板输入,但是没有输出,是什么问题。程序如下:
#include <IRremote.h>
int RECV_PIN = A0;
int pinLB=4; //定义I1接口
int pinLF=5; //定义I2接口
int pinRB=7; //定义I3接口
int pinRF=6; //定义I4接口
int i=120;
//******红外控制按键定义部分********
long advance = 0xFF629D;
long back = 0xFFA857;
long stop = 0xFF02FD;
long left = 0xFF22DD;
long right = 0xFFC23D;
long anjian1 = 0xFF30CF;
long anjian2 = 0xFF18E7;
long anjian3 = 0xFF7A85;
long anjian4 = 0xFF10EF;
long anjian5 = 0xFF38C7;
IRrecv irrecv(RECV_PIN);//设置RECV_PIN(也就是A0引脚)为红外接收端
decode_results results;//定义results变量为红外结果存放位置
void setup()
{
pinMode(RECV_PIN, INPUT);
pinMode(pinLB,OUTPUT);
pinMode(pinLF,OUTPUT);
pinMode(pinRB,OUTPUT);
pinMode(pinRF,OUTPUT);
Serial.begin(9600); //设定串口的连接速率
irrecv.enableIRIn(); // Start the receiver 初始化红外接收器
}
void motor(char pin,char pwmpin,char state,int val) //自定义函数motor
{
pinMode(pin, OUTPUT);
if(state==1) //当state为1时正转
{
analogWrite(pwmpin,val); //val值对应转速
digitalWrite(pin,1);
}
else if(state==2) //当state为2时反转
{
analogWrite(pwmpin,val); //val值对应转速
digitalWrite(pin,0);
}
else if(state==0) //当state为0时停止
{
analogWrite(pwmpin,0);
digitalWrite(pin,0);
}
} //结束自定义函数部分
void loop()
{
if (irrecv.decode(&results))//一开始还是先判断是否接收到红外码,并把接收到的数据存储在变量results中。
{
Serial.println( results.value);
if( results.value == advance) //向前
{
i=100; //此处原来是i=i-10
motor(pinLB,pinLF,1,i); //左电机向前转
motor(pinRB,pinRF,1,i); //右电机向前转
}
if(results.value == back) //向后
{
motor(pinLB,pinLF,2,100); //左电机向后转 转速100
motor(pinRB,pinRF,2,100); //右电机向后转 转速100
i=120; //感觉这句程序没用
}
if(results.value == left) //向左转
{
motor(pinLB,pinLF,0,100); //左电机不转
motor(pinRB,pinRF,1,100); // 右电机向前转 转速100
i=120;
}
if(results.value == right) //向右转
{
motor(pinLB,pinLF,1,100); //左电机向前转 转速100
motor(pinRB,pinRF,0,100); //右电机不转
i=120;
}
if(results.value == 0xFF02FD) //停止
{
motor(pinLB,pinLF,0,160); //左电机不转
motor(pinRB,pinRF,0,160); //右电机不转
i=120;
}
//速度分档
if(results.value == 0xFF30CF) //按键一
{
motor(pinLB,pinLF,1,150); //左电机向前转 转速为150
motor(pinRB,pinRF,1,150); //右电机向前转 转速为150
}
if(results.value == 0xFF18E7) //按键二
{
motor(pinLB,pinLF,1,120); //左电机向前转 转速为120
motor(pinRB,pinRF,1,120); //右电机向前转 转速为120
}
if(results.value == 0xFF7A85) //按键三
{
motor(pinLB,pinLF,1,90); //左电机向前转 转速为90
motor(pinRB,pinRF,1,90); //右电机向前转 转速为90
}
if(results.value == 0xFF10EF) //按键四
{
motor(pinLB,pinLF,1,60); //左电机向前转 转速为60
motor(pinRB,pinRF,1,60); //右电机向前转 转速为60
}
if(results.value == 0xFF38C7) //按键五
{
motor(pinLB,pinLF,1,30); //左电机向前转 转速为30
motor(pinRB,pinRF,1,30); //右电机向前转 转速为30
}
/*转向
*
* 以下程序没有对应的按键
*/
if(results.value == 0xFF42BD) //对应0xFF42BD的按键
{
motor(pinLB,pinLF,2,205); //左电机向后转,转速为205
motor(pinRB,pinRF,1,50); //右电机向前转,转速为50
}
if(results.value == 0xFF4AB5) //对应0xFF4AB5的按键
{
motor(pinLB,pinLF,0,100); //左右电机均不转
motor(pinRB,pinRF,0,100);
}
if(results.value == 0xFF52ad) //对应0xFF52ad的按键
{
motor(pinLB,pinLF,1,50); //左电机向前转,转速为50
motor(pinRB,pinRF,2,205); //右电机向后转,转速为205
}
irrecv.resume(); // 接收下一个编码
}
}
我感觉问题出现在头文件,我上传程序的时候不知道怎么上传头文件,只把上边程序上传了。
请大神指点,感谢
|
|