|
|
发表于 2013-1-13 22:07:40
|
显示全部楼层
本帖最后由 ch00148070 于 2013-1-13 22:09 编辑
老摸 发表于 2013-1-13 19:15 
若是要实现壁障功能,接上红外对管模块(信号脚在pin11)就可以了,一旦检测到障碍物就会后退,右转。
...
借贵地请教老摸,我也有个差不多的问题,就是我的小车是红外遥控加三线寻迹模式,当红外遥控下令进入寻迹模式时,遥控器按什么键都没反应了。用了一个判断程序也跳不出寻变模式。代码如下:
- /***********************以下红外遥控的定义******************************************/
-
- /*红外接收器的VOUT接在数字引脚15上,GND接控制板的GND,VCC接控制板上+5V
- *发光二极管引脚接在数字引脚14上,通过470欧姆电阻回到控制板的GND*/
-
-
- #include <IRremote.h> //导入红外遥控器解码库
- int RECV_PIN = 15; //定义红外接收器的引脚为15
- int LED_PIN=14; //定义发光LED引脚数字14
- IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号
- decode_results results; //解码结果放在decode_results构造的对象results里
-
-
-
- /***********************以下是直流电机和寻迹传感器的各种定义*************************/
- int XJ2=2; //设置寻迹传感器IO接口为2、3、4
- int XJ3=3;
- int XJ4=4;
-
- int va2; //设置变量va2、va3、va4储存寻迹传感器状态
- int va3;
- int va4;
-
- int Ena; //用来设置直流电机ENa 和ENb的 转速
- int Enb;
-
- int ENa=6; //设置左边直接电机调速PWM口6
- int in1=7;
- int in2=8;
-
- int ENb=9; //设置右边直接电机调速PWM口11
- int in3=12;
- int in4=13;
-
-
- /*************************************************************************************************
- *************************************************************************************************/
-
-
-
- void setup()
- {
- irrecv.enableIRIn(); // 初始化红外接收器
- pinMode(LED_PIN,OUTPUT);//设置发光LED引脚数字14为输出
-
- /*********************************************************************************************/
- pinMode(XJ2, INPUT); //设置XJ2、XJ3、XJ4为输入接口
- pinMode(XJ3, INPUT);
- pinMode(XJ4, INPUT);
-
-
- pinMode(in1,OUTPUT);//设置所有的直流电机为输出接口
- pinMode(in2,OUTPUT);
- pinMode(ENa,OUTPUT);
- pinMode(in3,OUTPUT);
- pinMode(in4,OUTPUT);
- pinMode(ENb,OUTPUT);
-
- car_S(); //定义小车初始状态是停止
-
- }
-
- /******************************** void loop()*************************************************************/
-
- void loop()
- {
-
- if (irrecv.decode(&results)) // 如果解码成功,收到一组红外线信号
- {
- switch (results.value) //把确认接收到的编码和下列编码顺序比较,是就运行,不是就跳过
-
- {
- // label:
- case 0xFDA05F: //上箭头, 此处写十字进数OR十六进制数字:0xFD08F7转为16582903
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- Ena=150; //调速150
- Enb=150;
- car_A();
- break;
-
- case 0xFDB04F: //下箭头
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- Ena=120; //调速120
- Enb=120;
- car_B();
- break;
-
- case 0xFD10EF: //左箭头
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- Ena=0; //调速
- Enb=180;
- car_L();
- delay(300);
- car_S();
- break;
-
- case 0xFD50AF: //右箭头
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- Ena=180; //调速
- Enb=0;
- car_R();
- delay(300);
- car_S();
- break;
-
- case 0xFD906F: //STOP_确定
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- car_S();
- break;
-
- case 0xFD609F: //快速掉头
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
- Ena=200; //调速
- Enb=200;
- car_V();
- delay(400);
- car_S();
- break;
-
-
-
- /**********************************寻迹模式************************************************************/
- /**********************************寻迹模式***********************************************************/
-
- case 0xFD00FF: //进入寻迹模式 对应遥控器上按钮XX
- {
-
- for(int i=0;i<10000;i++ )
- {
-
-
- digitalWrite(LED_PIN,HIGH);//LED闪一下
- delay(10);
- digitalWrite(LED_PIN,LOW);
-
- va2=digitalRead(XJ2); //读出寻迹传感器XJ2的状态
- va3=digitalRead(XJ3); //读出寻迹传感器XJ3的状态
- va4=digitalRead(XJ4); //读出寻迹传感器XJ4的状态
-
- if(va2==LOW&&va3==HIGH&&va4==LOW)//如果寻迹传感器XJ2和XJ4都处于低电平,XJ3处于高电平状态,那么小车向前走
- {
- Ena=95; //调速
- Enb=95;
- car_A();
- }
-
- if(va2==HIGH&&va3==HIGH) //如果寻迹传感器XJ2、XJ3处于高电平状态,那么小车往**右**慢转弯
- {
- Ena=95; //调速
- Enb=75;
- car_R();
- }
-
- if(va2==HIGH&&va4==LOW&&va3==LOW) //如果寻迹传感器XJ2处于高电平XJ4、XJ3处于低电平状态,那么小车往**右**急转弯
- {
- Ena=95; //调速
- Enb=45;
- car_R();
- }
-
-
- if(va4==HIGH&&va3==HIGH) //如果寻迹传感器XJ4、XJ3处于高电平状态,那么小车往**左**慢转弯
- {
- Ena=75; //调速
- Enb=95;
- car_L();
- }
-
- if(va4==HIGH&&va2==LOW&&va3==LOW) //如果寻迹传感器XJ4处于高电平XJ2、XJ3处于低电平状态,那么小车往**左**急转弯
- {
- Ena=45; //调速
- Enb=95;
- car_L();
- }
-
- if(va2==HIGH&&va3==HIGH&&va4==HIGH)// 如果寻迹传感器XJ2、XJ3和XJ4都处于高电平,那么小车停止
- {
- car_S();
-
- }
-
- if(va2==LOW&&va3==LOW&&va4==LOW)
- {
- /*不做判断*/
- }
-
- if(results.value==0xFD906F)/*这个条件判断根本不起作用,在这个FOR偱环时间内遥控器无法改变他的状态,试了N多个方法,这是其中一种*/
- {
-
- car_S();
- // goto label;
- }
-
- }
-
-
- }
- break;
- }
- irrecv.resume(); // 接收下一个值
- }
-
- }
-
- /******************************************************************************************************************************/
- /***********************************定义快速掉头函数*********************************/
- void car_V()
- {
- analogWrite(ENa,Ena);
- analogWrite(ENb,Enb);
- digitalWrite(in1,1);
- digitalWrite(in2,0);
- digitalWrite(in3,0);
- digitalWrite(in4,1);
- }
-
- /***********************************定义轮胎前进函数*********************************/
- void car_A()
- {
- analogWrite(ENa,Ena);
- analogWrite(ENb,Enb);
- digitalWrite(in1,1);
- digitalWrite(in2,0);
- digitalWrite(in3,1);
- digitalWrite(in4,0);
- }
-
-
- /***********************************定义轮胎后退函数*********************************/
- void car_B()
- {
- analogWrite(ENa,Ena);
- analogWrite(ENb,Enb);
- digitalWrite(in1,0);
- digitalWrite(in2,1);
- digitalWrite(in3,0);
- digitalWrite(in4,1);
- }
-
- /***********************************定义轮胎STOP函数*********************************/
- void car_S()
- {
- analogWrite(ENa,0);
- analogWrite(ENb,0);
- digitalWrite(in1,0);
- digitalWrite(in2,1);
- digitalWrite(in3,0);
- digitalWrite(in4,1);
- }
-
-
- /*******************************定义轮胎右转弯函数********************************/
-
- void car_R()/////小车向右拐
- {
-
-
- analogWrite(ENa,Ena);
- analogWrite(ENb,Enb);
- digitalWrite(in1,1);
- digitalWrite(in2,0);
- digitalWrite(in3,1);
- digitalWrite(in4,0);
-
- }
-
- /***********************************定义左转弯函数*********************************/
-
- void car_L()/////小车向左拐
- {
-
- analogWrite(ENa,Ena);
- analogWrite(ENb,Enb);
- digitalWrite(in1,1);
- digitalWrite(in2,0);
- digitalWrite(in3,1);
- digitalWrite(in4,0);
- }
复制代码 if(results.value==0xFD906F)/*这个条件判断根本不起作用,在这个FOR偱环时间内遥控器无法改变他的状态,试了N多个方法,这是其中一种*/
{
car_S();
// goto label;
}
|
|