liweisgg 发表于 2014-7-6 10:49:16

双轮超声波避障小车,超声波模块问题,求指导

做了一个超声波避障小车,但是程序写好后,超声波模块判断失灵,程序一直默认为有障碍物的情况执行电机驱动,确认模块无问题,程序如下,求指导。可能是程序的问题,求指正
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);
}

}

fish6823 发表于 2014-7-7 01:04:12

if(cm<=15 && cm>=2)
p=1;
else p=0;

这个少了{}吧。

还有看不懂P=0的情况下执行的是什么走法?

还有个建议,不要用delay(),因为当它运行的时候是不执行任何其它操作的,比如那么当你delay(10000)时,车子遇到障碍物也不会进行探测改变的。

liweisgg 发表于 2014-7-7 21:43:17

fish6823 发表于 2014-7-7 01:04 static/image/common/back.gif
if(cm=2)
p=1;
else p=0;


昨天刚发完帖子我就自己找到原因了,arduino编程的语法还是和c有点不同,多重循环嵌套很容易出问题,我去掉p这个变量,直接用cm判断就可以了。

liweisgg 发表于 2014-7-7 21:43:49

fish6823 发表于 2014-7-7 01:04 static/image/common/back.gif
if(cm=2)
p=1;
else p=0;


昨天刚发完帖子我就自己找到原因了,arduino编程的语法还是和c有点不同,多重循环嵌套很容易出问题,我去掉p这个变量,直接用cm判断就可以了。

matthew7 发表于 2015-10-25 20:51:48

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]
查看完整版本: 双轮超声波避障小车,超声波模块问题,求指导