采用红外传感器和超声波传感器结合来进行避障。val1、val2分别为左右两个红外传感器测得的距离值;distance为超声波传感器测得的距离值。求大神知道如何编写程序才能进行有效的避障。(能够使小车直行、倒退、左转和右转)
int E1=5; //设置电机管脚
int M1=4;
int E2=6;
int M2=7;
int valGP1; //红外模拟量读取
int valGP2;
int val1; ////模拟量转换实际距离值存储
int val2;
int analog1=15; //模拟量接线引脚号
int analog2=14;
int inputPin=2; //超声波传感器信号引脚
int outputPin=3;
void setup()
{
pinMode(M1,OUTPUT);
pinMode(M2,OUTPUT);
Serial.begin(9600);
pinMode(inputPin,INPUT);
pinMode(outputPin,OUTPUT); }
void advanced() //小车前进
{
digitalWrite(M1,HIGH);
digitalWrite(M2,HIGH);
analogWrite(E1,100);
analogWrite(E2,100);
delay(30);}
void back() //小车后退
{
digitalWrite(M1,LOW);
digitalWrite(M2,LOW);
analogWrite(E1,100);
analogWrite(E2,100);
delay(30);}
void left() //小车左转
{
digitalWrite(M1,HIGH);
digitalWrite(M2,LOW);
analogWrite(E1,150);
analogWrite(E2,50);
delay(30);}
void right() //小车右转
{
digitalWrite(M1,LOW);
digitalWrite(M2,HIGH);
analogWrite(E1,50);
analogWrite(E2,150);
delay(30);}
void loop()
{
valGP1 =analogRead(analog1); //常用公式
valGP2=analogRead(analog2);
val1=(6787/(valGP1-3))-4;
val2=(6787/(valGP2-3))-4;
Serial.print(val1 );
Serial.print(val2 );
delay(1000);
digitalWrite(outputPin,LOW);
delayMicroseconds(2);
digitalWrite(outputPin,HIGH);
delayMicroseconds(10);
int distance=pulseIn(inputPin,LOW);
distance=distance/50;
Serial.println(distance);
delay(1000);
|