极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14395|回复: 4

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

[复制链接]
发表于 2014-7-6 10:49:16 | 显示全部楼层 |阅读模式
做了一个超声波避障小车,但是程序写好后,超声波模块判断失灵,程序一直默认为有障碍物的情况执行电机驱动,确认模块无问题,程序如下,求指导。可能是程序的问题,求指正
[pre lang="arduino" line="1" file="避障小车"]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);
  }

}[/code]
回复

使用道具 举报

发表于 2014-7-7 01:04:12 | 显示全部楼层
if(cm<=15 && cm>=2)
  p=1;
  else p=0;

这个少了{}吧。

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

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

使用道具 举报

 楼主| 发表于 2014-7-7 21:43:17 | 显示全部楼层
fish6823 发表于 2014-7-7 01:04
if(cm=2)
  p=1;
  else p=0;

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

使用道具 举报

 楼主| 发表于 2014-7-7 21:43:49 | 显示全部楼层
fish6823 发表于 2014-7-7 01:04
if(cm=2)
  p=1;
  else p=0;

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

使用道具 举报

发表于 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);    //顯示距離
  
  

}
您好,我出现这种情况是电路连接问题吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 23:04 , Processed in 0.045833 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表