
#define   SRF02_1   0xE0            //Dirección I2C del SRF02_1
#define	  SRF02_2	0XE2			//Direccion I2C del SRF02_2

/*************************************************************************************************
SRF02_Ejec():El SRF02 ejecuta un determinado comando. 
dir es la direccion correspondiente del SRF02*/

void SRF02_Ejec(int SRF02_Comando,int dir)
{
   i2c_start();               //Secuencia de inicio
   i2c_write(dir);            //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(SRF02_Comando);      //Enviar comando a ejecutar
   i2c_stop();                  //Secuencia de stop
   delay_ms(80);               //Temporización de 80mS necesaria para realizar la ejecución

/*Secuencia para la lectura del resultado medido por el SRF02 */

   Leer_I2C(dir,0x2,0x02);      //Realiza la medida del resultado
}

/**********************************************************************************************
SRF02_in(): Realiza una medida en pulgadas.El resultado se almacen en I2C_Buffer */

void SRF02_in(int dir)
{
   SRF02_Ejec(0x50,dir);            //Ejecuta el comando
}

/**********************************************************************************************
SRF02_cm(): Realiza una medida en centímetros.El resultado se almacen en I2C_Buffer */

void SRF02_cm(int dir)
{
   SRF02_Ejec(0x51,dir);            //Ejecuta el comando
}

/**********************************************************************************************
SRF02_us(): Realiza una medida en microsegundos.El resultado se almacen en I2C_Buffer */

void SRF02_us(int dir)
{
   SRF02_Ejec(0x52,dir);            //Ejecuta el comando
}


/***********************************************************************************************************
SRF02_Reset(): Fuerza un reinicio del SRF02, realizando un ciclo de autoajuste. Es similar al Power Up */

void SRF02_Reset(int dir)
{
   i2c_start();               //Secuencia de inicio
   i2c_write(dir);            //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0x60);            //Enviar comando para la transmisión de una ráfaga
   i2c_stop();                  //Secuencia de stop
   delay_ms(80);               //Temporización de 80mS necesaria para realizar la ejecución
}

/***********************************************************************************************************
SRF02_I2C_Dir(): Cambia la dirección I2C del SRF02. SRF02_New_Dir debe expresar la nueva dirección I2C */

void SRF02_I2C_Dir(int SRF02_New_Dir, int SRF02_Last_Dir)

{
   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir);  //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xA0);            //1ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop

   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir); //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xAA);            //2ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop 
   
   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir); //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xA5);            //3ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop 

   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir);//Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(SRF02_New_Dir);      //Nueva dirección I2C
   i2c_stop();                  //Secuencia de stop 
}