Autor Tema: Programacion TCRT5000 Robot Seguidor de Linea  (Leído 4592 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Linea

  • PIC10
  • *
  • Mensajes: 2
Programacion TCRT5000 Robot Seguidor de Linea
« en: 11 de Enero de 2011, 07:00:40 »
Hola a todos, estoy montando un robot seguidor de linea y necesito que alguien me ayude con el programa del sensor que no me funciona correctamente y ya he estropeado un servomotor.
El Robot se compone de 2 motores, uno DC para las ruedas traseras y un Servo para las ruedas delanteras.
Necesito ayuda para programar el giro con los 3 sensores.
El programa que llevo hecho es el siguiente:

//////////////////////////////////TIMERS////////////////////////////////////////
#include <12f683.h>
//#fuses NOWDT // SIN WATCH DOG TIMER
#fuses INTRC_IO // OSCILADOR INTERNO SIN CLKOUT
#fuses NOCPD // NO EE PROTECTION
#fuses NOPROTECT // NO SE PUEDE LEER EL CODIGO DEL PIC
#fuses NOMCLR // PIN_A3 USADA PARA ENTRADA Y NO PARA RESET
#fuses NOPUT // SIN POWER UP TIMER
#fuses NOBROWNOUT // SIN BROWNOUT RESET
#use delay (clock=8000000) //CONFIGURACION DEL RELOJ
//#rom 0x7ff = {0x3400} // SOLUCIONA UN BUG DEL COMPILADOR

#DEFINE LIMITE_CONTADOR2 100 
#DEFINE LIMITE_CONTADOR0 100 
//***************VARIABLES GLOBALES****************************
//***************INTERRUPCIONES********************************
//****************************************************************
//***************FUNCIONES**************************************
//****************************************************************
void main ()
{
int contador0=0, lectimer0=0, lectimer2=0, contador2=0;   
int CENTRO=8;
int DERECHA=6;
int IZQUIERDA=10;

//*******************CONFIGURACION INICIAL**************************
setup_oscillator(OSC_8MHZ); //CONFIGURA EL OSCILADOR A 8 MHZ
setup_adc_ports(NO_ANALOGS); //ADCs DESACTIVADOS
setup_adc(ADC_OFF); //ADCs DESACTIVADOS
setup_comparator(NC_NC_NC_NC); //COMPARADOR DESACTIVADO
setup_vref(FALSE); //SIN TENSION DE REFERENCIA
setup_timer_0(RTCC_DIV_2 | RTCC_INTERNAL );
setup_timer_1(T1_DISABLED); //TIMER1 DESACTIVADO
setup_timer_2(T2_DIV_BY_4,0XFA,1); //TIMER2 - POR CADA 4 CUENTA 1   
//setup_ccp1(CCP_PWM); //ANCHO DE PULSO
set_tris_a(0b00101110); //CONFIGURACIÓN TRISA
output_low(PIN_A0); //INICIALIZAMOS LA PUERTA A.
output_low(PIN_A1);
output_low(PIN_A2);
//output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);
delay_ms(500);
//***************CODIGO PRINCIPAL DEL PROGRAMA********************


while(true)
{
  lectimer2=get_timer2(); //lectura del valor del timer 2
  lectimer0=get_RTCC();   //lectura del valor del timer 0
 
 if (input(PIN_A5)&&!input(PIN_A1)&&!input(PIN_A2))
  if ((lectimer2>248) && (contador2<LIMITE_CONTADOR2))   
   {
     contador2++;
     set_timer2(0);
   }
 
   if ((lectimer0>123) && (contador0<CENTRO+1) && (contador2<LIMITE_CONTADOR2))
   {
     output_high(PIN_A4);
     set_timer0(0);
     contador0++;
   }
   if ((lectimer0>123) && (contador0>CENTRO) && (contador2<LIMITE_CONTADOR2))
   {
      output_low(PIN_A4);
      set_timer0(0);
      contador0++;
   }
   if (contador2==LIMITE_CONTADOR2)
   {
      contador0 = 0;
      contador2 = 0;
   }
  }
 if (input(PIN_A1)&&!input(PIN_A5)&&!input(PIN_A2))
   {
       if ((lectimer2>248) && (contador2<LIMITE_CONTADOR2))
   {
     contador2++;
     set_timer2(0);
   }
 
   if ((lectimer0>123) && (contador0<IZQUIERDA+1) && (contador2<LIMITE_CONTADOR2))
   {
     output_high(PIN_A4);
     set_timer0(0);
     contador0++;

   }
   if ((lectimer0>123) && (contador0>IZQUIERDA) && (contador2<LIMITE_CONTADOR2))
   {
      output_low(PIN_A4);
      set_timer0(0);
      contador0++;
   }
   if (contador2==LIMITE_CONTADOR2)
   {
      contador0 = 0;
      contador2 = 0;
   }
 
   }
   if (input(PIN_A2)&&!input(PIN_A1)&&!input(PIN_A5))     
   {
       if ((lectimer2>248) && (contador2<LIMITE_CONTADOR2))
   {
     contador2++;
     set_timer2(0);
   }
 
   if ((lectimer0>123) && (contador0<DERECHA+1) && (contador2<LIMITE_CONTADOR2))
   {
     output_high(PIN_A4);
     set_timer0(0);
     contador0++;

   }
   if ((lectimer0>123) && (contador0>DERECHA) && (contador2<LIMITE_CONTADOR2))
   {
      output_low(PIN_A4);
      set_timer0(0);
      contador0++;
   }
   if (contador2==LIMITE_CONTADOR2)
   {
      contador0 = 0;
      contador2 = 0;
   }
   }
}


 

anything