用超声波测距传感器让小车保持一定距离行驶
将测距传感器安装在小车侧边,通过测距传感器检测左边挡板的距离,将接收回来的距离数值来调节小车左偏和右偏,但是调的太慢,有时候偏出去很久才能往回调。求助大神程序该怎么改。硬件: 主控板: arduino2560
超声波模块:HC-SR04
电机控制模块:L298N
unsigned int cm;
void setup()
{
Serial.begin(9600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,INPUT);
pinMode(22,OUTPUT);
pinMode(23,OUTPUT);
pinMode(24,OUTPUT);
pinMode(25,OUTPUT);
pinMode(26,OUTPUT);
pinMode(27,OUTPUT);
pinMode(28,OUTPUT);
pinMode(29,OUTPUT);
}
void ceju()
{
const int TrigPin = 6;
const int EchoPin = 7;
digitalWrite(TrigPin, LOW); //发一个10ms的高脉冲去触发TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
//cm = (int(cm * 100.0)) / 100.0; //保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
}
void zhixing(int a1,int a2,int a3,int a4)
{
analogWrite(2,a1);
digitalWrite(22,LOW);
digitalWrite(23,HIGH);
analogWrite(3,a2);
digitalWrite(24,LOW);
digitalWrite(25,HIGH);
analogWrite(4,a3);
digitalWrite(26,LOW);
digitalWrite(27,HIGH);
analogWrite(5,a4);
digitalWrite(28,LOW);
digitalWrite(29,HIGH);
}
voidzhixingceju(int left1,int right1,int right2,int left2,int error1,int error2,int error3)
{
zhixing(left1,right1,right2,left2);
while(1)
{
ceju();
if(19<cm<21)
{
zhixing(180,100,100,180);
delay(5);
}
if(cm<18)
{
zhixing(200,100,100,200);
delay(5);
}
if(23<cm<25)
{
zhixing(100,180,180,100);
delay(5);
}
if(cm>26)
{
zhixing(100,200,200,100);
delay(5);
}
else
zhixing(120,130,120,120);
delay(5);
}
}
void loop()
{
zhixingceju(120,130,120,120,70,80,90);
}
支持楼主:lol 学习了学习了 硬件问题比较大。我用的也是这个,但小车总会撞上。可能是ARDUINO的板太慢了,承载不了 试着删掉些,或是速度慢些
页:
[1]