极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10097|回复: 0

求大神帮我看看HC-SR04超声波滤波算法的问题

[复制链接]
发表于 2015-4-12 13:00:48 | 显示全部楼层 |阅读模式
本帖最后由 sventy5 于 2015-4-12 13:02 编辑

SR04超声波价格便宜,但是存在一定的误差,作为小白的我就按葫芦画瓢写了一个超声波滤波程序,结果不管怎么调试都不能输出正确的值,还请大神们解救{:soso_e109:}
  1. int distance1;
  2. int output1 = 5;
  3. int intput1 = 6;
  4. //////////////////////////////////////////////////////
  5. void setup() {
  6.   Serial.begin(9600);     // 初始化串口通信
  7.   pinMode(intput1, INPUT);
  8.   pinMode(output1, OUTPUT);
  9.   randomSeed(Filter()); // 产生随机种子
  10. }
  11. void loop() {
  12.   distance1 = Filter();       // 获得滤波器输出值
  13.   distance1 = distance1;          // 最近一次有效采样的值,该变量为全局变量
  14.   ////////////////////////////////////////////////////////////////

  15.   { //第一个超声波
  16.     digitalWrite(output1, LOW);
  17.     delayMicroseconds(2);
  18.     digitalWrite(output1, HIGH);
  19.     delayMicroseconds(10);
  20.     intput1 = pulseIn(intput1, HIGH);
  21.     distance1 = intput1 / 58;
  22.     distance1 = constrain(distance1, 10, 300);
  23.   }
  24.   Serial.print("distance1=");
  25.   Serial.print(distance1);
  26.   delay(500);
  27. }
  28. //用于随机产生一个100左右的当前值
  29. int Get_AD() {
  30.   random(95, 105);
  31. }
  32. // 限幅滤波(又称程序判断滤波法)
  33. #define FILTER_A 100
  34. int Filter() {
  35.   int Newintput1;
  36.   Newintput1 = Get_AD();
  37.   if (((Newintput1 - intput1) < FILTER_A) || ((intput1 - Newintput1) < FILTER_A))
  38.     return intput1;
  39.   else
  40.     return Newintput1;
  41. }
复制代码
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 23:33 , Processed in 0.044789 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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