我正在使用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;
}
几条评论指出,求和过程中有溢出的风险。如果这是16位计算机,则INT_MAX为32767。按照您的示例,您并没有接近它,但是要小心一点。