//******************************** file: range.c This code was modified to average 10 readings for both test and final results. Identical runs using a total of 40 readings show no improvement in accuracy. **************************************/ float range_avg() {int temp_range; int wedge_check; int q; int total_range; float sensor; float result; int test_range; /*use to throw out bad values*/ int offset; { test_range=0; wedge_check=0; total_range=0; for (q=1;q<11;q++) {sleep(.03); temp_range=analog(4); if(temp_range > 101 || temp_range < 18) {q--; wedge_check++; if (wedge_check>=10) {/*printf("range violation...\n");*/ return 0.; break;}} else test_range += temp_range;} test_range=test_range/10; /*use this number to check and discard ranges */ wedge_check=0; offset=1; if (test_range>53) offset=3; if (test_range>73) offset=4; for (q=1;q<11;q++) {sleep(.03); temp_range=analog(4); if(temp_range > test_range + offset|| temp_range < test_range - offset) {q--; wedge_check++; if (wedge_check>=10) {total_range=0; return 0.; break;}} else total_range += temp_range;} sensor = (float)(total_range)/10.; sensor = sensor/10.; /*get to fit in polynomial*/ if (sensor>1.9) {result=251.074-305.18338*sensor+175.0571222*(sensor^2.)-55.761907597*(sensor^3.0)+10.41118763938*(sensor^4.0)-1.1318716320922*(sensor^5.0)+.066254012440301*(sensor^6.0)-.00161179616687254*(sensor^7.0); return result;} } } /***********************END**************************/