Programación Específica > Programación en C

 Coche rastreador de lineas negras de 8 sensores infrarrojos

(1/1)

sephirot224:
Buenas soy nuevo en esto, realice una placa de un coche rastreador de lineas negras de 8 sensores por el proteus y luego programe el programa c en el programa pic c compiler para luego meterlo en un microcontrolador 16F873 pero me da error y no complila ¿me podeis decir el error o errores que tiene?
Gracias y saludos.


--- Código: C ---////////Coche rastreador////////// //Características del microcontrolador #include <16F873.h>#fuses XT,NOWDT,NOPROTECT#use delay(clock=4000000)      #define NEGRO 0#define BLANCO 1#define S1 input(pin_A5)#define S2 input(pin_A4)#define S3 input(pin_A3)#define S4 input(pin_A2)#define S5 input(pin_A1)#define S6 input(pin_A0)#define S7 input(pin_B7)#define S8 input(pin_B6) void derecha(){ output_low(pin_B3); //Motor derecho 1 output_high(pin_B4); //Motor derecho 2 output_high(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2}void izquierda(){ output_high(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_low(pin_B1); //Motor izquierdo1 output_high(pin_B2); //Motor izquierdo 2}void recto(){ output_high(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_high(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2}void parado(){ output_low(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_low(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2 void main(){  int estado=0;   while (1)  {     if(S1==NEGRO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {      estado=1;    }     if(S1==BLANCO&&S2==NEGRO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=2;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=3;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==NEGRO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {      estado=4;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==NEGRO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=5;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {     estado=6;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==NEGRO&&S8==BLANCO)    {      estado=7;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==NEGRO)    {     estado=8;    }     if(S1==NEGRO&&S2==NEGRO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=9;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {      estado=10;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==NEGRO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=11;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==NEGRO&&S5==NEGRO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=12;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==NEGRO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {      estado=13;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {     estado=14;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==NEGRO&&S8==NEGRO)    {     estado=15;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {      estado=16;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=17;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=18;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {      estado=19;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {     estado=20;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {     estado=21;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {      estado=22;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=23;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {     estado=24;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {      estado=25;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {     estado=26;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=27;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {     estado=28;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {      estado=29;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {     estado=30;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==BLANCO&&S8==BLANCO)    {     estado=31;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {      estado=32;    }     if(S1==BLANCO&&S2==BLANCO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {     estado=33;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==BLANCO)    {     estado=34;    }     if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {     estado=35;    }     if(S1==NEGRO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==NEGRO&&S6==NEGRO&&S7==NEGRO&&S8==NEGRO)    {      estado=36;    }     if(S1==BLANCO&&S2==BLANCO&&S3==BLANCO&&S4==BLANCO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO)    {     estado=37;    }        if ((estado==0) || (estado==37))    {     parado();    }     if ((estado==4) || (estado==5) || estado==12) || (estado==18) || (estado==19) || (estado==23) || (estado==24) || (estado==25) || (estado==28) || (estado==29) || (estado==32) || (estado==36))    {     recto();    }     if ((estado==1) || (estado==2) || estado==3) || (estado==9) || (estado==10) || (estado==11) || (estado==16) || (estado==17) || (estado==22) || (estado==27) || (estado==31) || (estado==34))    {     izquierda();    }     if ((estado==6) || (estado==7) || estado==8) || (estado==13) || (estado==14) || (estado==15) || (estado==20) || (estado==21) || (estado==26) || (estado==30) || (estado==33) || (estado==35))    {     derecha();    }  }} 

© Jonathan ©:
Buenas noches, mirando por arriba tu codigo veo que usas mal los IF, tu pones el IF de la siguiente manera.:


--- Código: C ---if(S1==BLANCO&&S2==NEGRO&&S3==NEGRO&&S4==NEGRO&&S5==BLANCO&&S6==BLANCO&&S7==BLANCO&&S8==BLANCO) 
Varias veces tuve inconveniente con mis codigos por cometer el mismo error, te recomiendo que pongas los IF de la siguiente manera y pruebes los resultados.


--- Código: C ---if((S1==BLANCO) && (S2==NEGRO) && (S3==NEGRO) && (S4==NEGRO) && (S5==BLANCO) && (S6==BLANCO) && (S7==BLANCO) && (S8==BLANCO)) 
Tambien despues de compilar si aun tienes errores te pido que los copies y pegues aqui para poder encontrar mas facil la causa de que no compile.

Saludos! :good:

sephirot224:
Parece ser que dice que es demasiado largo y que no lo soporta la ROM
¿alguna alternativa?


--- Código: C ---//Características del microcontrolador #include <16F873.h>#fuses XT,NOWDT,NOPROTECT //Cristal cuarzo 4 Mhz, sin perro guardian y sin#use delay(clock=4000000)       //protección#define NEGRO 0#define BLANCO 1#define S1 input(pin_A5)#define S2 input(pin_A4)#define S3 input(pin_A3)#define S4 input(pin_A2)#define S5 input(pin_A1)#define S6 input(pin_A0)#define S7 input(pin_B7)#define S8 input(pin_B6) void derecha(){ output_low(pin_B3); //Motor derecho 1 output_high(pin_B4); //Motor derecho 2 output_high(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2}void izquierda(){ output_high(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_low(pin_B1); //Motor izquierdo1 output_high(pin_B2); //Motor izquierdo 2}void recto(){ output_high(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_high(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2}void parado(){ output_low(pin_B3); //Motor derecho 1 output_low(pin_B4); //Motor derecho 2 output_low(pin_B1); //Motor izquierdo1 output_low(pin_B2); //Motor izquierdo 2}void main(){  int estado=0;   while (1)  {     if((S1==NEGRO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=1;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=2;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=3;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==NEGRO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=4;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==NEGRO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=5;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=6;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==NEGRO)&&(S8==BLANCO))    {      estado=7;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==NEGRO))    {     estado=8;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=9;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=10;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=11;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=12;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=13;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {     estado=14;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=15;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=16;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=17;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=18;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=19;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {     estado=20;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==BLANCO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=21;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==BLANCO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {      estado=22;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=23;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=24;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {      estado=25;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==BLANCO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=26;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==BLANCO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=27;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=28;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {      estado=29;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==BLANCO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=30;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==BLANCO)&&(S8==BLANCO))    {     estado=31;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {      estado=32;    }     if((S1==BLANCO)&&(S2==BLANCO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=33;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==BLANCO))    {     estado=34;    }     if((S1==BLANCO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {     estado=35;    }     if((S1==NEGRO)&&(S2==NEGRO)&&(S3==NEGRO)&&(S4==NEGRO)&&(S5==NEGRO)&&(S6==NEGRO)&&(S7==NEGRO)&&(S8==NEGRO))    {      estado=36;    }         if ((estado==0))    {     parado();    }     if ((estado==4) || (estado==5) || (estado==12) || (estado==18) || (estado==19) || (estado==23) || (estado==24) || (estado==25) || (estado==28) || (estado==29) || (estado==32) || (estado==36))    {     recto();    }     if ((estado==1) || (estado==2) || (estado==3) || (estado==9) || (estado==10) || (estado==11) || (estado==16) || (estado==17) || (estado==22) || (estado==27) || (estado==31) || (estado==34))    {     izquierda();    }     if ((estado==6) || (estado==7) || (estado==8) || (estado==13) || (estado==14) || (estado==15) || (estado==20) || (estado==21) || (estado==26) || (estado==30) || (estado==33) || (estado==35))    {     derecha();    }  }} 

© Jonathan ©:
Bueno, no se que te estara pasando pero compile perfecto tu codigo con el PCWHD 4.068. Te adjunto el archivo HEX para que lo pruebes en tu proyecto, a mi me compilo todo perfecto. Saludos

m0skit0:

--- Cita de: "sephirot224" ---Parece ser que dice que es demasiado largo y que no lo soporta la ROM
--- Fin de la cita ---
¿Te refieres a que el binario resultante es demasiado grande para la ROM de tu placa?

Navegación

[0] Índice de Mensajes

Ir a la versión completa