#include "Light.h" void LS_init(){ //i2c_read_LS(0x00); // device ID ? i2c_write_LS(HW_KEY,0x17); /*i2c_write_LS(COMMAND,0x00); while (i2c_read_LS(RESPONSE) != 0x00) { i2c_write_LS(COMMAND,0x00); } i2c_write_LS(COMMAND,0x01);*/ i2c_write_LS(INT_CFG,0x01); // ENABLE INTERRUPTS i2c_write_LS(IRQ_ENABLE,0x01); i2c_write_LS(MEAS_RATE1,0x3E); // Set Measurement rate i2c_write_LS(MEAS_RATE0,0x80); i2c_write_LS(PARAM_WR,0x80); // CHLIST i2c_write_LS(COMMAND,0xA1); /*i2c_write_LS(COMMAND,0x00); while (i2c_read_LS(RESPONSE) != 0x00) { i2c_write_LS(COMMAND,0x00); } i2c_write_LS(COMMAND,0xA1); while (i2c_read_LS(RESPONSE) != 0xA1) { i2c_write_LS(COMMAND,0xA1); }*/ i2c_write_LS(UCOEF3,0x00); // Enable UV reading i2c_write_LS(UCOEF2,0x02); i2c_write_LS(UCOEF1,0x89); i2c_write_LS(UCOEF0,0x29); } unsigned int LS_measure(void){ unsigned int uv_data_low, uv_data_high; unsigned int uv_data; i2c_write_LS(IRQ_STATUS,0x01); // clear interrupt in light sensor uv_data_low = i2c_read_LS(UVINDEX0); uv_data_high = i2c_read_LS(UVINDEX1); uv_data = ((uv_data_high)<<8) |(uv_data_low); return uv_data; // /100 } void i2c_write_LS(char address, char data) { int ack; i2c_start(); ack = i2c_send(WRITE_LS); ack = i2c_send(address); ack = i2c_send(data); do{ i2c_start(); ack = i2c_send(WRITE_LS); } while (ack); i2c_stop(); IFS1bits.I2C2MIF = 0; } unsigned char i2c_read_LS(char address) { char read_value; i2c_start(); read_value = i2c_send(WRITE_LS); //read_value = i2c_send(0x00); // high byte read_value = i2c_send(address); i2c_restart(); read_value = i2c_send(READ_LS); read_value = i2c_receive(); I2C2CONbits.ACKDT = 1; // 1 I2C2CONbits.ACKEN = 1; while(!IFS1bits.I2C2MIF); IFS1bits.I2C2MIF = 0; I2C2CONbits.ACKDT = 0; // 0 i2c_stop(); return read_value; }