|
发表于 2017-3-28 10:59:23
|
显示全部楼层
你好,大神。你可不可以帮我看一下我用你写的算术平均滤波方法写的超声波测距代码有没有问题。
- #include <LiquidCrystal.h>
- LiquidCrystal lcd (12,11,5,4,3,2);
- int TrigPin = 9;
- int EchoPin =8;
- unsigned long Time_Echo_us;
-
-
- void setup()
- {
- lcd.begin(16,2);
- ;
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- }
- void loop()
- {
-
-
- digitalWrite(TrigPin,LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin,HIGH);
- delayMicroseconds(50);
- digitalWrite(TrigPin,LOW);
-
- Time_Echo_us= pulseIn(EchoPin,HIGH);
-
- if(( Time_Echo_us <= 23530)&&(Time_Echo_us > 175))
- {
- #define FILTER_N 4
- unsigned long j;
-
- unsigned long filter_sum = 0;
- for(int i = 0; i < FILTER_N; i++)
- {
- filter_sum +=( Time_Echo_us*0.017);
- delay(1);
- }
- j= ( (filter_sum / FILTER_N));
-
- lcd.print(j);
- delay(400);
- lcd.clear();
- lcd.home();
- }
- else
- {
- lcd.clear();
- }
-
- }
-
复制代码
我本意是想在一个周期内取5次超声波测量值,然后求其平均值打印在LCD上面。我用您的算术平均滤波代码,也能显示,就是感觉好像没有取到平均值(和没有使用滤波方法之前一样效果)。在同一个地方,超声波模块也没有移动,数字跳动比较大,按道理娶了平均值数字波动是比较小的,整数位最起码不会跳动2厘米上下。你的这个滤波方法肯定是正确的,所以我估计是没有理解您写的这个滤波方法,或者用错了,麻烦您抽空帮我看一下我上面的代码,帮我指导整理修改一下,感激不尽。 |
|