Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE mbed
Fork of Gas_Sensor_best_copy by
GasArray.cpp@1:fec4764e82cb, 2016-06-28 (annotated)
- Committer:
- nhardy6
- Date:
- Tue Jun 28 18:58:40 2016 +0000
- Revision:
- 1:fec4764e82cb
- Parent:
- 0:bd3708b85a8b
finished tare button
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 | 1:fec4764e82cb | 76 | } |
| nhardy6 | 1:fec4764e82cb | 77 | |
| nhardy6 | 1:fec4764e82cb | 78 | void GasArray::tare() |
| nhardy6 | 1:fec4764e82cb | 79 | { |
| nhardy6 | 1:fec4764e82cb | 80 | for(int i=0; i<number; i++) |
| nhardy6 | 1:fec4764e82cb | 81 | { |
| nhardy6 | 1:fec4764e82cb | 82 | baseR[i]=(responseV[i]*dividerR[i])/(pwrV-responseV[i]); |
| nhardy6 | 1:fec4764e82cb | 83 | } |
| nhardy6 | 0:bd3708b85a8b | 84 | } |
