Hexiware Ambient Light code using OPT3001

main.cpp

Committer:
agaikwad
Date:
2017-03-22
Revision:
0:92ddc9baf27b

File content as of revision 0:92ddc9baf27b:

#include "mbed.h"
#include "math.h"

I2C i2c(PTD9,PTD8);
Serial pc(USBTX, USBRX);
AnalogIn check(PTB6);
 
 const int addr = 0x88;
 //const int addr1 = 0xC0;
int main() { 
int exp,exp1,l=1;
float z;
float x;
  
    i2c.frequency(100000); // set required i2c frequency
    pc.baud(9600); //set baud rate
    pc.printf("I2C started!\r\n");
    char cmd[3]; //for byte transfer
   while(1){ 
   //ambient light sensor code
   cmd[0] = 0x01;   //configuration register
   cmd[1]= 0xCC;    //configuration data
    cmd[2]= 0x01;   //configuration data
  i2c.write(addr, cmd, 3);
         cmd[0] = 0x00; // data register
    i2c.write(addr, cmd, 1);
       wait(0.5);
       i2c.read(addr, cmd, 2);
 
        exp= cmd[0]>>4;
        exp1= (cmd[0]-(exp<<4))*256+cmd[1];
        l=1;
        for(int r=0;r<exp;r++){l=l*2;};
        z= (exp1*l)/100;
        pc.printf("Lux = %.2f\n\r", z);  // printing LUX value
         wait(0.5);
         
        }
        }