Yo no se como calibrarlos, es decir cual es la mejor estrategia para determinar el mejor valor.Lo que no entiendo es por que harias eso con el ADC ?..
Es decir por que resumirias el valor tomado del ADC en un ON/OFF y luego actuando de acuerdo a ello.
La parte de calibracion lo haria sobre la linea obteniendo los maximos y minimos sobre el trayecto. de esos maximos y minimos es el rango que tendrais de tus sensores. De acuerdo a eso vas a determinar cual motor debe accelerar un poco mas y cual menos. Como solo tenes 5 sensores, tal ves debas interpolar para encontrar mas valores intermedio. y de esa forma alimentar a un PWM aumentando o disminuyendo la velocidad de cualquiera de los motores. Tal ves un PID aca para eso
Asi como esta el programa seguiria una linea recta pero ante una curva creo que se le complicaria un poco.
PD: Trata de escribir en muchas lineas. Pocas lineas hace ilegible el codigo. Y no estas ahorrando espacio en el micro, solamente complicandote la vida vos mismo.
void main(){
trisa=0b11111111;
trisb=0b00000000;
ansela=0b11111111;
anselb=0b00000000;
porta=0;
portb=0;
Adc_Init();
while(1){
s1=ADC_Read(0);
s2=ADC_Read(1);
s3=ADC_Read(2);
s4=ADC_Read(3);
s5=ADC_Read(4);
if (s1>90){sens1=1;} else sens1=0;
if (s2>90){sens2=1;} else sens2=0;
if (s3>90){sens3=1;} else sens3=0;
if (s4>90){sens4=1;} else sens4=0;
if (s5>90){sens5=1;} else sens5=0;
der=sens4+sens5;
izq=sens1+sens2;
if (der==izq)
{
l=0;r=0;
}
if (der>izq)
{
r=1;l=0;
}
if (izq>der)
{
l=1;r=0;
}
}
}
Una cosa mas:
long? con un
int que es de 16 bits bastaria si es que tu ADC es de 10 bit. pero por como lo estas usando bastaria con ser de 8.