#include <18F2550.h>
#fuses HS,USBDIV,PLL5
#use delay(clock=20000000)
#use I2C(MASTER, sda=PIN_B0, scl=PIN_B1, FAST,  FORCE_HW)
//////////////////////////////////////////////////////////////////////
////////////////////////////DEFINES///////////////////////////////////
//////////////////////////////////////////////////////////////////////
/*
DESCRIPTORES PARA EL USO USB
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 2 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <main.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
*/
#define ENCENDER output_high
#define APAGAR output_low
#define LED_PIC PIN_C6
//////////////////////////////////////////////////////////////////////
///////////////////////////VARIABLES//////////////////////////////////
//////////////////////////////////////////////////////////////////////
boolean sistema_usound = TRUE;
int posicion_servo1 = 0;
int posicion_servo2 = 0;
//int contador = 0;
//int8 recibe[3];
/////////////////////////////////////////////////////////////////////
///////////////////////////INTERRUPCIONES////////////////////////////
/////////////////////////////////////////////////////////////////////
#INT_TIMER2
void PWM_movimiento_servos(void)
{
	//mirar de mejorar el movimiento de los servos 
}
#INT_SSP
void interrupcion_I2C(void)
{
	//de momento como es master esta interrupcion no hace nada, pero dejamos esta opcion disponible para futuras actualizaciones de funcionamiento
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////FUNCIONES///////////////////////////////
/////////////////////////////////////////////////////////////////////
void escribir_i2c(BYTE direccion, int dato)
{
	i2c_start();
	i2c_write(direccion);
	i2c_write(dato);
	i2c_stop();
	delay_us(50);
}
int leer_i2c(BYTE direccion, int opcion)
{
	int dato = 0;
	i2c_start();
	i2c_write(direccion);
	i2c_write(opcion);
	
	i2c_start();
	i2c_write(direccion+1);
	dato = i2c_read();
	i2c_stop();
	
	return(dato);
}
void parpadeo()
{
		ENCENDER(LED_PIC);
		delay_ms(500);
		APAGAR(LED_PIC);
		delay_ms(500);
}
/////////////////////////////////////////////////////////////////////
///////////////////////////////MAIN//////////////////////////////////
/////////////////////////////////////////////////////////////////////
void main(void) 
{
   //usb_init();                      //inicializamos el USB
   //usb_task();                      //habilita periferico usb e interrupciones
   //usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host
	setup_timer_2(T2_DIV_BY_1,249,2); //inicializacion de las interrupciones del timer 2 a 0.1 ms cada una
	set_timer2(0); //inicializar a 0 el timer2
	delay_ms(1000); //esperamos 1 segundo que para asegurarnos que se inicialice toda la placa antes de empezar la fiesta
	
//	enable_interrupts(INT_TIMER2); //interrupcion del timer 2
//	enable_interrupts(INT_SSP);	//interrupcion del I2C (desabilitada puesto que el master no recibe interrupciones, sino que als crea)
//	enable_interrupts(GLOBAL); //habilitamos las interrupciones
	
	while(1)
	{
		/* FUNCION DE USB DESACTIVADA DE MOMENTO
		if(usb_enumerated()) //si la torreta esta correctamente instalada en el pc (opcion desactivada de momento
		{
				if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
       			{
           			usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe
					posicion_servo1 = recibe[1];
					posicion_servo2 = recibe[2];            
        		}*/
			if(sistema_usound) //si esta activo el utilizar los ultrasonidos
			{
				posicion_servo1 = leer_i2c(0xa0, 1); //leer posicion en la que debe situarse el servo 1
				posicion_servo2 = leer_i2c(0xa0, 2); //leer posicion en la que debe situarse el servo 1
			}
		//} //fin del if(usb_enumerated)
	};
}