This program simply connects to a HTS221 I2C device to proximity sensor

Dependencies:   FXOS8700CQ mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Proximity.cpp Source File

Proximity.cpp

00001 #include "mbed.h"
00002 #include "Proximity.h"
00003 
00004 I2C *proximityi2c;
00005 short proximityData [NUM_PROXIMIY_SENSORS][3];
00006 short lastProximityData [NUM_PROXIMIY_SENSORS][3];
00007 char dataStr[NUM_PROXIMIY_SENSORS*32];
00008 
00009 Proximity::Proximity(void)
00010 {
00011 
00012 
00013 }
00014 
00015 void Proximity::init(void)
00016 {
00017     proximityi2c = new I2C(PTE25, PTE24);
00018     proximityi2c->frequency(400000);
00019 }
00020 
00021 void Proximity::write_reg(char address,char reg, char cmd)
00022 {
00023     char txbuffer [2];
00024     txbuffer[0] = reg;
00025     txbuffer[1] = cmd;
00026 
00027     proximityi2c->write(address<<1, txbuffer, 2,false );
00028 
00029 } 
00030 
00031 void Proximity::write(char address, char cmd)
00032 {
00033     char txbuffer [1];
00034     txbuffer[0] = cmd;
00035 
00036     proximityi2c->write(address<<1, txbuffer, 1,false );
00037 
00038 }  
00039 
00040 unsigned char Proximity::read_reg(char address,char reg)
00041 {
00042     char txbuffer [1];
00043     char rxbuffer [1];
00044     rxbuffer[0] = 0;
00045     txbuffer[0] = reg;
00046     proximityi2c->write(address<<1, txbuffer, 1,false );
00047     proximityi2c->read(address<<1, rxbuffer, 1 );
00048     return (unsigned char)rxbuffer[0];
00049 }
00050 void Proximity::off()
00051 {
00052     for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
00053     {
00054         write(MUXADDRESS,1<<sensor); 
00055         write_reg(PROXIMITYADDRESS,0x41,0x00);
00056     }
00057 }
00058 
00059 void Proximity::on()
00060 {  
00061     for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
00062     {
00063 
00064         lastProximityData[sensor][0] = 1000;
00065         write(MUXADDRESS,1<<sensor); 
00066         write_reg(PROXIMITYADDRESS,0x41,Als400Ps400); // initiate ALS: and PS
00067         write_reg(PROXIMITYADDRESS,0x42,GainAls64Ir64|C25ma); // set ALS_VIS=ALS_IR GAIN = 64 current 25ma
00068     }
00069     wait(0.5);
00070 }
00071        
00072 void Proximity::scan()
00073 {  
00074     for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
00075     {
00076         write(MUXADDRESS,1<<sensor);
00077         //proximity_sensor_on(sensor);
00078         unsigned char prox_lsb = read_reg(PROXIMITYADDRESS,0x44);
00079         unsigned char prox_msb = read_reg(PROXIMITYADDRESS,0x45);
00080         unsigned char ALS_lsb = read_reg(PROXIMITYADDRESS,0x46);
00081         unsigned char ALS_msb = read_reg(PROXIMITYADDRESS,0x47);
00082         unsigned char IR_lsb = read_reg(PROXIMITYADDRESS,0x48);
00083         unsigned char IR_msb = read_reg(PROXIMITYADDRESS,0x49);
00084     
00085         short proximity = prox_msb*256+prox_lsb;
00086         short ALS = ALS_msb*256+ALS_lsb;
00087         short IR = IR_msb*256+IR_lsb;
00088         proximityData[sensor][0] = proximity;
00089         proximityData[sensor][1] = ALS;
00090         proximityData[sensor][2] = IR;
00091         //proximity_sensor_off(sensor);
00092         //pc.printf(GRN "Sensor %d = %d, %d, %d\n\r",sensor,proximity,ALS,IR);
00093     }
00094 
00095 }
00096 
00097 bool Proximity::changed(short delta)
00098 {
00099     for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
00100     {
00101         if(abs(proximityData[sensor][0] - lastProximityData[sensor][0]) > delta)
00102         {
00103             return true;
00104         }
00105     }
00106 
00107     return false;
00108 }   
00109 
00110 short Proximity::getProximity(int sensor)
00111 {
00112     return proximityData[sensor][0];
00113 }
00114 short Proximity::getAmbientLight(int sensor)
00115 {
00116     return proximityData[sensor][1];
00117 }
00118 short Proximity::getIR(int sensor)
00119 {
00120     return proximityData[sensor][2];
00121 }
00122 
00123 char* Proximity::getDataStr()
00124 {
00125     int i=0;
00126     int index = 0;
00127     index += sprintf(&dataStr[index],"[");
00128     for (i=0; i<NUM_PROXIMIY_SENSORS; i++)
00129     {
00130         if(i<NUM_PROXIMIY_SENSORS-1)
00131             index += snprintf(&dataStr[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d},", i,proximityData[i][0],proximityData[i][1],proximityData[i][2]);
00132         else
00133             index += snprintf(&dataStr[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d}]", i,proximityData[i][0],proximityData[i][1],proximityData[i][2]);
00134         lastProximityData[i][0] = proximityData[i][0];
00135         lastProximityData[i][1] = proximityData[i][1];
00136         lastProximityData[i][2] = proximityData[i][2];
00137     } 
00138     return dataStr;
00139 }
00140     
00141     
00142 
00143