极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12630|回复: 2

超声波传感器 测船离水面的高度

[复制链接]
发表于 2016-2-15 20:17:54 | 显示全部楼层 |阅读模式
各位大神,要用超声波传感器放在船下面去检测船离水面的高度 这是我前人写的检测距离的代码 他为了减小水浪对距离检测的影响,好像用了一个circular buffer. 我理解不来 谁看懂了能帮我讲讲

#include <Ultrasonic.h> // Made by: Erik

long Time = 0;
static const char IntFalling = 2;
static const char IntRising = 3;
static const char Pulse = 4;
static const unsigned char numReadings = 40;
UltrasonicSensor UltrasonicSensor1(&Pulse, &IntFalling, &IntRising, &numReadings);

float Result = 0;

void setup(){
  Serial.begin(115200);
  Serial.println("Hello");
  
  // Set interrupt
  attachInterrupt(0, TriggerFalling, FALLING);
  attachInterrupt(1, TriggerRising, RISING);

  Time = millis();
}

void loop(){
  if((millis() - Time) >= 25){
    Time = millis();
    Result = UltrasonicSensor1.Read();
    Serial.println(Result);
  }
}

void TriggerRising(){
  UltrasonicSensor1.TriggerRising();
}
void TriggerFalling(){
  UltrasonicSensor1.TriggerFalling();
}

以下是这个编程的头文件Ultrasonic.h
/* Author: Erik
   Date: Februari 2015 to june 2015
  
*/

#ifndef UltrasonicSensor_V1
#define UltrasonicSensor_V1

class UltrasonicSensor
{
        public:
                UltrasonicSensor(const char*, const char*, const char*, const unsigned char*);
               
                void TriggerRising();
                void TriggerFalling();
                float Read();

        private:
                void CalculateMovingAvarage();
                void ClearVariables();
                void MicroPulse(int);

                volatile bool Running;
                volatile bool TCFRunning;
                volatile bool TCRRunning;
                volatile int TempTime; // Temporary value used for a check
                volatile int TravelTimeInterrupt;
                volatile int StartTime;
                volatile int InterruptCounterFalling;
                volatile int InterruptCounterRising;
               
                const char *Pulse;
               
                //UltrasonicSensor Moving Avarage
                const unsigned char *numReadings;
                static const char numReadingsUD = 3; // Number of readings Up and Down (total number of reflections)
                float readings[50];        // the readings from the sensor
                int index;                                // the index of the current reading
                float total;                        // the running total
                float MovingAverage;        // The moving average

                //Constants
                static const int RCTime = 1140; // Vibration time in microseconds of the ultrasonic sensor. Do not look for a pulse before this amount of time has passed.
                static const float SpeedOfSound = 330.0 / 10000; // 330m/s / (1000000us * 100)

                //Ultrasonic Advanced Data Collection
                float TravelTimeFalling[numReadingsUD];
                float SignalLengthFalling[numReadingsUD];
                float TravelTimeRising[numReadingsUD];
                float SignalLengthRising[numReadingsUD];
};
#endif
回复

使用道具 举报

发表于 2016-2-15 23:38:58 | 显示全部楼层
本帖最后由 Ansifa 于 2016-2-16 00:09 编辑

你的代码还没贴完,还差个Ultrasonic.h下面的Ultrasonic.c文件
测试一下下面的代码,超声输出只需要接pin2:
[pre lang="arduino" line="1" file="1.ino"]const int TrigPin = 2;
float cm;
void setup()
{
        Serial.begin(9600);
}
void loop()
{
        pinMode(TrigPin, OUTPUT);
        digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
        delayMicroseconds(2);
        digitalWrite(TrigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(TrigPin, LOW);
        pinMode(TrigPin, INPUT);

        cm = pulseIn(TrigPin, HIGH) / 58.0; //将回波时间换算成cm
        cm = (int(cm * 100.0)) / 100.0; //保留两位小数
        Serial.print(cm);
        Serial.print("cm");
        Serial.println();
        delay(1000);
}[/code]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-16 18:12:41 | 显示全部楼层
Ansifa 发表于 2016-2-15 23:38
你的代码还没贴完,还差个Ultrasonic.h下面的Ultrasonic.c文件
测试一下下面的代码,超声输出只需要接pin2 ...

我就接了vcc ground 和 pin2
然后 用这个程序显示的就是00000 啊
怎么用示波器看这个超声波是不是坏掉了?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 21:10 , Processed in 0.034483 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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