/* ************************************************* */
/* Función : SRF08_GetMeasurement */
/* Parámetros : Address => Di r e c c i ón de l d i s p o s i t i v o */
/* a l e e r */
/* ModeMeasure => Modo de l e c t u r a */
/* en pulgadas , */
/* c ent ime t r o s o en */
/* mi c rosegundos */
/* Devuelve : La l e c t u r a de l a d i s t a n c i a como un */
/* ent e r o l a r g o */
/* Obj e t ivo : Re a l i z a r medidas de d i s t a n c i a en di spo− */
/* s i t i v o s SRF08 */
/* ************************************************* */
long SRF08_GetMeasurement ( int Address ,MODE_MEASURE ModeMeasure )
{
// Lanzamos l a l e c t u r a de l a d i s t a n c i a
// p r i n t f (" Di s p o s i t i v o : [%02X] Modo : <%u>\n\ r " , Address ,ModeMeasure ) ;
nValue = 0 ;
i 2 c_s t a r t ( ) ;
i2c_wr i t e ( Address ) ;
i2c_wr i t e (0 x00 ) ;
switch(ModeMeasure )
{
case ModeInches : i2c_wr i t e (0 x50 ) ; break ;
case ModeCentimeter : i2c_wr i t e (0 x51 ) ; break ;
case ModeTimer : i2c_wr i t e (0 x52 ) ; break ;
default : p r i n t f ( "Er ror en Mode Measure\n\ r " ) ;
}
// Esperamos a t e rminar l a l e c t u r a
/* y = 2 5 5 ;
whi l e ( y==255)
{
i 2 c_s t a r t ( ) ;
i 2 c_wr i t e ( Address ) ;
i 2 c_wr i t e (0 x00 ) ; // Le c tura en e l r e g i s t r o de medida
i 2 c_s t a r t ( ) ;
i 2 c_wr i t e ( Address +1) ;
y = i2c_read ( 1 ) ;
i2c_s top ( ) ;
}
*/
delay_ms ( 1 0 5 ) ; // Esperamos timepo de vue lo ( ¾65ms ? )
// Leemos e l v a l o r en c u e s t i ó n
i 2 c_s t a r t ( ) ;
i2c_wr i t e ( Address ) ;
i2c_wr i t e (0 x02 ) ;
i 2 c_s t a r t ( ) ;
i2c_wr i t e ( Address+1);
nValHigh = i2c_read ( 1 ) ;
nValLow = i2c_read ( 0 ) ;
/*
f o r ( y=1;y<=15;y++)
{
i2c_read ( 1 ) ;
i2c_read ( 1 ) ;
}
*/
i2c_s top ( ) ;
// p r i n t f (" nValHigh : %u − nValLow : %u Medida : %f \n\ r " ,
// nValHigh , nValLow , ( nValHigh*256+nValLow ) * 0 . 0 3 4 6 4 / 2 ) ;
return ( nValHigh*256+nValLow ) ;
}
int SRF08_SetGain ( int Address , int Gain )
{
nValue = 0 ;
i 2 c_s t a r t ( ) ;
i2c_wr i t e ( Address ) ; nValue =1;
i2c_wr i t e (0 x01 ) ; nValue +=2;
i 2 c_s t a r t ( ) ;
i2c_wr i t e ( Address ) ; nValue +=4;
i2c_wr i t e (Gain ) ; nValue +=8;
i2c_s top ( ) ;
return nValue ;
}
/* ************************************************* */
/* Función : i2c_Ge tRegi s t e r */
/* Parámetros : Address => Di r e c c i ón de l d i s p o s i t i v o */
/* nAddrReg => No de l r e g i s t r o a l e e r */
/* Devuelve : El v a l o r de l r e g i s t r o l e i d o */
/* Obj e t ivo : Lee c u a l q u i e r r e g i s t r o de l d i s p o s i t i v o */
/* ************************************************* */
int i2c_Ge tRegi s t e r ( int Address , int nAddrReg )
{
nValue = 0 ;
i 2 c_s t a r t ( ) ;
i f ( i2c_wr i t e ( Address )==1) nValue =1;
i f ( i2c_wr i t e ( nAddrReg)==1) nValue+=2;
i 2 c_s t a r t ( ) ;
i f ( i2c_wr i t e ( Address+1)==1) nValue+=4;
nValLow = i2c_read ( 1 ) ;
i2c_s top ( ) ;
return nValLow ;
}
/* ************************************************* */
/* Función : i2c_Wr iRegi s t e r */
/* Parámetros : Address => Di r e c c i ón de l d i s p o s i t i v o */
/* nAddrReg => No de l r e g i s t r o a l e e r */
/* Value => Valor a e s c r i b i r en e l */
/* r e g i s t r o */
/* Devuelve : Nada */
/* Obj e t ivo : La e s c r i t u r a en e l r e g i s t r o de */
/* c u a l q u i e r d i s p o s i t i v o cone c tado a l bus */
/* I2C */
/* ************************************************* */
int i2c_WriRegister ( int Address , int nAddrReg , int Value )
{
nValue = 0 ;
i 2 c_start( ) ;
i f ( i2c_write( Address )==1)
nValue=1;
i f ( i2c_write( nAddrReg)==1) // Se pasa l a d i r e c c i ó n de l
nValue+=2; // r e g i s t r o a e s c r i b r i r
i f ( i2c_write(Value)==1)
nValue+=4;
i2c_stop ( ) ;
return nValue ;
}