华子 发表于 2013-6-7 13:21:13

Randy 发表于 2013-6-6 00:14 static/image/common/back.gif
告诫,不要想着别人都给你做好,自己动手才算是自己的,多看看程序是OK的!

知道了,版主,昨天我写了一个,求指导改正

华子 发表于 2013-6-7 13:22:28

熊猫 发表于 2013-6-3 17:21 static/image/common/back.gif
代码很好改,主要看你的连线是怎么连的,按照datasheet连好电路,再按你的引脚改改代码

我写了个程序,贴在楼下了,求指导改正哈哈,,,

华子 发表于 2013-6-7 13:23:22

TTTTTTT33 发表于 2013-6-3 17:37 static/image/common/back.gif
您的問題是超音波無法驅動嗎??

您的超音波模組是那一種??


我把程序贴出来了,给指指错误哈

熊猫 发表于 2013-6-7 13:43:47

华子 发表于 2013-6-7 13:22 static/image/common/back.gif
我写了个程序,贴在楼下了,求指导改正哈哈,,,

直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短

华子 发表于 2013-6-7 14:44:08

熊猫 发表于 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 14:47:00

熊猫 发表于 2013-6-7 13:43 static/image/common/back.gif
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短

不知道最后调用那个函数有没有距离越近越急促的效果

Randy 发表于 2013-6-8 00:55:53

华子 发表于 2013-6-7 14:44 static/image/common/back.gif
我又改了一些

#include


很好,继续努力,写程序最好养成习惯加注释!

华子 发表于 2013-6-9 12:54:55

Randy 发表于 2013-6-8 00:55 static/image/common/back.gif
很好,继续努力,写程序最好养成习惯加注释!

感谢版主支持,,程序已经出来了,(完全靠自己),而且加了语音模块,就是不是太完美,实现思路上求指导 !!
页: 1 [2]
查看完整版本: 新手求助,最近学习arduino,研究到超声波测距,不知如何下手,求高手指导