在这段代码中增加一个数组形参:float filter(float input)//两个ADC输入值要滤波,每个ADC值等待10个值后,才能输入另外一个AD值,才不会两个AD值混在一个队列里 { float average=0; float filter_mirror[10]={0},buff=0; static float filter_buf[10]={0}; unsigned char i=0,j=0; for(i=9;i>0;i--)// { filter_buf[i]=filter_buf[i-1];//入队列 printf("-----%.1f\n",filter_buf[i]); } printf("////////////\n"); filter_buf[0]=input;//第一次输入队列的值 for(i=0;i<10;i++) { filter_mirror[i]=filter_buf[i];// printf("*****%.1f\n",filter_mirror[i]); } for(i=0;i<9;i++)//冒泡排序大到小 { for(j=i+1;j<10;j++) { if(filter_mirror[i]<filter_mirror[j]) { buff=filter_mirror[i]; filter_mirror[i]=filter_mirror[j]; filter_mirror[j]=buff; } } } for(i=0;i<10;i++)// { average+=filter_mirror[i]; } return average; //VC6.0不懂为什么返回不了浮点 }
时间: 2024-03-01 20:52:03 浏览: 104
好的,我理解你的意思了。你需要在每个ADC输入值上增加一个滤波器,这个滤波器需要等待10个值,才能进行滤波。在这个过程中,需要使用一个数组来存储滤波器的输入值,另一个数组来存储滤波器的输出值。
下面是一个示例程序,实现了这个功能:
```c
#include <stdio.h>
float filter(float input, float filter_buf[], float filter_mirror[]) {
float average = 0;
static unsigned char count = 0;
unsigned char i = 0, j = 0;
float buff = 0;
filter_buf[count] = input;
count = (count + 1) % 10;
for (i = 0; i < 10; i++) {
filter_mirror[i] = filter_buf[i];
}
for (i = 0; i < 9; i++) {
for (j = i + 1; j < 10; j++) {
if (filter_mirror[i] < filter_mirror[j]) {
buff = filter_mirror[i];
filter_mirror[i] = filter_mirror[j];
filter_mirror[j] = buff;
}
}
}
for (i = 0; i < 10; i++) {
average += filter_mirror[i];
}
return average / 10;
}
int main() {
float filter_buf1[10] = {0};
float filter_mirror1[10] = {0};
float filter_buf2[10] = {0};
float filter_mirror2[10] = {0};
float input1 = 0, input2 = 0;
while (1) {
printf("请输入第一个ADC值:");
scanf("%f", &input1);
printf("滤波后的值为:%.2f\n", filter(input1, filter_buf1, filter_mirror1));
printf("请输入第二个ADC值:");
scanf("%f", &input2);
printf("滤波后的值为:%.2f\n", filter(input2, filter_buf2, filter_mirror2));
}
return 0;
}
```
这个程序定义了两个滤波器,分别使用数组`filter_buf1`和`filter_buf2`存储输入值,使用数组`filter_mirror1`和`filter_mirror2`存储排序后的值。在`filter`函数中,每次输入一个新的值`input`,就将它存储到滤波器的输入数组中。然后,程序使用冒泡排序将滤波器的输入值从大到小排序,取前10个值的平均值作为滤波器的输出值。这个程序使用了静态变量`count`来记录输入数组的位置,每输入一个新的值,就将`count`加1,然后对10取模,这样就能够循环使用`filter_buf`数组了。
在`main`函数中,程序循环读取输入的两个ADC值,并依次将它们输入到两个滤波器中,然后输出滤波后的值。
阅读全文