Proximity sensor mqtt version

Dependencies:   MQTT-JMF WNCInterface mbed-rtos mbed

Fork of WNCInterface_MQTT_hivemq by Avnet

Committer:
elmkom
Date:
Tue Sep 27 15:55:10 2016 +0000
Revision:
2:29a6a34179ce
Parent:
1:1b516e98444f
Proximity sensor mqtt version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elmkom 1:1b516e98444f 1 #include "mbed.h"
elmkom 1:1b516e98444f 2 #include "Proximity.h"
elmkom 1:1b516e98444f 3
elmkom 1:1b516e98444f 4 I2C *proximityi2c;
elmkom 1:1b516e98444f 5 short proximityData [NUM_PROXIMIY_SENSORS][3];
elmkom 1:1b516e98444f 6 short lastProximityData [NUM_PROXIMIY_SENSORS][3];
elmkom 1:1b516e98444f 7 char dataStr[NUM_PROXIMIY_SENSORS*32];
elmkom 1:1b516e98444f 8
elmkom 1:1b516e98444f 9 Proximity::Proximity(void)
elmkom 1:1b516e98444f 10 {
elmkom 1:1b516e98444f 11
elmkom 1:1b516e98444f 12
elmkom 1:1b516e98444f 13 }
elmkom 1:1b516e98444f 14
elmkom 1:1b516e98444f 15 void Proximity::init(void)
elmkom 1:1b516e98444f 16 {
elmkom 1:1b516e98444f 17 proximityi2c = new I2C(PTE25, PTE24);
elmkom 1:1b516e98444f 18 proximityi2c->frequency(400000);
elmkom 1:1b516e98444f 19 }
elmkom 1:1b516e98444f 20
elmkom 1:1b516e98444f 21 void Proximity::write_reg(char address,char reg, char cmd)
elmkom 1:1b516e98444f 22 {
elmkom 1:1b516e98444f 23 char txbuffer [2];
elmkom 1:1b516e98444f 24 txbuffer[0] = reg;
elmkom 1:1b516e98444f 25 txbuffer[1] = cmd;
elmkom 1:1b516e98444f 26
elmkom 1:1b516e98444f 27 proximityi2c->write(address<<1, txbuffer, 2,false );
elmkom 1:1b516e98444f 28
elmkom 1:1b516e98444f 29 }
elmkom 1:1b516e98444f 30
elmkom 1:1b516e98444f 31 void Proximity::write(char address, char cmd)
elmkom 1:1b516e98444f 32 {
elmkom 1:1b516e98444f 33 char txbuffer [1];
elmkom 1:1b516e98444f 34 txbuffer[0] = cmd;
elmkom 1:1b516e98444f 35
elmkom 1:1b516e98444f 36 proximityi2c->write(address<<1, txbuffer, 1,false );
elmkom 1:1b516e98444f 37
elmkom 1:1b516e98444f 38 }
elmkom 1:1b516e98444f 39
elmkom 1:1b516e98444f 40 unsigned char Proximity::read_reg(char address,char reg)
elmkom 1:1b516e98444f 41 {
elmkom 1:1b516e98444f 42 char txbuffer [1];
elmkom 1:1b516e98444f 43 char rxbuffer [1];
elmkom 1:1b516e98444f 44 rxbuffer[0] = 0;
elmkom 1:1b516e98444f 45 txbuffer[0] = reg;
elmkom 1:1b516e98444f 46 proximityi2c->write(address<<1, txbuffer, 1,false );
elmkom 1:1b516e98444f 47 proximityi2c->read(address<<1, rxbuffer, 1 );
elmkom 1:1b516e98444f 48 return (unsigned char)rxbuffer[0];
elmkom 1:1b516e98444f 49 }
elmkom 1:1b516e98444f 50 void Proximity::off()
elmkom 1:1b516e98444f 51 {
elmkom 1:1b516e98444f 52 for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
elmkom 1:1b516e98444f 53 {
elmkom 1:1b516e98444f 54 write(MUXADDRESS,1<<sensor);
elmkom 1:1b516e98444f 55 write_reg(PROXIMITYADDRESS,0x41,0x00);
elmkom 1:1b516e98444f 56 }
elmkom 1:1b516e98444f 57 }
elmkom 1:1b516e98444f 58
elmkom 1:1b516e98444f 59 void Proximity::on()
elmkom 1:1b516e98444f 60 {
elmkom 1:1b516e98444f 61 for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
elmkom 1:1b516e98444f 62 {
elmkom 1:1b516e98444f 63
elmkom 1:1b516e98444f 64 lastProximityData[sensor][0] = 1000;
elmkom 1:1b516e98444f 65 write(MUXADDRESS,1<<sensor);
elmkom 1:1b516e98444f 66 write_reg(PROXIMITYADDRESS,0x41,Als400Ps400); // initiate ALS: and PS
elmkom 1:1b516e98444f 67 write_reg(PROXIMITYADDRESS,0x42,GainAls64Ir64|C25ma); // set ALS_VIS=ALS_IR GAIN = 64 current 25ma
elmkom 1:1b516e98444f 68 }
elmkom 1:1b516e98444f 69 wait(0.5);
elmkom 1:1b516e98444f 70 }
elmkom 1:1b516e98444f 71
elmkom 1:1b516e98444f 72 void Proximity::scan()
elmkom 1:1b516e98444f 73 {
elmkom 1:1b516e98444f 74 for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
elmkom 1:1b516e98444f 75 {
elmkom 1:1b516e98444f 76 write(MUXADDRESS,1<<sensor);
elmkom 1:1b516e98444f 77 //proximity_sensor_on(sensor);
elmkom 1:1b516e98444f 78 unsigned char prox_lsb = read_reg(PROXIMITYADDRESS,0x44);
elmkom 1:1b516e98444f 79 unsigned char prox_msb = read_reg(PROXIMITYADDRESS,0x45);
elmkom 1:1b516e98444f 80 unsigned char ALS_lsb = read_reg(PROXIMITYADDRESS,0x46);
elmkom 1:1b516e98444f 81 unsigned char ALS_msb = read_reg(PROXIMITYADDRESS,0x47);
elmkom 1:1b516e98444f 82 unsigned char IR_lsb = read_reg(PROXIMITYADDRESS,0x48);
elmkom 1:1b516e98444f 83 unsigned char IR_msb = read_reg(PROXIMITYADDRESS,0x49);
elmkom 1:1b516e98444f 84
elmkom 1:1b516e98444f 85 short proximity = prox_msb*256+prox_lsb;
elmkom 1:1b516e98444f 86 short ALS = ALS_msb*256+ALS_lsb;
elmkom 1:1b516e98444f 87 short IR = IR_msb*256+IR_lsb;
elmkom 1:1b516e98444f 88 proximityData[sensor][0] = proximity;
elmkom 1:1b516e98444f 89 proximityData[sensor][1] = ALS;
elmkom 1:1b516e98444f 90 proximityData[sensor][2] = IR;
elmkom 1:1b516e98444f 91 //proximity_sensor_off(sensor);
elmkom 1:1b516e98444f 92 //pc.printf(GRN "Sensor %d = %d, %d, %d\n\r",sensor,proximity,ALS,IR);
elmkom 1:1b516e98444f 93 }
elmkom 1:1b516e98444f 94
elmkom 1:1b516e98444f 95 }
elmkom 1:1b516e98444f 96
elmkom 1:1b516e98444f 97 bool Proximity::changed(short delta)
elmkom 1:1b516e98444f 98 {
elmkom 1:1b516e98444f 99 for(int sensor = 0;sensor<NUM_PROXIMIY_SENSORS;sensor++)
elmkom 1:1b516e98444f 100 {
elmkom 1:1b516e98444f 101 if(abs(proximityData[sensor][0] - lastProximityData[sensor][0]) > delta)
elmkom 1:1b516e98444f 102 {
elmkom 1:1b516e98444f 103 return true;
elmkom 1:1b516e98444f 104 }
elmkom 1:1b516e98444f 105 }
elmkom 1:1b516e98444f 106
elmkom 1:1b516e98444f 107 return false;
elmkom 1:1b516e98444f 108 }
elmkom 1:1b516e98444f 109
elmkom 1:1b516e98444f 110 short Proximity::getProximity(int sensor)
elmkom 1:1b516e98444f 111 {
elmkom 1:1b516e98444f 112 return proximityData[sensor][0];
elmkom 1:1b516e98444f 113 }
elmkom 1:1b516e98444f 114 short Proximity::getAmbientLight(int sensor)
elmkom 1:1b516e98444f 115 {
elmkom 1:1b516e98444f 116 return proximityData[sensor][1];
elmkom 1:1b516e98444f 117 }
elmkom 1:1b516e98444f 118 short Proximity::getIR(int sensor)
elmkom 1:1b516e98444f 119 {
elmkom 1:1b516e98444f 120 return proximityData[sensor][2];
elmkom 1:1b516e98444f 121 }
elmkom 1:1b516e98444f 122
elmkom 1:1b516e98444f 123 char* Proximity::getDataStr()
elmkom 1:1b516e98444f 124 {
elmkom 1:1b516e98444f 125 int i=0;
elmkom 1:1b516e98444f 126 int index = 0;
elmkom 1:1b516e98444f 127 index += sprintf(&dataStr[index],"[");
elmkom 1:1b516e98444f 128 for (i=0; i<NUM_PROXIMIY_SENSORS; i++)
elmkom 1:1b516e98444f 129 {
elmkom 1:1b516e98444f 130 if(i<NUM_PROXIMIY_SENSORS-1)
elmkom 1:1b516e98444f 131 index += snprintf(&dataStr[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d},", i,proximityData[i][0],proximityData[i][1],proximityData[i][2]);
elmkom 1:1b516e98444f 132 else
elmkom 1:1b516e98444f 133 index += snprintf(&dataStr[index], 128, "{\"s\":%d,\"p\":%d,\"l\":%d,\"r\":%d}]", i,proximityData[i][0],proximityData[i][1],proximityData[i][2]);
elmkom 1:1b516e98444f 134 lastProximityData[i][0] = proximityData[i][0];
elmkom 1:1b516e98444f 135 lastProximityData[i][1] = proximityData[i][1];
elmkom 1:1b516e98444f 136 lastProximityData[i][2] = proximityData[i][2];
elmkom 1:1b516e98444f 137 }
elmkom 1:1b516e98444f 138 return dataStr;
elmkom 1:1b516e98444f 139 }
elmkom 1:1b516e98444f 140
elmkom 1:1b516e98444f 141
elmkom 1:1b516e98444f 142
elmkom 1:1b516e98444f 143