声明各引脚
const int EchoPin = 8; //超声波信号输入
const int TrigPin = 9; //超声波控制信号输出
const int leftmotorpin1 =2 ; // 直流电机信号输出
const int leftmotorpin2 = 3;
const int rightmotorpin1 = 4;
const int rightmotorpin2 = 5;
int currDist = 0; // 距离
void setup()
{
pinMode(EchoPin, INPUT); //声明各引脚模式
pinMode(leftmotorpin1, OUTPUT);
pinMode(leftmotorpin2, OUTPUT);
pinMode(rightmotorpin1, OUTPUT);
pinMode(rightmotorpin2, OUTPUT);
pinMode(TrigPin, OUTPUT);
}
void loop() //主体
{
currDist = MeasuringDistance(); //读取前端距离
if(currDist > 20)
{
nodanger();
}
else if(currDist < 15)
{
backup();
randTrun();
}
else
{
randTrun();
}
}
//测量距离 单位厘米
long MeasuringDistance()
{
long duration;
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH); //输出高电平,延时10ms
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
duration = pulseIn(EchoPin, HIGH); //接受返回信号
return duration /58; //计算距离
}
// 前进
void nodanger()
{
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
return;
}
//后退
void backup()
{
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(1000);
}
//暂停0.5s
void totalhalt() {
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, HIGH);
return;
delay(500);
}
//左转
void body_lturn()
{
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
delay(1000);
totalhalt();
}
//右转
void body_rturn()
{
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(1000);
totalhalt();
}
//产生随机数
void randTrun()
{
long randNumber;
randomSeed(analogRead(0));
randNumber = random(0, 10);
if(randNumber > 5)
{
body_rturn();
}
else
{
body_lturn();
}
}
const int EchoPin = 8; //超声波信号输入
const int TrigPin = 9; //超声波控制信号输出
const int leftmotorpin1 =2 ; // 直流电机信号输出
const int leftmotorpin2 = 3;
const int rightmotorpin1 = 4;
const int rightmotorpin2 = 5;
int currDist = 0; // 距离
void setup()
{
pinMode(EchoPin, INPUT); //声明各引脚模式
pinMode(leftmotorpin1, OUTPUT);
pinMode(leftmotorpin2, OUTPUT);
pinMode(rightmotorpin1, OUTPUT);
pinMode(rightmotorpin2, OUTPUT);
pinMode(TrigPin, OUTPUT);
}
void loop() //主体
{
currDist = MeasuringDistance(); //读取前端距离
if(currDist > 20)
{
nodanger();
}
else if(currDist < 15)
{
backup();
randTrun();
}
else
{
randTrun();
}
}
//测量距离 单位厘米
long MeasuringDistance()
{
long duration;
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH); //输出高电平,延时10ms
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
duration = pulseIn(EchoPin, HIGH); //接受返回信号
return duration /58; //计算距离
}
// 前进
void nodanger()
{
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
return;
}
//后退
void backup()
{
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(1000);
}
//暂停0.5s
void totalhalt() {
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, HIGH);
return;
delay(500);
}
//左转
void body_lturn()
{
digitalWrite(leftmotorpin1, LOW);
digitalWrite(leftmotorpin2, HIGH);
digitalWrite(rightmotorpin1, HIGH);
digitalWrite(rightmotorpin2, LOW);
delay(1000);
totalhalt();
}
//右转
void body_rturn()
{
digitalWrite(leftmotorpin1, HIGH);
digitalWrite(leftmotorpin2, LOW);
digitalWrite(rightmotorpin1, LOW);
digitalWrite(rightmotorpin2, HIGH);
delay(1000);
totalhalt();
}
//产生随机数
void randTrun()
{
long randNumber;
randomSeed(analogRead(0));
randNumber = random(0, 10);
if(randNumber > 5)
{
body_rturn();
}
else
{
body_lturn();
}
}