|
|
本帖最后由 sventy5 于 2015-4-12 13:02 编辑
SR04超声波价格便宜,但是存在一定的误差,作为小白的我就按葫芦画瓢写了一个超声波滤波程序,结果不管怎么调试都不能输出正确的值,还请大神们解救{:soso_e109:}- int distance1;
- int output1 = 5;
- int intput1 = 6;
- //////////////////////////////////////////////////////
- void setup() {
- Serial.begin(9600); // 初始化串口通信
- pinMode(intput1, INPUT);
- pinMode(output1, OUTPUT);
- randomSeed(Filter()); // 产生随机种子
- }
- void loop() {
- distance1 = Filter(); // 获得滤波器输出值
- distance1 = distance1; // 最近一次有效采样的值,该变量为全局变量
- ////////////////////////////////////////////////////////////////
-
- { //第一个超声波
- digitalWrite(output1, LOW);
- delayMicroseconds(2);
- digitalWrite(output1, HIGH);
- delayMicroseconds(10);
- intput1 = pulseIn(intput1, HIGH);
- distance1 = intput1 / 58;
- distance1 = constrain(distance1, 10, 300);
- }
- Serial.print("distance1=");
- Serial.print(distance1);
- delay(500);
- }
- //用于随机产生一个100左右的当前值
- int Get_AD() {
- random(95, 105);
- }
- // 限幅滤波(又称程序判断滤波法)
- #define FILTER_A 100
- int Filter() {
- int Newintput1;
- Newintput1 = Get_AD();
- if (((Newintput1 - intput1) < FILTER_A) || ((intput1 - Newintput1) < FILTER_A))
- return intput1;
- else
- return Newintput1;
- }
复制代码 |
|