/*************************************************************************** */ /* linea.c Julio-2005 */ /*---------------------------------------------------------------------------*/ /* Ejemplo para el skybot */ /*---------------------------------------------------------------------------*/ /* Programa de seguimiento de linea para el robot Skybot */ /*---------------------------------------------------------------------------*/ /* Andres Prieto-Moreno <andres@ifara.com> */ /* Juan Gonzalez <juan@iearobotics.com> */ /*---------------------------------------------------------------------------*/ /* LICENCIA GPL */ /*****************************************************************************/ //-- Especificar el pic a emplear #define __16f877 #include "pic16f877.h" //-- Definiciones para los motores. Estos valores define //-- los movimientos del robot #define AVANZA 0x1C #define ATRAS 0x16 #define IZQUIERDA 0x1E #define DERECHA 0x14 #define STOP 0x00 //-- Definiciones de los sensores #define SENSOR1 0x01 #define SENSOR2 0x20 #define SENSOR3 0x40 #define SENSOR4 0x80 //-- MOdificar esto para indicar la colocacion de los sensores #define IZQUIERDO SENSOR4 #define DERECHO SENSOR3 unsigned char sensores; void main(void) { //-- Configurar puerto B TRISB=0xE1; //-- Inicialmente robot parado PORTB=STOP; for (;;) { sensores=PORTB& (IZQUIERDO | DERECHO); // Leer sensores switch (sensores) { case (IZQUIERDO | DERECHO): //-- Caso negro-negro PORTB=AVANZA; break; case DERECHO: //-- Caso Blanco-negro PORTB=DERECHA; break; case IZQUIERDO: //-- Caso Negro-Blanco PORTB=IZQUIERDA; break; default: PORTB=STOP; } } }