数据处理——冒泡排序

采集AD值做运算,偶尔有几个值会偏大或者偏小,导致计算结果很不稳,用冒泡排序做处理,程序如下:

void sort(uint16_t *a, uint16_t l)//a为数组地址,l为数组长度。
{
    int i, j;
    int v;
    //排序主体
    for(i = 0; i < l - 1; i ++)
        for(j = i+1; j < l; j ++)
        {
            if(a[i] > a[j])//如前面的比后面的大,则交换。
            {
                v = a[i];
                a[i] = a[j];
                a[j] = v;
            }
        }
}

接下来对AD值处理,去掉两头的数,取中间一段,计算结果会相对稳定。

void voltage0(void)
{
      uint16_t adrange[10];
      
    uint8_t i = 0;
    uint16_t sum = 0;
    //取10次电压平均值
    for (i = 0;i < 10;i++)
    {
        adrange[i]= ADCConvertedValue[i * 2];
    }
        sort( adrange,  10);
    sum=adrange[2]+adrange[3]+adrange[4]+adrange[5]+adrange[6];
        sum1=sum/4;
        
}

猜你喜欢

转载自blog.csdn.net/weixin_42133183/article/details/81202533
今日推荐