/*************************************************************************** */
/* 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                                                             */
/*---------------------------------------------------------------------------*/
/*  Juan Gonzalez <juan@iearobotics.com>                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

//-- Especificar el pic a emplear
#define __16f877
#include "pic16f877.h"

//-- Se usa la libreria de comunicaciones serie
#include "sci.h"

//-- Definiciones para los motores. Estos valores define
//-- los movimientos del robot
#define   AVANZA     0x18
#define   ATRAS      0x78
#define   IZQUIERDA  0x58 
#define   DERECHA    0x38 
#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, RB2 y RB7 como entradas
  //-- RB1, RB3, RB4, RB5, RB6 como salidas
  //-- Todos los sensores de entrada, pero el RB1 de salida, que es
  //-- donde esta el led
  TRISB=0x85;
  
  //-- 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=AVANZA;
        break;
      case 'a':
        PORTB=ATRAS;  //-- Atras
        break;
      case 'o':
        PORTB=IZQUIERDA//-- Izquierda
        break;
      case 'p':
        PORTB=DERECHA;   //-- Derecha
        break;
      case ' ':         //-- stop
        PORTB=STOP;
        break;
    }
    
    //-- Cambiar el led de estado
    PORTB^=0x02;
  }

}