/ 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)
int16 dist_alarma = 10;
main()
{
iint16 distancia;
char distancia_L, distancia_H, luz;
set_tris_A(0b00000000);
output_float(PIN_A3);
output_float(PIN_A4);
while(1)
{
i2c_start(); // Bit de Start.
i2c_write(0xE0); // Direccio'n del SRF08 en escritura.
i2c_write(0x00);// El registro de comando esta' en la ubicacio'n 0.
i2c_write(0x51);// 0x51 es el comando de ca'lculo de distancia en cm.
i2c_stop(); // Bit de Stop.
delay_ms(100); // Espera ma's de 65 ms hasta la lectura.
i2c_start(); // Bit de Start.
i2c_write(0xE0); // Direccio'n del SRF08 en escritura.
i2c_write(0x01);// Apunta a la ubicacio'n 0x01 que es a partir donde se
i2c_stop();// encuentran los registros para leer luz y distancia.
i2c_start();
i2c_write(0xE1); // Direccio'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("\r\nLuz: %u Lux\nDist.: %lu cm", luz, distancia);
delay_ms(5000);
}
}