Programar en pic c compiler un coche rastreador de lineas negras de 8 sensores

Iniciado por sephirot224, 13 Marzo 2011, 16:38 PM

0 Miembros y 2 Visitantes están viendo este tema.

sephirot224

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 pero me daba error, me gustaria que corrigierais el error o una alternativa al programa.
Gracias y saludos.

////////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();
}
}
}

FIN


<<<-Basura->>>

La verdad Casi no entiendo tu codigo pero deberias subir el diagrama del circuito para ver si entendemos bien tu codigo ;) asi vemos como esta conectado el micro O.o nos damos una idea... y aqui no se deberia de postear esto :O
<<<--Basura-->>>

crash_bs

hola, puedo notar que te falta un corchete de cierre }  al final de la funcion void parado(), tambien en la parte final del programa te falta tres parentesis de apertura (   en estado == 12) ...  estado == 3) ... estado == 8)   y tambien me parece que deberías declarar la variable estado como publica. espero q te ayude