/*****************************************************************************/
/* sci-menu.c      Julio-2005                                                */
/*---------------------------------------------------------------------------*/
/* Ejemplo para el skybot                                                    */
/*---------------------------------------------------------------------------*/
/* Mover el robot desde un terminal serie. Utilizar las teclas o,p,q y a     */
/* en minusculas. Configurarlo a 9600 baudios, 8,n,1                         */
/*---------------------------------------------------------------------------*/
/*  Juan Gonzalez <juan@iearobotics.com>                                     */
/*  Modificado por: Javier Valiente <jvaliente@ifara.com>                    */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

//-- Especificar el pic a emplear
#include <pic16f876a.h>

//-- Se usa la libreria de comunicaciones serie
#include "sci.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


/******************************/
/* Sacar el menu de opciones  */
/******************************/
void menu(void)
{
        sci_cad("Menu\n\r");
        sci_cad("----\n\r");
        sci_cad("q.- adelante\n\r");
        sci_cad("a.- atras\n\r");
        sci_cad("o.- izquierda\n\r");
        sci_cad("p.- derecha\n\r");
        sci_cad("ESPACIO.- Parar\n\r");
}

/*********************************/
/* Programa principal            */
/*********************************/
void main(void)
{
        unsigned char c;
        
        //-- Configurar el puerto B 
        //-- RB0, RB5, RB6 y RB7 como entradas
        //-- RB1, RB2, RB3 y RB4 como salidas
        //-- Todos los sensores de entrada, pero el RB1 de salida, que es
        //-- donde esta el led
        TRISB=0xE1;
        
        //-- Configurar las comunicaciones serie
        sci_conf();
        
        //-- Parar los motores del robot
        PORTB=STOP;
        
        //-- Sacar el menu
        menu();
        
        //-- Bucle infinito
        for (;;)
          {
                //-- Esperar a que llegue opcion del usuario
                c=sci_read();
                
                //-- Segun la tecla pulsada...
                switch(c)
                    {
                        case 'q':       //-- Adelante
                                PORTB=0x1C;
                                break;
                        case 'a':
                                PORTB=ATRAS;  //-- Atras
                                break;
                        case 'o':
                                PORTB=IZQUIERDA; //-- Izquierda
                                break;
                        case 'p':
                                PORTB=DERECHA;   //-- Derecha
                                break;
                        case ' ':         //-- stop
                                PORTB=STOP;
                                break;
                }
        }
}