你们是正常采用什么方式让小车自动避障和无线控制切换,如下代码为什么一直直行呢
#include <AFMotor.h>int RelayPin = 13; //继电器
int EchoPin = 14; //超声波Echo
int TrigPin = 15; //超声波Trig
int SensorL = 16; //避障前左 16
int SensorR = 17;//避障前右17
int Jiguang = 18;//激光开关
int mid = 0 ;
int snum;
int state;
float cm;
int val;
AF_DCMotor motor1(1, MOTOR12_64KHZ);// 创建左前轮,速度是64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ);// 创建左后轮,速度是64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ);// 创建右前轮,速度是64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ);// 创建右后轮,速度是64KHz pwm
/******************************小车行驶状态 ***********************************/
void carGoFwd()
{ // 小车前进
motor1.run(FORWARD);// 电机前进
motor2.run(FORWARD);// 电机前进
motor3.run(FORWARD);// 电机前进
motor4.run(FORWARD);// 电机前进
Serial.print("car forward");
}
void carGoBwd()
{ // 小车后退
motor1.run(BACKWARD);// 电机后退
motor2.run(BACKWARD);// 电机后退
motor3.run(BACKWARD);// 电机后退
motor4.run(BACKWARD);// 电机后退
Serial.print("car back");
}
void carTurnL()
{ // 小车左转
motor1.run(BACKWARD);// 电机后退
motor2.run(BACKWARD);// 电机后退
motor3.run(FORWARD);// 电机前进
motor4.run(FORWARD);// 电机前进
Serial.print("car turn left");
}
void carTurnR()
{ // 小车右转
motor1.run(FORWARD);// 电机前进
motor2.run(FORWARD);// 电机前进
motor3.run(BACKWARD);// 电机后退
motor4.run(BACKWARD);// 电机后退
Serial.print("car turn right");
}
void carGoL()
{ // 小车左前行
motor1.run(BACKWARD);// 电机后退
motor2.run(FORWARD);// 电机后退
motor3.run(FORWARD);// 电机前进
motor4.run(FORWARD);// 电机前进
Serial.print("car go left");
}
void carGoR()
{ // 小车右前行
motor1.run(FORWARD);// 电机前进
motor2.run(FORWARD);// 电机前进
motor3.run(FORWARD);// 电机后退
motor4.run(BACKWARD);// 电机后退
Serial.print("car go right");
}
voidcarStop()
{ // 小车制动
motor1.run(RELEASE);// 电机停步
motor2.run(RELEASE);// 电机停步
motor3.run(RELEASE);// 电机停步
motor4.run(RELEASE);// 电机停步
Serial.print("car barke");
}
void randTrun()
{
long randNumber;
randomSeed(analogRead(5));
randNumber = random(0, 10);
if(randNumber > 5) {
carTurnR();
}
else
{
carTurnL();
}
}
/******************************* 测距模块**************************/
int distance()
{
digitalWrite(TrigPin, LOW); // 给触发脚低电平2μs
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);// 给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(20);
digitalWrite(TrigPin, LOW); // 持续给触发脚低电
float Fdistance = pulseIn(EchoPin, HIGH);// 读取高电平时间(单位:微秒)
Fdistance= Fdistance/58; //为什么除以58等于厘米,Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
return (int)Fdistance;
Serial.print(Fdistance);
Serial.println(Fdistance);
}
/******************************* 避障过程**************************/
void autorun()
{
snum=digitalRead(16); //这三个依次为左右红外传感器
snum=digitalRead(17);
mid = distance();
#ifdef send
Serial.print("mid=");
Serial.println(mid);
#endif
if ((snum==1) && snum==1) //所有传感器都没有检测到障碍物
{
carGoFwd();//直行
}
if (snum==0 && (snum==1)) //右边传感器检测到障碍物
{
carStop();
delay(500);
carGoBwd();
delay(200);
carTurnR();
delay(1000);
}
if (snum==1 && snum==0) //左边传感器检测到障碍物
{
carStop();
delay(500);
carGoBwd();
delay(500);
carTurnL();//小车向右转
delay(500);
}
if (mid <=15) //所有传感器都没有检测到障碍物
{
carStop();
delay(500);
carGoBwd();
delay(500);
randTrun();
delay(500);
}
}
void setup()
{ // 初始化串口通信及连接SR04的引脚
Serial.begin(9600);
pinMode(RelayPin,OUTPUT);//定义继电器 RelayPin接口为输出接口
pinMode(TrigPin, OUTPUT);//定义SR04 TrigPin接口为输出接口
pinMode(EchoPin, INPUT); //定义SR04 EchoPin接口为输入 接口
pinMode(SensorL,INPUT); //定义左传感器接口为输入接口
pinMode(SensorR,INPUT); //定义右传感器接口为输入接口
pinMode(Jiguang,OUTPUT); //定义激光头
motor1.setSpeed(150);// 设置电机速度,从200/255之间任意
motor2.setSpeed(150);// 设置电机速度,从200/255之间任意
motor3.setSpeed(160);// 设置电机速度,从200/255之间任意
motor4.setSpeed(160);// 设置电机速度,从200/255之间任意
digitalWrite(RelayPin,HIGH);
}
void loop()
{
if(Serial.available()>0) //查询串口有无数据
{
val=Serial.read();//读取labview下达的命令
if(val=='Q')//发送字符'Q',则小车自动巡行
{
autorun();//
}
if(val=='W')//发送字符'W',则小车前进
{
carGoFwd();//
}
if(val=='S')//发送字符'S',则小车后退
{
carGoBwd();//
}
if(val=='A')//发送字符'A',则小车左转
{
carTurnL();//
}
if(val=='D')//发送字符'D',则小车右转
{
carTurnR();//
}
if(val=='Z')//发送字符'y',则小车停止
{
carStop();//
}
if(val=='M')//
{
{
digitalWrite(Jiguang,HIGH);
delay(10000);
digitalWrite(Jiguang,LOW);
}
if(val=='N')//
digitalWrite(RelayPin,LOW);
delay(10000);
digitalWrite(RelayPin,HIGH);
}
}
}
页:
[1]