Bellerophon 发表于 2013-7-14 00:51:30

新人入门用超声波测距+1602+蜂鸣器模仿倒车雷达

入手arduino第3天,跟着论坛里面的高手教程学习,自己鼓捣出来一个类似倒车雷达的东西,很简陋,自己感觉代码写的也很乱,求抨击,求指教。。。尤其请帮忙看看代码怎么优化优化,目前感觉太累赘了。。顺便问一下,为什么测距不怎么准,还总出现负距离?

http://bbs.cneclub.com/attachments/swfupload/1307140020323d87bd779f452f.gif
http://bbs.cneclub.com/attachments/swfupload/130714004175a0d13fb3ae3797.gif
原谅我的渣像素。。
代码如下(根据距离不同蜂鸣器发出不同声音)

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6);
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
int buzzer=4;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);   
pinMode(buzzer,OUTPUT);
lcd.begin(16, 2);
lcd.print("Dao Che Lei Da");
delay(2000);
}

void loop ()                     
{
digitalWrite(TrigPin, LOW);
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();
delay(500);

lcd.clear();
lcd.print("Zhu Yi Ju Li");
lcd.setCursor(0, 1) ;
lcd.print(cm);
lcd.print("cm");

delay(100);

if (cm < 10)
{
unsigned char i;
{
      for(i=0;i<80;i++)
    {
      digitalWrite(buzzer,HIGH);
      delay(1);
      digitalWrite(buzzer,LOW);音
      delay(1);
    }
}
}
else if (cm < 20)
{
unsigned char i;
{
      for(i=0;i<100;i++)
    {
      digitalWrite(buzzer,HIGH);
      delay(2);
      digitalWrite(buzzer,LOW);
      delay(2);
    }
}
}
else
{
digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);音
delay(1);
}

}

普通人 发表于 2013-7-14 09:36:32

比我的的厉害多了

eyeart 发表于 2013-7-14 12:50:16

挺好的,我学了好长一段时间还没做出来你这样的实验呢,向你学习了!

chqiyi 发表于 2013-7-30 15:36:04

求真像,谢谢

111222333 发表于 2015-2-8 10:03:51

const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(4,OUTPUT);
}
void loop()
{
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; //保留两位小数
Serial.print(cm);
Serial.print("cm");
Serial.println();
if(cm>100.0)
{
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(1000);
}
if(cm>20.0 && cm<100.0)
{
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(1000-(100-cm)*12.5);
}
if(cm<20.0)
{
digitalWrite(4,HIGH);
}
}

鑫鑫 发表于 2015-4-27 09:16:56

很牛逼啊,向大婶学习!!!

missbear 发表于 2015-5-21 23:51:12

求助楼主会不会编超声波测距控制蜂鸣器的乐器的程序啊
具体问题在这里http://www.geek-workshop.com/thread-15034-1-1.html
多谢
页: [1]
查看完整版本: 新人入门用超声波测距+1602+蜂鸣器模仿倒车雷达