Estas aquiElectrónica / Programación / Código en C, para el robot CARMIX

Código en C, para el robot CARMIX


By administrador - Posted on 20 Agosto 2008


MINIROBOTICA

Para todos aquellos que quieren armar el robot seguidor de lineas CARMIX, aqui les envio el codigo fuente hecho en un compilador gratuito. El PIC C lite, es una compilador que soporta los microcontroladores de Microchip y es totalmente gratis para los variantes de PIC16.

 

/*
ROBOT SEGUIDOR DE LINEA BLANCA
SOBRE FONDO NEGRO: “CARMIX”.
Jacob J. Vásquez Sanjuan
jacobvasquezs@msn.com
*/

/*

Ya esta con PWM y sigue la linea p16
   se le reduce la velocidad en las curvas


*/

#include "robot03.h"

void timer0(char j);
void PWM(unsigned char,unsigned char);
static void interrupt isr(void);
unsigned char siga=1,cont=0;;

void main()
{
  unsigned char i,BAND=0;
  unsigned char conta;
  TRISA=0x1F;
  TRISB=0x00;
  OPTION=0x02;
  GIE=1;
  T0IE=1;
  
  DIR1=ADELANTE; DIR2=ADELANTE; /* CONTINUA*/
  PWM1=PWM2=TRUE;
  FRENO1=FRENO2=FALSE;/*SIN FRENO*/
 
  while(1)
  {
   if (SENSOR1==TRUE & SENSOR2==TRUE) /*  2 SENSORES EN LA LINEA */
    {   
     PWM(90,90);
    }

   if (SENSOR1==FALSE & SENSOR2==TRUE) /* SENSORES EN LA ORILLA*/
    {
     PWM(90,45);
     BAND=0;
    }

  if (SENSOR1==TRUE & SENSOR2==FALSE) /* SENSORES AFUERA*/
    {
     PWM(45,90);
     BAND=1;
    }
   if (SENSOR1==FALSE & SENSOR2==FALSE)/* SENSORES AFUERA*/
    {
     if(BAND==1)
     {
    PWM(20,70); 
     }
      
     else if(BAND==0)
      {
         PWM(70,20);    
     }
    }
 }
}

void timer0(char x){
       TMR0=x;
       while(siga);
       siga=1;
}

static void interrupt isr(void){
    if(T0IF==1){
       siga=0;
       T0IF=0;
    }
}  
void PWM(unsigned char x, unsigned char y){
     unsigned char i;
     PWM1=PWM2=TRUE;
     if(x<y){
    for(i=0;i<x;i++)
           timer0(0XFF);
         PWM1=FALSE;
         for(i=0;i<y-x;i++)
      timer0(0XFF);   
        PWM2=FALSE;
         for(i=0;i<100-y;i++)
      timer0(0XFF);   
    }
     if(y<x){
    for(i=0;i<y;i++)
           timer0(0XFF);
         PWM2=FALSE;
         for(i=0;i<x-y;i++)
      timer0(0XFF);
        PWM1=FALSE;
         for(i=0;i<100-x;i++)
      timer0(0XFF);   
    }
     if(x==y){
    for(i=0;i<x;i++)
     timer0(0XFF);
        PWM1=PWM2=FALSE;
         for(i=0;i<100-y;i++)
     timer0(0XFF);   
     }   
}
 


AdjuntoTamaño
robot16.zip1.09 KB