El caso esque estamos haciendo un seguidor de linea en C y cn el CCS, cuando pongo un if y comparando no mas de 2 veces todo va perfecto y hace el seguidor lo que le decimos, aora si comparamos mas de 3 veces...teniendo en cuenta que tenemos un total de 5 cny70 leyendo si hay linea o no, nose si es un problema de mi programa...o esque el ccs no admite tanto, seria una pena de programa entonces, porque no se podria trabajar cn muchos sensores...sin mas dilacion les envio mi programa tal cual, es por modulacion, esta es la quintuple version de lo mismo...pero empezando desde el principio
#include <18F4550.h>
#use standard_io(a,b,c,d)
#fuses XT, NOWDT, NOMCLR, NOBROWNOUT, NOLVP, NOCPD, NOPBADEN
#use delay(clock = 4000000)
int16 M_IZQUIERDO=100, M_DERECHO=100; // motores al principio parados
int16 M_IZQUIERDO_2=100, M_DERECHO_2=100;
int8 a=0;
void main (void) {
disable_interrupts(global);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1 );
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(40000);
do {
//L_I=input(pin_d3);
//L_I_C=input(pin_d2); lateral izquierdo cercano al del centro
//C=input(pin_c4);
//L_D_C=input(pin_c6); lateral derecho cercano al del centro
//L_D=input(pin_c5);
if ( input(pin_d2)==0 && input(pin_c6)==0 ){ // detectores centrales en linea
if ( input(pin_d3)==1 &&input(pin_c5)==1 ){ // laterales fuera de linea
M_IZQUIERDO=800; M_DERECHO=800;
}
if ( input(pin_d3)==1 &&input(pin_c5)==0 ){ // detector derecho dentro de linea
M_IZQUIERDO=700; M_DERECHO=500;
}
if ( input(pin_d3)==0 &&input(pin_c5)==1 ){ // detector izquierdo dentro de linea
M_IZQUIERDO=500; M_DERECHO=700;
}
if ( input(pin_d3)==0 &&input(pin_c5)==0 ){ // los dos dentro de la linea
M_IZQUIERDO=800; M_DERECHO=800;
}
}
if ( input(pin_d2)==1 && input(pin_c6)==1 ){ // dos centrales fuera de linea
if ( input(pin_d3)==0 &&input(pin_c5)==1 ){ // veamos cual es el ultimo para salirse
M_IZQUIERDO=500; M_DERECHO=700;
}
if ( input(pin_d3)==1 &&input(pin_c5)==0 ){
M_IZQUIERDO=700; M_DERECHO=500;
}
if ( input(pin_d3)==1 &&input(pin_c5)==1 ){
M_IZQUIERDO=100; M_DERECHO=100;
}
}
if ( input(pin_d2)==1 && input(pin_c6)==0 ){ // se sale primero por el izquierdo
if ( input(pin_d3)==1 &&input(pin_c5)==0 ){
M_IZQUIERDO=800; M_DERECHO=450;
}
}
if ( input(pin_d2)==0 && input(pin_c6)==1 ){ // se sale por el izquierdo
if ( input(pin_d3)==0 &&input(pin_c5)==1 ){
M_IZQUIERDO=450; M_DERECHO=800;
}
}
}
while(true);
}
#int_timer1
void modulacion(void)
{
if ( a==0){
M_IZQUIERDO_2=M_IZQUIERDO;
set_timer1(65535-M_IZQUIERDO_2);
output_high(pin_d1);
}
else if (a==1){
set_timer1(65535-1250+M_IZQUIERDO_2); // 1250 es la ventana de los motores,los 400 Hz
output_low(pin_d1); // son 2500 tics
}
else if ( a==2){
M_DERECHO_2=M_DERECHO;
set_timer1(65535-M_DERECHO_2);
output_high(pin_c7);
}
else if (a==3){
set_timer1(65535-1250+M_DERECHO_2);
output_low(pin_c7);
a=-1;
}
a++;
}
como podeis observar, aun haciendo una anidacion tampoco funciona, solo si comparas dos y...sin anidar con otras, intente leer la entrada y meterla en una variable cmo se observa en lo comentado, y eso tampoco funcionaba, sabeis porque es? el ccs te quita el trabajo de trabajar con direcciones y funciones y tal...por eso lo utilizamos pero si ciertas cosas no las hace, tendremos q utilizar otro, pues restringe muchisimo lo que queremos hacer, muchas gracias de antemano ( notese que he hecho anidacion y no e comparao 4 veces dentro del if, aun asi tampoco funciona