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
Ir a la versión completa