Code supports writing to the SD card as well as working with the Volckens group smartphone apps for the mbed HRM1017
Dependencies: ADS1115 BLE_API BME280 Calibration CronoDot EEPROM LSM303 MCP40D17 NCP5623BMUTBG SDFileSystem SI1145 STC3100 mbed nRF51822
Fork of UPAS_BLE_and_USB by
main.cpp@53:03d8d5b1f06b, 2015-06-27 (annotated)
- Committer:
- caseyquinn
- Date:
- Sat Jun 27 17:59:01 2015 +0000
- Revision:
- 53:03d8d5b1f06b
- Parent:
- 49:19e828650618
Updated UPAS12 TF
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
caseyquinn | 0:14d46ef4b6cb | 1 | #include "mbed.h" |
caseyquinn | 0:14d46ef4b6cb | 2 | #include "SDFileSystem.h" |
caseyquinn | 0:14d46ef4b6cb | 3 | #include "Adafruit_ADS1015.h" |
caseyquinn | 1:37babeb68ab9 | 4 | #include "MCP40D17.h" |
caseyquinn | 7:a24d7156bc02 | 5 | #include "STC3100.h" |
caseyquinn | 10:f9cb61b29340 | 6 | #include "LSM303.h" |
caseyquinn | 12:8c00a7f5d483 | 7 | #include "BME280.h" |
caseyquinn | 14:ad550174db8b | 8 | #include "SI1145.h" |
joshuasmth04 | 40:ef7e1dcb3780 | 9 | #include "NCP5623BMUTBG.h" |
joshuasmth04 | 41:1fb3e0ac6f87 | 10 | #include "CronoDot.h" |
caseyquinn | 1:37babeb68ab9 | 11 | |
caseyquinn | 1:37babeb68ab9 | 12 | #define SERIAL_BAUD_RATE 9600 |
joshuasmth04 | 41:1fb3e0ac6f87 | 13 | #define SCL 20 |
caseyquinn | 7:a24d7156bc02 | 14 | #define SDA 22 |
lionberg | 37:838824df3f5f | 15 | #define Crono 0xD0 //D0 for the chronoDot |
caseyquinn | 0:14d46ef4b6cb | 16 | |
caseyquinn | 0:14d46ef4b6cb | 17 | I2C i2c(p22, p20); |
caseyquinn | 0:14d46ef4b6cb | 18 | Adafruit_ADS1115 ads(&i2c); |
caseyquinn | 1:37babeb68ab9 | 19 | MCP40D17 DigPot(&i2c); |
caseyquinn | 12:8c00a7f5d483 | 20 | BME280 bmesensor(p22, p20); |
caseyquinn | 7:a24d7156bc02 | 21 | STC3100 gasG(p22, p20); |
caseyquinn | 2:e596e685eb39 | 22 | Serial pc(USBTX, USBRX); |
caseyquinn | 8:204c21adf693 | 23 | DigitalOut blower(p29, 0); |
caseyquinn | 17:1baf7cab694e | 24 | DigitalOut pbKill(p18, 1); |
caseyquinn | 10:f9cb61b29340 | 25 | LSM303 movementsensor(p22, p20); |
caseyquinn | 14:ad550174db8b | 26 | SI1145 lightsensor(p22, p20); |
joshuasmth04 | 40:ef7e1dcb3780 | 27 | NCP5623BMUTBG RGB_LED(p22, p20); |
joshuasmth04 | 41:1fb3e0ac6f87 | 28 | CronoDot RTC(p22, p20); |
caseyquinn | 0:14d46ef4b6cb | 29 | |
caseyquinn | 20:ad9883973d86 | 30 | float press; |
caseyquinn | 20:ad9883973d86 | 31 | float temp; |
caseyquinn | 20:ad9883973d86 | 32 | float rh; |
caseyquinn | 4:69bd7e8a994c | 33 | |
caseyquinn | 20:ad9883973d86 | 34 | int uv; |
caseyquinn | 20:ad9883973d86 | 35 | int vis; |
caseyquinn | 20:ad9883973d86 | 36 | int ir; |
caseyquinn | 8:204c21adf693 | 37 | |
caseyquinn | 10:f9cb61b29340 | 38 | float accel_x; |
caseyquinn | 10:f9cb61b29340 | 39 | float accel_y; |
caseyquinn | 10:f9cb61b29340 | 40 | float accel_z; |
caseyquinn | 10:f9cb61b29340 | 41 | float mag_x; |
caseyquinn | 10:f9cb61b29340 | 42 | float mag_y; |
caseyquinn | 10:f9cb61b29340 | 43 | float mag_z; |
caseyquinn | 10:f9cb61b29340 | 44 | |
caseyquinn | 20:ad9883973d86 | 45 | |
caseyquinn | 0:14d46ef4b6cb | 46 | int vInReading; |
caseyquinn | 0:14d46ef4b6cb | 47 | int vBlowerReading; |
caseyquinn | 0:14d46ef4b6cb | 48 | int omronDiff; |
caseyquinn | 20:ad9883973d86 | 49 | |
caseyquinn | 20:ad9883973d86 | 50 | int omronReading; |
caseyquinn | 20:ad9883973d86 | 51 | float omronVolt; //V |
caseyquinn | 53:03d8d5b1f06b | 52 | float omronVMin = 0.435; //V |
caseyquinn | 53:03d8d5b1f06b | 53 | float omronVMax = 1.7997; //V |
caseyquinn | 53:03d8d5b1f06b | 54 | float omronMFMin = 0.013; //g/L |
caseyquinn | 53:03d8d5b1f06b | 55 | float omronMFMax = 2.669; //g/L |
caseyquinn | 53:03d8d5b1f06b | 56 | |
caseyquinn | 53:03d8d5b1f06b | 57 | |
caseyquinn | 49:19e828650618 | 58 | |
caseyquinn | 20:ad9883973d86 | 59 | float atmoRho; //g/L |
caseyquinn | 53:03d8d5b1f06b | 60 | float MF4 = -0.9507; |
caseyquinn | 53:03d8d5b1f06b | 61 | float MF3 = 5.1495; |
caseyquinn | 53:03d8d5b1f06b | 62 | float MF2 = -9.2983; |
caseyquinn | 53:03d8d5b1f06b | 63 | float MF1 = 8.3236; |
caseyquinn | 53:03d8d5b1f06b | 64 | float MF0 = -2.2377; |
caseyquinn | 53:03d8d5b1f06b | 65 | |
caseyquinn | 53:03d8d5b1f06b | 66 | |
caseyquinn | 20:ad9883973d86 | 67 | float massflow; //g/min |
caseyquinn | 20:ad9883973d86 | 68 | float volflow; //L/min |
caseyquinn | 20:ad9883973d86 | 69 | float volflowSet = 1.0; //L/min |
joshuasmth04 | 41:1fb3e0ac6f87 | 70 | float massflowSet; |
caseyquinn | 42:fc2f2b9f07ae | 71 | float deltaVflow = 0.0; |
caseyquinn | 42:fc2f2b9f07ae | 72 | float deltaMflow = 0.0; |
caseyquinn | 47:3146e8c949a9 | 73 | float gainFlow; |
caseyquinn | 20:ad9883973d86 | 74 | |
caseyquinn | 46:af5f2d7c158c | 75 | uint8_t digital_pot_setpoint; //min = 0x7F, max = 0x00 |
caseyquinn | 46:af5f2d7c158c | 76 | uint8_t digital_pot_set; |
caseyquinn | 53:03d8d5b1f06b | 77 | float DP4 = 6.0986; |
caseyquinn | 53:03d8d5b1f06b | 78 | float DP3 = -55.372; |
caseyquinn | 53:03d8d5b1f06b | 79 | float DP2 = 192.76; |
caseyquinn | 53:03d8d5b1f06b | 80 | float DP1 = -326.6; |
caseyquinn | 53:03d8d5b1f06b | 81 | float DP0 = 244.32; |
caseyquinn | 53:03d8d5b1f06b | 82 | |
caseyquinn | 53:03d8d5b1f06b | 83 | |
caseyquinn | 42:fc2f2b9f07ae | 84 | |
lionberg | 37:838824df3f5f | 85 | char filename[] = "/sd/UPAS0010LOG000000000000.txt"; |
caseyquinn | 7:a24d7156bc02 | 86 | SDFileSystem sd(SPIS_PSELMOSI, SPIS_PSELMISO, SPIS_PSELSCK, SPIS_PSELSS, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (p12, p13, p15, p14) |
caseyquinn | 7:a24d7156bc02 | 87 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 88 | char Seconds = 0; //Seconds |
joshuasmth04 | 41:1fb3e0ac6f87 | 89 | char Minutes = 0; //Minutes |
joshuasmth04 | 41:1fb3e0ac6f87 | 90 | char Hour = 0; //Hour |
joshuasmth04 | 41:1fb3e0ac6f87 | 91 | char Date = 0; //Date |
joshuasmth04 | 41:1fb3e0ac6f87 | 92 | char Month = 0; //Month |
joshuasmth04 | 41:1fb3e0ac6f87 | 93 | char Year = 0; //Year |
caseyquinn | 7:a24d7156bc02 | 94 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 95 | double secondsD = 0; |
joshuasmth04 | 41:1fb3e0ac6f87 | 96 | char * RTCtime; |
caseyquinn | 20:ad9883973d86 | 97 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 98 | |
caseyquinn | 0:14d46ef4b6cb | 99 | int main() |
caseyquinn | 0:14d46ef4b6cb | 100 | { |
caseyquinn | 49:19e828650618 | 101 | // Setup and Initialization |
caseyquinn | 49:19e828650618 | 102 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 103 | |
caseyquinn | 47:3146e8c949a9 | 104 | if(volflowSet==1.0){ |
caseyquinn | 47:3146e8c949a9 | 105 | gainFlow = 100;} |
caseyquinn | 47:3146e8c949a9 | 106 | else if(volflowSet==2.0){ |
caseyquinn | 47:3146e8c949a9 | 107 | gainFlow = 25;} |
caseyquinn | 47:3146e8c949a9 | 108 | else{ |
caseyquinn | 47:3146e8c949a9 | 109 | gainFlow = 25;} |
caseyquinn | 47:3146e8c949a9 | 110 | |
caseyquinn | 43:da0708632a21 | 111 | RGB_LED.set_led(1,0,0); |
caseyquinn | 22:8dd7e0d4c21c | 112 | press = bmesensor.getPressure(); |
caseyquinn | 22:8dd7e0d4c21c | 113 | temp = bmesensor.getTemperature(); |
caseyquinn | 22:8dd7e0d4c21c | 114 | rh = bmesensor.getHumidity(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 115 | |
caseyquinn | 22:8dd7e0d4c21c | 116 | atmoRho = ((press-((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)))*100)/(287.0531*(temp+273.15))+((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)*100)/(461.4964*(temp+273.15)); |
caseyquinn | 22:8dd7e0d4c21c | 117 | massflowSet = volflowSet*atmoRho; |
lionberg | 26:9cf8e76d8274 | 118 | //Digtal pot tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx |
caseyquinn | 42:fc2f2b9f07ae | 119 | digital_pot_setpoint = (int)floor(DP4*pow(massflowSet,4)+DP3*pow(massflowSet,3)+DP2*pow(massflowSet,2)+DP1*massflowSet+DP0); //min = 0x7F, max = 0x00 |
caseyquinn | 46:af5f2d7c158c | 120 | |
caseyquinn | 46:af5f2d7c158c | 121 | if(digital_pot_setpoint>=127){ |
caseyquinn | 46:af5f2d7c158c | 122 | digital_pot_setpoint = 127; |
caseyquinn | 46:af5f2d7c158c | 123 | } |
caseyquinn | 46:af5f2d7c158c | 124 | else if(digital_pot_setpoint<=1){ |
caseyquinn | 46:af5f2d7c158c | 125 | digital_pot_setpoint = 1; |
caseyquinn | 46:af5f2d7c158c | 126 | } |
caseyquinn | 46:af5f2d7c158c | 127 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 128 | DigPot.writeRegister(digital_pot_setpoint); |
joshuasmth04 | 41:1fb3e0ac6f87 | 129 | wait(1); |
joshuasmth04 | 41:1fb3e0ac6f87 | 130 | blower = 1; |
joshuasmth04 | 41:1fb3e0ac6f87 | 131 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 132 | RTCtime = RTC.get_time(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 133 | sprintf(filename, "/sd/UPAS0010LOG_%02d-%02d-%02d_%02d-%02d-%02d.txt",RTCtime[5],RTCtime[4],RTCtime[3],RTCtime[2],RTCtime[1],RTCtime[0]); |
caseyquinn | 17:1baf7cab694e | 134 | FILE *fp = fopen(filename, "w"); |
caseyquinn | 17:1baf7cab694e | 135 | fclose(fp); |
caseyquinn | 49:19e828650618 | 136 | //pc.printf("%d\r\n",digital_pot_setpoint); |
caseyquinn | 49:19e828650618 | 137 | |
caseyquinn | 49:19e828650618 | 138 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 139 | //Following lines are needed to enter into the initiallization flow control loop |
caseyquinn | 49:19e828650618 | 140 | |
caseyquinn | 44:096dcb50ff08 | 141 | wait(10); |
caseyquinn | 49:19e828650618 | 142 | |
caseyquinn | 46:af5f2d7c158c | 143 | omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V |
caseyquinn | 43:da0708632a21 | 144 | omronVolt = (omronReading*4.096)/(32768*2); |
caseyquinn | 43:da0708632a21 | 145 | //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx |
caseyquinn | 49:19e828650618 | 146 | if(omronVolt<=omronVMin){ |
caseyquinn | 49:19e828650618 | 147 | massflow = omronMFMin; |
caseyquinn | 49:19e828650618 | 148 | }else if(omronVolt>=omronVMax){ |
caseyquinn | 49:19e828650618 | 149 | massflow = omronMFMax; |
caseyquinn | 46:af5f2d7c158c | 150 | }else{ |
caseyquinn | 46:af5f2d7c158c | 151 | massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;} |
caseyquinn | 46:af5f2d7c158c | 152 | deltaMflow = massflow-massflowSet; |
caseyquinn | 46:af5f2d7c158c | 153 | digital_pot_set = digital_pot_setpoint; |
caseyquinn | 46:af5f2d7c158c | 154 | //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); |
caseyquinn | 46:af5f2d7c158c | 155 | wait(5); |
caseyquinn | 43:da0708632a21 | 156 | |
caseyquinn | 49:19e828650618 | 157 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 158 | //Sets the flow withen +-1.5% of the desired flow rate based on mass flow |
caseyquinn | 44:096dcb50ff08 | 159 | |
caseyquinn | 44:096dcb50ff08 | 160 | while(abs(deltaMflow)>.015){ |
caseyquinn | 43:da0708632a21 | 161 | |
caseyquinn | 43:da0708632a21 | 162 | omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V |
caseyquinn | 43:da0708632a21 | 163 | omronVolt = (omronReading*4.096)/(32768*2); |
caseyquinn | 43:da0708632a21 | 164 | //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx |
caseyquinn | 49:19e828650618 | 165 | if(omronVolt<=omronVMin){ |
caseyquinn | 49:19e828650618 | 166 | massflow = omronMFMin; |
caseyquinn | 49:19e828650618 | 167 | }else if(omronVolt>=omronVMax){ |
caseyquinn | 49:19e828650618 | 168 | massflow = omronMFMax; |
caseyquinn | 46:af5f2d7c158c | 169 | }else{ |
caseyquinn | 46:af5f2d7c158c | 170 | massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;} |
caseyquinn | 46:af5f2d7c158c | 171 | |
caseyquinn | 43:da0708632a21 | 172 | atmoRho = ((press-((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)))*100)/(287.0531*(temp+273.15))+((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)*100)/(461.4964*(temp+273.15)); |
caseyquinn | 44:096dcb50ff08 | 173 | volflow = massflow/atmoRho; |
caseyquinn | 43:da0708632a21 | 174 | massflowSet = volflowSet*atmoRho; |
caseyquinn | 43:da0708632a21 | 175 | deltaMflow = massflow-massflowSet; |
caseyquinn | 46:af5f2d7c158c | 176 | //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); |
caseyquinn | 46:af5f2d7c158c | 177 | digital_pot_set = (uint8_t)(digital_pot_set+(int8_t)((gainFlow*deltaMflow))); |
caseyquinn | 46:af5f2d7c158c | 178 | if(digital_pot_set>=127){ |
caseyquinn | 46:af5f2d7c158c | 179 | digital_pot_set = 127; |
caseyquinn | 46:af5f2d7c158c | 180 | }else if(digital_pot_set<=1){ |
caseyquinn | 46:af5f2d7c158c | 181 | digital_pot_set = 1; |
caseyquinn | 46:af5f2d7c158c | 182 | } |
caseyquinn | 46:af5f2d7c158c | 183 | |
caseyquinn | 46:af5f2d7c158c | 184 | wait(2); |
caseyquinn | 44:096dcb50ff08 | 185 | DigPot.writeRegister(digital_pot_set); |
caseyquinn | 46:af5f2d7c158c | 186 | wait(1); |
caseyquinn | 46:af5f2d7c158c | 187 | |
caseyquinn | 43:da0708632a21 | 188 | |
caseyquinn | 43:da0708632a21 | 189 | } |
caseyquinn | 2:e596e685eb39 | 190 | |
caseyquinn | 46:af5f2d7c158c | 191 | RGB_LED.set_led(0,1,0); |
caseyquinn | 49:19e828650618 | 192 | |
caseyquinn | 49:19e828650618 | 193 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 194 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 195 | //---------------------------------------------------------------------------------------------// |
caseyquinn | 49:19e828650618 | 196 | // Main Control Loop |
caseyquinn | 42:fc2f2b9f07ae | 197 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 198 | while(1) { |
joshuasmth04 | 41:1fb3e0ac6f87 | 199 | |
caseyquinn | 46:af5f2d7c158c | 200 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 201 | RTCtime = RTC.get_time(); // the way the variable RTCtime works you must save the variables in normal chars or weird things happen |
joshuasmth04 | 41:1fb3e0ac6f87 | 202 | Seconds = RTCtime[0];//Seconds |
joshuasmth04 | 41:1fb3e0ac6f87 | 203 | Minutes = RTCtime[1];//Minutes |
joshuasmth04 | 41:1fb3e0ac6f87 | 204 | Hour = RTCtime[2];//Hour |
joshuasmth04 | 41:1fb3e0ac6f87 | 205 | Date = RTCtime[3];//Date |
joshuasmth04 | 41:1fb3e0ac6f87 | 206 | Month = RTCtime[4];//Month |
joshuasmth04 | 41:1fb3e0ac6f87 | 207 | Year = RTCtime[5];//Year |
lionberg | 37:838824df3f5f | 208 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 209 | secondsD = (double)RTCtime[0]; |
caseyquinn | 42:fc2f2b9f07ae | 210 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 211 | if(fmod(secondsD,10)==0) { |
caseyquinn | 42:fc2f2b9f07ae | 212 | |
caseyquinn | 42:fc2f2b9f07ae | 213 | omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V |
joshuasmth04 | 41:1fb3e0ac6f87 | 214 | omronVolt = (omronReading*4.096)/(32768*2); |
joshuasmth04 | 41:1fb3e0ac6f87 | 215 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 216 | //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet |
joshuasmth04 | 41:1fb3e0ac6f87 | 217 | //UPAS0001=-2.8112*L14^4+15.636*L14^3-30.192*L14^2+25.945*L14-7.6599 |
joshuasmth04 | 41:1fb3e0ac6f87 | 218 | //massflow = -2.8112*pow(omronVolt,(float)4)+15.636*pow(omronVolt,(float)3)-30.192*pow(omronVolt,(float)2)+25.945*omronVolt-7.6599; |
joshuasmth04 | 41:1fb3e0ac6f87 | 219 | //UPAS0002=-1.4365*L14^4+8.4231*L14^3-16.754*L14^2+15.071*L14-4.5382 |
joshuasmth04 | 41:1fb3e0ac6f87 | 220 | //massflow = -1.4365*pow(omronVolt,(float)4)+8.4231*pow(omronVolt,(float)3)-16.754*pow(omronVolt,(float)2)+15.071*omronVolt-4.5382; |
joshuasmth04 | 41:1fb3e0ac6f87 | 221 | //UPAS0003=-2.7391*L14^4+15.215*L14^3-29.522*L14^2+25.424*L14-7.5516 |
joshuasmth04 | 41:1fb3e0ac6f87 | 222 | //massflow = -2.7391*pow(omronVolt,(float)4)+15.215*pow(omronVolt,(float)3)-29.522*pow(omronVolt,(float)2)+25.424*omronVolt-7.5516; |
joshuasmth04 | 41:1fb3e0ac6f87 | 223 | //UPAS0004 =-1.5374*L14^4+9.2898*L14^3-18.894*L14^2+17.112*L14-5.1938 |
joshuasmth04 | 41:1fb3e0ac6f87 | 224 | //massflow = -1.5374*pow(omronVolt,(float)4)+9.2898*pow(omronVolt,(float)3)-18.894*pow(omronVolt,(float)2)+17.112*omronVolt-5.1938; |
joshuasmth04 | 41:1fb3e0ac6f87 | 225 | //UPAS0005 =-0.4654*L14^4+3.507*L14^3-7.7254*L14^2+7.8831*L14-2.4317 |
joshuasmth04 | 41:1fb3e0ac6f87 | 226 | //massflow = -0.4654*pow(omronVolt,(float)4)+3.507*pow(omronVolt,(float)3)-7.7254*pow(omronVolt,(float)2)+7.8831*omronVolt-2.4317; |
joshuasmth04 | 41:1fb3e0ac6f87 | 227 | //UPAS0006=-0.0507*L14^4+1.2322*L14^3-2.9659*L14^2+3.9118*L14-1.0765 |
joshuasmth04 | 41:1fb3e0ac6f87 | 228 | //massflow = -0.0507*pow(omronVolt,(float)4)+1.2322*pow(omronVolt,(float)3)-2.9659*pow(omronVolt,(float)2)+3.9118*omronVolt-1.0765; |
joshuasmth04 | 41:1fb3e0ac6f87 | 229 | //UPAS0007=-1.5303*L14^4+10.411*L14^3-24.002*L14^2+24.321*L14-8.4713 |
joshuasmth04 | 41:1fb3e0ac6f87 | 230 | //massflow = -1.5303*pow(omronVolt,(float)4)+10.411*pow(omronVolt,(float)3)-24.002*pow(omronVolt,(float)2)+24.321*omronVolt-8.4713; |
joshuasmth04 | 41:1fb3e0ac6f87 | 231 | //UPAS0008=-1.1291*L14^4+7.701*L14^3-17.501*L14^2+17.754*L14-6.073 |
joshuasmth04 | 41:1fb3e0ac6f87 | 232 | //massflow = -1.1291*pow(omronVolt,(float)4)+7.701*pow(omronVolt,(float)3)-17.501*pow(omronVolt,(float)2)+17.754*omronVolt-6.073; |
joshuasmth04 | 41:1fb3e0ac6f87 | 233 | //UPAS0009=-2.662*L14^4+16.421*L14^3-35.797*L14^2+34.579*L14-11.77 |
joshuasmth04 | 41:1fb3e0ac6f87 | 234 | //massflow = -2.662*pow(omronVolt,(float)4)+16.421*pow(omronVolt,(float)3)-35.797*pow(omronVolt,(float)2)+34.579*omronVolt-11.77; |
joshuasmth04 | 41:1fb3e0ac6f87 | 235 | //UPAS0010=-3.6933*L14^4+21.633*L14^3-44.694*L14^2+40.387*L14-12.82 |
caseyquinn | 49:19e828650618 | 236 | if(omronVolt<=omronVMin){ |
caseyquinn | 49:19e828650618 | 237 | massflow = omronMFMin; |
caseyquinn | 49:19e828650618 | 238 | }else if(omronVolt>=omronVMax){ |
caseyquinn | 49:19e828650618 | 239 | massflow = omronMFMax; |
caseyquinn | 46:af5f2d7c158c | 240 | }else{ |
caseyquinn | 46:af5f2d7c158c | 241 | massflow = MF4*pow(omronVolt,(float)4)+MF3*pow(omronVolt,(float)3)+MF2*pow(omronVolt,(float)2)+MF1*omronVolt+MF0;} |
caseyquinn | 46:af5f2d7c158c | 242 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 243 | atmoRho = ((press-((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)))*100)/(287.0531*(temp+273.15))+((6.1078*pow((float)10,(float)((7.5*temp)/(237.3+temp))))*(rh/100)*100)/(461.4964*(temp+273.15)); |
joshuasmth04 | 41:1fb3e0ac6f87 | 244 | volflow = massflow/atmoRho; |
caseyquinn | 42:fc2f2b9f07ae | 245 | deltaVflow = volflow-volflowSet; |
caseyquinn | 43:da0708632a21 | 246 | massflowSet = volflowSet*atmoRho; |
caseyquinn | 43:da0708632a21 | 247 | deltaMflow = massflow-massflowSet; |
caseyquinn | 46:af5f2d7c158c | 248 | |
caseyquinn | 46:af5f2d7c158c | 249 | //pc.printf("%f,%f,%f,%f,%d,%u,%x\r\n",omronVolt,massflow,massflowSet,deltaMflow,digital_pot_set,digital_pot_set,digital_pot_set); |
caseyquinn | 46:af5f2d7c158c | 250 | |
caseyquinn | 44:096dcb50ff08 | 251 | if(abs(deltaMflow)>.025){ |
caseyquinn | 46:af5f2d7c158c | 252 | digital_pot_set = (uint8_t)(digital_pot_set+(int8_t)(gainFlow*deltaMflow)); |
caseyquinn | 46:af5f2d7c158c | 253 | |
caseyquinn | 46:af5f2d7c158c | 254 | if(digital_pot_set>=127){ |
caseyquinn | 46:af5f2d7c158c | 255 | digital_pot_set = 127; |
caseyquinn | 46:af5f2d7c158c | 256 | RGB_LED.set_led(1,0,0); |
caseyquinn | 46:af5f2d7c158c | 257 | }else if(digital_pot_set<=1){ |
caseyquinn | 46:af5f2d7c158c | 258 | digital_pot_set = 1; |
caseyquinn | 46:af5f2d7c158c | 259 | RGB_LED.set_led(1,0,0); |
caseyquinn | 46:af5f2d7c158c | 260 | }else{ |
caseyquinn | 46:af5f2d7c158c | 261 | RGB_LED.set_led(1,1,0);} |
caseyquinn | 46:af5f2d7c158c | 262 | |
caseyquinn | 46:af5f2d7c158c | 263 | DigPot.writeRegister(digital_pot_set); |
caseyquinn | 46:af5f2d7c158c | 264 | |
caseyquinn | 46:af5f2d7c158c | 265 | }else{ |
caseyquinn | 46:af5f2d7c158c | 266 | RGB_LED.set_led(0,1,0);} |
caseyquinn | 43:da0708632a21 | 267 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 268 | movementsensor.getACCEL(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 269 | movementsensor.getCOMPASS(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 270 | accel_x = movementsensor.AccelData.x; |
joshuasmth04 | 41:1fb3e0ac6f87 | 271 | accel_y = movementsensor.AccelData.y; |
joshuasmth04 | 41:1fb3e0ac6f87 | 272 | accel_z = movementsensor.AccelData.z; |
joshuasmth04 | 41:1fb3e0ac6f87 | 273 | mag_x = movementsensor.MagData.x; |
joshuasmth04 | 41:1fb3e0ac6f87 | 274 | mag_y = movementsensor.MagData.y; |
joshuasmth04 | 41:1fb3e0ac6f87 | 275 | mag_z = movementsensor.MagData.z; |
caseyquinn | 42:fc2f2b9f07ae | 276 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 277 | vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0 |
joshuasmth04 | 41:1fb3e0ac6f87 | 278 | vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0 |
joshuasmth04 | 41:1fb3e0ac6f87 | 279 | omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3 |
joshuasmth04 | 41:1fb3e0ac6f87 | 280 | press = bmesensor.getPressure(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 281 | temp = bmesensor.getTemperature()-5; |
joshuasmth04 | 41:1fb3e0ac6f87 | 282 | rh = bmesensor.getHumidity(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 283 | uv = lightsensor.getUV(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 284 | vis = lightsensor.getVIS(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 285 | ir = lightsensor.getIR(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 286 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 287 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 288 | //Mount the filesystem |
caseyquinn | 48:b8cbef6aaed2 | 289 | //sd.mount(); |
joshuasmth04 | 41:1fb3e0ac6f87 | 290 | FILE *fp = fopen(filename, "a"); |
caseyquinn | 48:b8cbef6aaed2 | 291 | fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,%f,%f,%f,%f,%2.2f,%04.2f,%2.2f,%1.4f,%1.4f,%1.4f,%.0f,%.0f,%.0f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\r\n",Year,Month,Date,Hour,Minutes,Seconds,omronVolt,atmoRho,volflow,massflow,temp,press,rh,accel_x, accel_y, accel_z, mag_x, mag_y, mag_z,uv, vis, ir,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps(), gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow); |
joshuasmth04 | 41:1fb3e0ac6f87 | 292 | fclose(fp); |
joshuasmth04 | 41:1fb3e0ac6f87 | 293 | //Unmount the filesystem |
caseyquinn | 48:b8cbef6aaed2 | 294 | //sd.unmount(); |
caseyquinn | 42:fc2f2b9f07ae | 295 | |
joshuasmth04 | 41:1fb3e0ac6f87 | 296 | wait(1); |
joshuasmth04 | 41:1fb3e0ac6f87 | 297 | |
caseyquinn | 34:481403146690 | 298 | } |
caseyquinn | 0:14d46ef4b6cb | 299 | } |
caseyquinn | 0:14d46ef4b6cb | 300 | } |
caseyquinn | 0:14d46ef4b6cb | 301 | |
caseyquinn | 0:14d46ef4b6cb | 302 |