9.消抖濾波法

/*

A、名稱:消抖濾波法

B、方法:

設置一個濾波計數器,將每次采樣值與當前有效值比較:

如果采樣值=當前有效值,則計數器清零;

如果采樣值<>當前有效值,則計數器+1,並判斷計數器是否>=上限N(溢出);

如果計數器溢出,則將本次值替換當前有效值,並清計數器。

C、優點:

對於變化緩慢的被測參數有較好的濾波效果;

可避免在臨界值附近控制器的反復開/關跳動或顯示器上數值抖動。

D、缺點:

對於快速變化的參數不宜;

如果在計數器溢出的那一次采樣到的值恰好是干擾值,則會將干擾值當作有效值導入系統。

E、整理:shenhaiyu 2013-11-01

*/

int Filter_Value;

int Value;

void setup() {

Serial.begin(9600); // 初始化串口通信

randomSeed(analogRead(0)); // 產生隨機種子

Value = 300;

}

void loop() {

Filter_Value = Filter(); // 獲得濾波器輸出值

Serial.println(Filter_Value); // 串口輸出

delay(50);

}

// 用於隨機產生一個300左右的當前值

int Get_AD() {

return random(295, 305);

}

// 消抖濾波法

#define FILTER_N 12

int i = 0;

int Filter() {

int new_value;

new_value = Get_AD();

if(Value != new_value) {

i++;

if(i > FILTER_N) {

i = 0;

Value = new_value;

}

}

else

i = 0;

return Value;

}