/*****************************************************************************/ /* motores-sensor3.c Julio-2007 */ /*---------------------------------------------------------------------------*/ /* Ejemplo para el skybot */ /*---------------------------------------------------------------------------*/ /* Se lee el estado del sensor 3 y se activan los motores. Si lee blanco, */ /* el robot se para. Si lee negro avanza. */ /* Es un ejemplo de un comportamiento reactivo muy sencillo */ /*---------------------------------------------------------------------------*/ /* Andres Prieto-Moreno <andres@ifara.com> */ /* Juan Gonzalez <juan@iearobotics.com> */ /* Modificado por: Javier Valiente <jvaliente@ifara.com> */ /*---------------------------------------------------------------------------*/ /* LICENCIA GPL */ /*****************************************************************************/ //-- Especificar el pic a emplear #include <pic16f876a.h> //-- Definiciones de los sensores #define SENSOR1 0x01 #define SENSOR2 0x20 #define SENSOR3 0x40 #define SENSOR4 0x80 //-- Definiciones para los motores. Estos valores definen //-- los movimientos del robot #define AVANZA 0x1C #define ATRAS 0x16 #define IZQUIERDA 0x1E #define DERECHA 0x14 #define STOP 0x00 //-- Indicar el sensor a utilizar. Por defecto esta puesto el 3, pero se //-- puede poner cualquier otro: 1,2 o 4. #define SENSOR SENSOR3 //---------------------------- //- Comienzo del programa //---------------------------- void main(void) { //-- Configurar el puerto B para trabajar con el Skybot //-- RB0, RB5, RB6 y RB7 como entradas //-- RB1, RB2, RB3 y RB4 como salidas TRISB=0xE1; //-- Los motores del Skybot parados PORTB=0x00; //-- Bucle principal while(1) { //-- Sensor lee blanco? if ((PORTB & SENSOR)==0) { PORTB=AVANZA; //-- si, avanzar } else { PORTB=STOP; //-- no, parar } } }