告诫,不要想着别人都给你做好,自己动手才算是自己的,多看看程序是OK的!
知道了,版主,昨天我写了一个,求指导改正 熊猫 发表于 2013-6-3 17:21 static/image/common/back.gif
代码很好改,主要看你的连线是怎么连的,按照datasheet连好电路,再按你的引脚改改代码
我写了个程序,贴在楼下了,求指导改正哈哈,,, TTTTTTT33 发表于 2013-6-3 17:37 static/image/common/back.gif
您的問題是超音波無法驅動嗎??
您的超音波模組是那一種??
我把程序贴出来了,给指指错误哈 华子 发表于 2013-6-7 13:22 static/image/common/back.gif
我写了个程序,贴在楼下了,求指导改正哈哈,,,
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短 熊猫 发表于 2013-6-7 13:43 static/image/common/back.gif
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,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);
}
}
熊猫 发表于 2013-6-7 13:43 static/image/common/back.gif
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短
不知道最后调用那个函数有没有距离越近越急促的效果 华子 发表于 2013-6-7 14:44 static/image/common/back.gif
我又改了一些
#include
很好,继续努力,写程序最好养成习惯加注释! Randy 发表于 2013-6-8 00:55 static/image/common/back.gif
很好,继续努力,写程序最好养成习惯加注释!
感谢版主支持,,程序已经出来了,(完全靠自己),而且加了语音模块,就是不是太完美,实现思路上求指导 !!
页:
1
[2]