Acabo de terminar este proyecto que te puede servir:
Codigo:
// Programa para un medidor de distancias hasta un objeto utilizando sensor por
// ultrasonido SRF08 para bus I2C.
//
/////////////////////////////////////////////////////////////////////////////////////////
#include <16F84A.h> // Librería predefinida para CCS.
#fuses XT, PUT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_IO(A)
#use fast_IO(B)
#use i2c(Master,sda=PIN_A4,scl=PIN_A3)
#include <lcd_4bit.c>
int16 dist_alarma = 10;
void main()
{
int16 distancia;
char distancia_L, distancia_H, luz;
LCD_init ();
set_tris_A(0b00000000);
output_float(PIN_A3);
output_float(PIN_A4);
while (1)
{
i2c_start(); // Bit de Start.
i2c_write(0xE0); // Dirección del SRF08 en escritura.
i2c_write(0x00);// El registro de comando está en la ubicación 0.
i2c_write(0x51);// 0x51 es el comando de cálculo de distancia en cm.
i2c_stop(); // Bit de Stop.
delay_ms(100); // Espera más de 65 ms hasta la lectura.
i2c_start(); // Bit de Start.
i2c_write(0xE0); // Dirección del SRF08 en escritura.
i2c_write(0x01);// Apunta a la ubicación 0x01 que es a partir donde se
i2c_stop();// encuentran los registros para leer luz y distancia.
i2c_start();
i2c_write(0xE1); // Dirección del SRF08 en lectura.
luz = i2c_read(1); // Lee la luminosidad.
distancia_H = i2c_read(1);// Lee el byte alto de la distancia.
distancia_L = i2c_read(0);// Lee el byte bajo de la distancia.
i2c_stop();
distancia = make16(distancia_H,distancia_L);// Valor de la distancia.
printf(LCD_putc, "fLuz: %u Lux
Dist.: %lu cm", luz, distancia);
}
}