Rick McConney
/
AvnetATT_shape_hackathon
This program simply connects to a HTS221 I2C device to proximity sensor
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Tue Jul 12 2022 19:39:23 by 1.7.2