极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16915|回复: 6

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

[复制链接]
发表于 2013-7-14 00:51:30 | 显示全部楼层 |阅读模式
入手arduino第3天,跟着论坛里面的高手教程学习,自己鼓捣出来一个类似倒车雷达的东西,很简陋,自己感觉代码写的也很乱,求抨击,求指教。。。尤其请帮忙看看代码怎么优化优化,目前感觉太累赘了。。顺便问一下,为什么测距不怎么准,还总出现负距离?



原谅我的渣像素。。
代码如下(根据距离不同蜂鸣器发出不同声音)

  1. #include <LiquidCrystal.h>

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

  17. void loop ()                     
  18. {
  19. digitalWrite(TrigPin, LOW);
  20. delayMicroseconds(2);
  21. digitalWrite(TrigPin, HIGH);
  22. delayMicroseconds(10);
  23. digitalWrite(TrigPin, LOW);

  24. cm = pulseIn(EchoPin, HIGH) / 58.0;
  25. cm = (int(cm * 100.0)) / 100.0;
  26. Serial.print(cm);
  27. Serial.print("cm");
  28. Serial.println();
  29. delay(500);

  30. lcd.clear();
  31. lcd.print("Zhu Yi Ju Li");
  32. lcd.setCursor(0, 1) ;
  33. lcd.print(cm);
  34. lcd.print("cm");

  35. delay(100);

  36. if (cm < 10)
  37. {
  38.   unsigned char i;
  39.   {
  40.       for(i=0;i<80;i++)
  41.     {
  42.       digitalWrite(buzzer,HIGH);
  43.       delay(1);
  44.       digitalWrite(buzzer,LOW);音
  45.       delay(1);
  46.     }
  47.   }
  48. }
  49. else if (cm < 20)
  50. {
  51.   unsigned char i;
  52.   {
  53.       for(i=0;i<100;i++)
  54.     {
  55.       digitalWrite(buzzer,HIGH);
  56.       delay(2);
  57.       digitalWrite(buzzer,LOW);
  58.       delay(2);
  59.     }
  60.   }
  61. }
  62. else
  63. {
  64.   digitalWrite(buzzer,HIGH);
  65.   delay(1);
  66.   digitalWrite(buzzer,LOW);音
  67.   delay(1);
  68. }

  69. }
复制代码


回复

使用道具 举报

发表于 2013-7-14 09:36:32 | 显示全部楼层
比我的的厉害多了
回复 支持 反对

使用道具 举报

发表于 2013-7-14 12:50:16 | 显示全部楼层
挺好的,我学了好长一段时间还没做出来你这样的实验呢,向你学习了!
回复 支持 反对

使用道具 举报

发表于 2013-7-30 15:36:04 | 显示全部楼层
求真像,谢谢
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
很牛逼啊,向大婶学习!!!
回复 支持 反对

使用道具 举报

发表于 2015-5-21 23:51:12 | 显示全部楼层
求助楼主会不会编超声波测距控制蜂鸣器的乐器的程序啊
具体问题在这里http://www.geek-workshop.com/thread-15034-1-1.html
多谢
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 21:14 , Processed in 0.037980 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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