code to control gas sensor array
Dependencies: 4DGL-uLCD-SE mbed
GasArray.cpp@0:bd3708b85a8b, 2016-06-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |