双轮超声波避障小车,超声波模块问题,求指导
做了一个超声波避障小车,但是程序写好后,超声波模块判断失灵,程序一直默认为有障碍物的情况执行电机驱动,确认模块无问题,程序如下,求指导。可能是程序的问题,求指正int IN1=4;
int IN2=5;
int IN3=6;
int IN4=7;
int EN1=8;//使能端口1
int EN2=9;//使能端口2
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
int p;
void setup(void)
{
// 设置串口通信波特率
Serial.begin(9600);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop(void)
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
if(cm<=15 && cm>=2)
p=1;
else p=0;
if(p=1)
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(EN1,255);
analogWrite(EN2,255);
delay(10000);
}
if (p=0)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(EN1,155);
analogWrite(EN2,155);
delay(500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(EN1,155);
analogWrite(EN2,155);
delay(300);
}
} if(cm<=15 && cm>=2)
p=1;
else p=0;
这个少了{}吧。
还有看不懂P=0的情况下执行的是什么走法?
还有个建议,不要用delay(),因为当它运行的时候是不执行任何其它操作的,比如那么当你delay(10000)时,车子遇到障碍物也不会进行探测改变的。 fish6823 发表于 2014-7-7 01:04 static/image/common/back.gif
if(cm=2)
p=1;
else p=0;
昨天刚发完帖子我就自己找到原因了,arduino编程的语法还是和c有点不同,多重循环嵌套很容易出问题,我去掉p这个变量,直接用cm判断就可以了。 fish6823 发表于 2014-7-7 01:04 static/image/common/back.gif
if(cm=2)
p=1;
else p=0;
昨天刚发完帖子我就自己找到原因了,arduino编程的语法还是和c有点不同,多重循环嵌套很容易出问题,我去掉p这个变量,直接用cm判断就可以了。 const int outputPin = 2;
const int inputPin = 1;
void setup(){
Serial.begin(9600);
pinMode(outputPin, OUTPUT); // 觸發腳設定成「輸出」
pinMode(inputPin, INPUT); // 接收腳設定成「輸入」
}
void loop()
{
digitalWrite(outputPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(outputPin, HIGH);
delayMicroseconds(10);
digitalWrite(outputPin, LOW);
float cm = pulseIn(inputPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
delay (100);
// 讀取障礙物的距離
Serial.print("distance:"); //輸出距離(單位:公分)
Serial.println(cm); //顯示距離
}/Users/allenMENG/Desktop/屏幕快照 2015-10-25 下午11.49.49.png
您好,我出现这种情况是电路连接问题吗?
页:
[1]