极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 华子

新手求助,最近学习arduino,研究到超声波测距,不知如何下手,求高手指导

[复制链接]
 楼主| 发表于 2013-6-7 13:21:13 | 显示全部楼层
Randy 发表于 2013-6-6 00:14
告诫,不要想着别人都给你做好,自己动手才算是自己的,多看看程序是OK的!

知道了,版主,昨天我写了一个,求指导改正
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 13:22:28 | 显示全部楼层
熊猫 发表于 2013-6-3 17:21
代码很好改,主要看你的连线是怎么连的,按照datasheet连好电路,再按你的引脚改改代码

我写了个程序,贴在楼下了,求指导改正  哈哈,,,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 13:23:22 | 显示全部楼层
TTTTTTT33 发表于 2013-6-3 17:37
您的問題是超音波無法驅動嗎??

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

我把程序贴出来了,给指指错误哈
回复 支持 反对

使用道具 举报

发表于 2013-6-7 13:43:47 | 显示全部楼层
华子 发表于 2013-6-7 13:22
我写了个程序,贴在楼下了,求指导改正  哈哈,,,

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

使用道具 举报

 楼主| 发表于 2013-6-7 14:44:08 | 显示全部楼层
熊猫 发表于 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);
        }



    }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 14:47:00 | 显示全部楼层
熊猫 发表于 2013-6-7 13:43
直接看结果被,不过从程序看,那三段蜂鸣器应该没区别,delay(1,2,3)都很短

不知道最后调用那个函数有没有  距离越近越急促的效果
回复 支持 反对

使用道具 举报

发表于 2013-6-8 00:55:53 | 显示全部楼层
华子 发表于 2013-6-7 14:44
我又改了一些

#include

很好,继续努力,写程序最好养成习惯加注释!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-9 12:54:55 | 显示全部楼层
Randy 发表于 2013-6-8 00:55
很好,继续努力,写程序最好养成习惯加注释!

感谢版主支持,,程序已经出来了,(完全靠自己),而且加了语音模块,就是不是太完美,实现思路上求指导 !!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 15:04 , Processed in 0.082909 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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