static void calculate_average_vol(void)
{
static u32 Fre_average_val=0,Fre_change_val=0;
static u32 Fre_averagelast_val=0;
static u32 Fre_val_buf[10];
if(Fre_average_val >= sys.energyValue)
{
Fre_change_val = Fre_average_val - sys.energyValue;
}
else
{
Fre_change_val = sys.energyValue - Fre_average_val;
}
if(Fre_change_val < 100) //--100范围内,不抖动
{
sys.energyValue = Fre_averagelast_val;
}
else
{
u8 i=0;
u32 sum=0;
u32 Fre_averagecurr_val=0;
u32 Fre_averchange_val=0;
for(i = 9; i > 0; i--)//--移位
{
Fre_val_buf[i] = Fre_val_buf[i-1];
}
Fre_val_buf[0] = sys.energyValue;
for(i = 0; i < 10; i++)//--求平均值
{
sum = sum + Fre_val_buf[i];
}
Fre_average_val = sum / 10;
Fre_averagecurr_val = Fre_average_val;
if(Fre_average_val >= sys.energyValue)
{
Fre_averchange_val = Fre_average_val - sys.energyValue;
}
else
{
Fre_averchange_val = sys.energyValue - Fre_average_val;
}
if(Fre_averchange_val > 1000)
{
sys.energyValue = 0;
}
else
{
sys.energyValue = Fre_averagecurr_val;
Fre_averagelast_val = sys.energyValue;
}
}
}