熊猫 发表于 2013-6-7 13:43 
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短
我又改了一些
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,5,4,3,2);//定义LCD的引脚连接情况
int TrigPin=14; // 将Arduino 的 Pin3 连接至 HC-SR04 的 Trig/TX,或定义超声波信号发出接口
int EchoPin=13; // 将Arduino 的 Pin2 连接至 HC-SR04 的 Echo/RX,或定义超声波信号接收接口
// 定义变色灯LED的三个输出接口
int ledpin1=6; // 红灯
int ledpin2=7; // 黄灯
int ledpin3=8; // 绿灯
int beeppin =9; // 蜂鸣器的pin
void setup()
{
Serial.begin(9600); //测量结果将通过此串口输出至 PC 上的串口监视器
pinMode(EchoPin, INPUT); //设置EchoPin 为输入模式
pinMode(TrigPin, OUTPUT); //设置超声波数字IO脚模式,OUTPUT为输出
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledpin3,OUTPUT); //初始化变色灯的LED三个输出接口模式
pinMode(beeppin,OUTPUT); //设置蜂鸣器借口输出模式
lcd.begin(16,2); //定义lcd列数及行数
lcd.clear(); //清屏
lcd.setCursor(0,0); //光标位置置于0,0
}
void loop()
{
//以下是超声波测距计算与输出部分
digitalWrite(TrigPin, LOW); // 通过Trig/Pin 发送脉冲,触发 HC-SR04 测距,使发出发出超声波信号接口低电平2μs
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
delayMicroseconds(10);
digitalWrite(TrigPin, LOW); // 保持发出超声波信号接口低电平
int distance = pulseIn(EchoPin, HIGH); // 读出脉冲时间
distance= distance/58; // 将脉冲时间转化为距离(单位:厘米)
Serial.println(distance); //输出距离值
Serial.println("mm"); //输出结果至串口监视器
delay(50);
//以下是LCD液晶显示
lcd.clear(); //清屏
lcd.setCursor(0,0); //光标从这里开始
lcd.print("Distance is"); //使屏幕显示文字
lcd.setCursor(0,1); //设置光标位置为第二行第一个位置
lcd.print(distance);
lcd.print("CM");
unsigned char i,j;//定义发声量
//以下可以用if多选择语句 ,用以控制三个颜色的灯亮暗和蜂鸣器报警提示
if (distance >=80) //当距离大于80cm(这个数据可以在超声波测量的范围内随意改,3cm~450cm )
{
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin2,LOW);
digitalWrite(ledpin3,HIGH); //绿灯亮闪烁,提示安全
delay(1000); //设定延时时间,1000 = 1秒
digitalWrite(ledpin3,LOW);
delay(1000); //设定延时时间,1000 = 1秒
digitalWrite(beeppin,LOW); //不发声
}
else if(distance<=80&&distance>=40) //否则,当距离小于80cm(这个数据可
以在超声波测量的范围内随意改,3cm~450cm ),蜂鸣器发出一个一般频率的警报声音,
{
while(1)
{
for(int i=0;i<80;i++)//输出一个频率的声音
{
digitalWrite(beeppin,HIGH);//发声音
delay(2);
digitalWrite(beeppin,LOW);//不发声音
delay(2);
}
for(int i=0;i<100;i++)//输出另一个频率的声音
{
digitalWrite(beeppin,HIGH);//发声音
delay(1);
digitalWrite(beeppin,LOW);//不发声音
delay(1);
}
}
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin2,HIGH); //黄灯闪烁,提示注意
delay(300); //设定延时时间,1000 = 1秒
digitalWrite(ledpin2,LOW);
delay(300); //设定延时时间,1000 = 1秒
delay(200); //延时
}
else //当距离小于40cm时候,
{
digitalWrite(ledpin2,HIGH);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin1,HIGH); //红灯闪烁,提示危险
delay(100); //设定延时时间,1000 = 1秒
digitalWrite(ledpin1,LOW);
delay(100); //设定延时时间,1000 = 1秒
alert(distance/2); //调用蜂鸣器急促警报声音函数,
//蜂鸣器发出高频率的警报声音
delay(30);//延时
}
//蜂鸣器急促警报声音函数,报警灯不断急促
void alert(unsigned i)
{
digitalWrite(beeppin,HIGH);
digitalWrite(ledpin,HIGH);
delay(i);
digitalWrite(beeppin,LOW);
digitalWrite(ledpin,LOW);
delay(i);
}
}
|