code to control gas sensor array

Dependencies:   4DGL-uLCD-SE mbed

Committer:
nhardy6
Date:
Thu Jun 16 21:59:31 2016 +0000
Revision:
0:bd3708b85a8b
updated as of 6/16/16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nhardy6 0:bd3708b85a8b 1 #include "GasArray.h"
nhardy6 0:bd3708b85a8b 2 #include <string>
nhardy6 0:bd3708b85a8b 3 #include <cmath>
nhardy6 0:bd3708b85a8b 4
nhardy6 0:bd3708b85a8b 5 GasArray::GasArray(int n, float bR[], float mV, float dR[], AnalogIn p[], float is[], string t[], string g[])
nhardy6 0:bd3708b85a8b 6 {
nhardy6 0:bd3708b85a8b 7 //load array information
nhardy6 0:bd3708b85a8b 8 number = n;
nhardy6 0:bd3708b85a8b 9 baseR = bR;
nhardy6 0:bd3708b85a8b 10 pwrV = mV;
nhardy6 0:bd3708b85a8b 11 dividerR = dR;
nhardy6 0:bd3708b85a8b 12 pins = p;
nhardy6 0:bd3708b85a8b 13 InverseSensitivity = is;
nhardy6 0:bd3708b85a8b 14 types = t;
nhardy6 0:bd3708b85a8b 15 gases = g;
nhardy6 0:bd3708b85a8b 16
nhardy6 0:bd3708b85a8b 17 //initialize other members
nhardy6 0:bd3708b85a8b 18 responseV = new float [n];
nhardy6 0:bd3708b85a8b 19 sensorR = new float [n];
nhardy6 0:bd3708b85a8b 20 percentages = new float [n];
nhardy6 0:bd3708b85a8b 21 }
nhardy6 0:bd3708b85a8b 22
nhardy6 0:bd3708b85a8b 23 void GasArray::read() // Reads and saves sensor responses
nhardy6 0:bd3708b85a8b 24 {
nhardy6 0:bd3708b85a8b 25 //read responses, get percentages
nhardy6 0:bd3708b85a8b 26 for(int i = 0; i < number; i++)
nhardy6 0:bd3708b85a8b 27 {
nhardy6 0:bd3708b85a8b 28 //get divided voltage
nhardy6 0:bd3708b85a8b 29 responseV[i] = pwrV*(pins[i].read());
nhardy6 0:bd3708b85a8b 30 //get sensor responses
nhardy6 0:bd3708b85a8b 31 sensorR[i] = ((responseV[i]*dividerR[i])/(pwrV-responseV[i])-baseR[i])/baseR[i];
nhardy6 0:bd3708b85a8b 32 }
nhardy6 0:bd3708b85a8b 33 //get percentages
nhardy6 0:bd3708b85a8b 34 for(int i=0; i<number; i++)
nhardy6 0:bd3708b85a8b 35 {
nhardy6 0:bd3708b85a8b 36 float sum = 0;
nhardy6 0:bd3708b85a8b 37 for(int j=0; j<number; j++)
nhardy6 0:bd3708b85a8b 38 {
nhardy6 0:bd3708b85a8b 39 sum += InverseSensitivity[i*number+j]*sensorR[j];
nhardy6 0:bd3708b85a8b 40 }
nhardy6 0:bd3708b85a8b 41 percentages[i] = sum;
nhardy6 0:bd3708b85a8b 42 }
nhardy6 0:bd3708b85a8b 43 }
nhardy6 0:bd3708b85a8b 44
nhardy6 0:bd3708b85a8b 45 void GasArray::display_init(uLCD_4DGL *uLCD) // Displays sensor types
nhardy6 0:bd3708b85a8b 46 {
nhardy6 0:bd3708b85a8b 47 uLCD -> cls();
nhardy6 0:bd3708b85a8b 48 //print sensor types
nhardy6 0:bd3708b85a8b 49 for(int i=0; i<number; i++)
nhardy6 0:bd3708b85a8b 50 {
nhardy6 0:bd3708b85a8b 51 uLCD -> locate(1, 2*i+1);
nhardy6 0:bd3708b85a8b 52 uLCD -> printf("%s", types[i]);
nhardy6 0:bd3708b85a8b 53 }
nhardy6 0:bd3708b85a8b 54 //print gas names
nhardy6 0:bd3708b85a8b 55 for(int i=0; i<number; i++)
nhardy6 0:bd3708b85a8b 56 {
nhardy6 0:bd3708b85a8b 57 uLCD -> locate(1, 2*i+1+3*number);
nhardy6 0:bd3708b85a8b 58 uLCD -> printf("%s", gases[i]);
nhardy6 0:bd3708b85a8b 59 }
nhardy6 0:bd3708b85a8b 60 }
nhardy6 0:bd3708b85a8b 61
nhardy6 0:bd3708b85a8b 62 void GasArray::display_cont(uLCD_4DGL *uLCD)
nhardy6 0:bd3708b85a8b 63 {
nhardy6 0:bd3708b85a8b 64 //print sensor responses
nhardy6 0:bd3708b85a8b 65 for(int i=0; i<number; i++)
nhardy6 0:bd3708b85a8b 66 {
nhardy6 0:bd3708b85a8b 67 uLCD -> locate(10,2*i+1);
nhardy6 0:bd3708b85a8b 68 uLCD -> printf("%2.03f", sensorR[i]);
nhardy6 0:bd3708b85a8b 69 }
nhardy6 0:bd3708b85a8b 70 //print gas percentages
nhardy6 0:bd3708b85a8b 71 for(int i=0; i<number; i++)
nhardy6 0:bd3708b85a8b 72 {
nhardy6 0:bd3708b85a8b 73 uLCD -> locate(10,2*i+1+3*number);
nhardy6 0:bd3708b85a8b 74 uLCD -> printf("%2.03f", percentages[i]);
nhardy6 0:bd3708b85a8b 75 }
nhardy6 0:bd3708b85a8b 76 }