我的求平均值的函数提供随机值

问题描述 投票:0回答:1

我正在使用MikroC尝试对PIC4550进行编程以从pH传感器中检索数据。该程序包括检索数据40次并使用下面的平均值功能计算其平均值]

double Average(int* arr, int number)
{
    int i;
    int ave;
    int sum = arr[0];
    for(i = 0;i<number;i++)
    {
        sum=sum+arr[i];
    }
    ave = sum/number;
    return ave;
}

我的问题是,大多数情况下,它提供的随机值与正确答案相距甚远。例如,正确的答案是633,但传递-185。谁能指出我的错误?谢谢。我的完整代码如下

#define volt 5.00 //system voltage
#define arraylength 40 // number of data collection
#define offsetph 5   //deviate compensate

double Average(int*, int);

void main() {
     float ph_res=0;
     float pHsensor_output[40];
     double avepH;
     double pHvoltage;
     float offsetpH=0.38;  //change to actual pH offset
     float pHlevel;
     char testing[20];
     char pher[20];
     int i;
     int pH_index=0;
     UART1_Init(9600);
     ADCON1=0x00;
     CMCON=7;

     TRISA=0xFF;


   while(1){
    UART1_Write_Text("Reading pH....\r\n");
     for(i = 0; i<40; i++) {
            pHsensor_output[i] = ADC_Read(1);
            sprintf(testing,"READING: %.2f\r\n",pHsensor_output[i]);
            UART1_Write_Text(testing);
            delay_us(1000);
        }
        avepH = Average(pHsensor_output, 40);
        sprintf(testing,"AVG: %f\r\n",avepH);
        UART1_Write_Text(testing);
        pHvoltage = avepH*5/1024;
        pHlevel = 3.5*pHvoltage+offsetph;
        if(pHlevel!=pH_res){
            pH_res = pHlevel;

        }
             sprintf(pher,"pH: %f\r\n",pH_res);
            UART1_Write_Text(pher);

     delay_ms(2000);
       } }
double Average(int* arr, int number)
{
    int i;
    int ave;
    int sum = arr[0];
    for(i = 0;i<number;i++)
    {
        sum=sum+arr[i];
    }
    ave = sum/number;
    return ave;
}
c algorithm average pic mikroc
1个回答
0
投票

几条评论指出,求和过程中有溢出的风险。如果这是16位计算机,则INT_MAX为32767。按照您的示例,您并没有接近它,但是要小心一点。

© www.soinside.com 2019 - 2024. All rights reserved.