all working version 2.0

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_powerfunction by scott kelleher

Committer:
caseyquinn
Date:
Wed Apr 20 03:36:48 2016 +0000
Revision:
25:fbf7d44e7da4
Parent:
24:e274a34492cf
Child:
26:6aa294d83af4
Added in microenvironment gps setting for 2 locations settable by the updated app. Battery near dead or after 8 pm red led blink to remind to plug in. Turn pumps off if the 3.3 rail drops out, turn back on once plugged in. Primarily for FOCO school

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jelord 0:2cb2b2ea316f 1 #include "mbed.h"
jelord 2:88fcbfadec6a 2 #include "SDFileSystem.h"
jelord 2:88fcbfadec6a 3 #include "Adafruit_ADS1015.h"
jelord 2:88fcbfadec6a 4 #include "MCP40D17.h"
jelord 2:88fcbfadec6a 5 #include "STC3100.h"
jelord 2:88fcbfadec6a 6 #include "LSM303.h"
jelord 2:88fcbfadec6a 7 #include "BME280.h"
jelord 2:88fcbfadec6a 8 #include "SI1145.h"
jelord 2:88fcbfadec6a 9 #include "NCP5623BMUTBG.h"
jelord 2:88fcbfadec6a 10 #include "CronoDot.h"
jelord 2:88fcbfadec6a 11 #include "EEPROM.h"
caseyquinn 12:5b4f3245606a 12 #include "Calibration.h"
caseyquinn 12:5b4f3245606a 13 #include "MAX_M8.h"
caseyquinn 12:5b4f3245606a 14 #include "DRV8830.h"
caseyquinn 14:7cdb643da356 15
jelord 0:2cb2b2ea316f 16
caseyquinn 12:5b4f3245606a 17 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 18 //General Items
caseyquinn 12:5b4f3245606a 19 /////////////////////////////////////////////
caseyquinn 14:7cdb643da356 20 I2C i2c(PB_9, PB_8);//(D14, D15); SDA,SCL
caseyquinn 12:5b4f3245606a 21 Serial pc(USBTX, USBRX);
caseyquinn 18:41ef98db0423 22 DigitalOut pumps(PA_9, 0);//(D8, 0);
caseyquinn 12:5b4f3245606a 23 DigitalOut pbKill(PC_12, 1); // Digital input pin that conncect to the LTC2950 battery charger used to shutdown the UPAS
caseyquinn 13:455601f62aad 24 DigitalIn nINT(PA_15); //Connected but currently unused is a digital ouput pin from LTC2950 battery charger. http://cds.linear.com/docs/en/datasheet/295012fd.pdf
jelord 2:88fcbfadec6a 25 MCP40D17 DigPot(&i2c);
caseyquinn 12:5b4f3245606a 26 BME280 bmesensor(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 27 NCP5623BMUTBG RGB_LED(PB_9, PB_8);//(D14, D15);
caseyquinn 17:3e6dda6e6335 28 CronoDot RTC_UPAS(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 29 EEPROM E2PROM(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 30 Calibration calibrations(1); //Default serial/calibration if there are no values for the selected option
caseyquinn 14:7cdb643da356 31
caseyquinn 12:5b4f3245606a 32
caseyquinn 12:5b4f3245606a 33 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 34 //RN4677 BT/BLE Module
caseyquinn 12:5b4f3245606a 35 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 36 Serial microChannel(PB_10, PB_11); // tx, rx
caseyquinn 4:5d004fd997d5 37 DigitalOut bleRTS(PB_14, 0);
caseyquinn 4:5d004fd997d5 38 DigitalOut bleCTS(PB_13, 0);
caseyquinn 12:5b4f3245606a 39 DigitalOut BT_IRST(PC_8, 0);
caseyquinn 12:5b4f3245606a 40 DigitalOut BT_SW(PA_12, 0);
caseyquinn 17:3e6dda6e6335 41
caseyquinn 13:455601f62aad 42
caseyquinn 12:5b4f3245606a 43 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 44 //Analog to Digital Converter
caseyquinn 12:5b4f3245606a 45 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 46 Adafruit_ADS1115 ads(&i2c);
caseyquinn 12:5b4f3245606a 47 //DigitalIn ADS_ALRT(PA_10); //Connected but currently unused. (ADS1115) http://www.ti.com/lit/ds/symlink/ads1115.pdf
caseyquinn 12:5b4f3245606a 48
caseyquinn 12:5b4f3245606a 49 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 50 //Battery Monitoring
caseyquinn 12:5b4f3245606a 51 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 52 STC3100 gasG(PB_9, PB_8);//(D14, D15); // http://www.st.com/web/en/resource/technical/document/datasheet/CD00219947.pdf
caseyquinn 12:5b4f3245606a 53 DigitalIn bcs1(PC_9); //Charge complete if High. Connected but currently unused. (MCP73871) http://www.mouser.com/ds/2/268/22090a-52174.pdf
caseyquinn 12:5b4f3245606a 54 DigitalIn bcs2(PA_8); //Batt charging if High. Connected but currently unused. (MCP73871) http://www.mouser.com/ds/2/268/22090a-52174.pdf
caseyquinn 12:5b4f3245606a 55
caseyquinn 12:5b4f3245606a 56 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 57 //Accelerometer and Magnometer
caseyquinn 12:5b4f3245606a 58 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 59 LSM303 movementsensor(PB_9, PB_8);//(D14, D15); // http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
caseyquinn 12:5b4f3245606a 60 //DigitalIn ACC_INT1(PC_7); //Connected but currently unused. (LSM303)
caseyquinn 12:5b4f3245606a 61 //DigitalIn ACC_INT2(PC_6); //Connected but currently unused. (LSM303)
caseyquinn 12:5b4f3245606a 62 //DigitalIn ACC_DRDY(PC_11); //Connected but currently unused. (LSM303)
jelord 0:2cb2b2ea316f 63
caseyquinn 12:5b4f3245606a 64 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 65 //UV and Visible Light Sensor
caseyquinn 12:5b4f3245606a 66 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 67 SI1145 lightsensor(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 68 //DigitalIn UV_INT(PD_2); //Connected but currently unused nor configured (interupt). (SI1145) https://www.silabs.com/Support%20Documents/TechnicalDocs/Si1145-46-47.pdf
caseyquinn 9:8646fd501832 69
caseyquinn 12:5b4f3245606a 70 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 71 //GPS
caseyquinn 12:5b4f3245606a 72 /////////////////////////////////////////////
caseyquinn 17:3e6dda6e6335 73 DigitalOut gpsEN(PB_15, 0);
caseyquinn 23:1ca41779b8ec 74 Max_M8 gps(PB_9, PB_8,(0x84));
caseyquinn 12:5b4f3245606a 75
caseyquinn 12:5b4f3245606a 76 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 77 //Hbridge Valve Control
caseyquinn 12:5b4f3245606a 78 /////////////////////////////////////////////
caseyquinn 23:1ca41779b8ec 79
caseyquinn 24:e274a34492cf 80 /*
caseyquinn 24:e274a34492cf 81 DRV8830 motor1(PB_9, PB_8, 0xC4); //Not working due to trace issue on tboard
caseyquinn 23:1ca41779b8ec 82 DRV8830 motor2(PB_9, PB_8, 0xC8); //Works with 0xC8, not 0xCA since R8 isn't on the Tboards.
caseyquinn 24:e274a34492cf 83 DRV8830 motor3(PB_9, PB_8, 0xCC); //Not working due to trace issue on tboard
caseyquinn 23:1ca41779b8ec 84 DRV8830 motor4(PB_9, PB_8, 0xCE); //Works!
caseyquinn 12:5b4f3245606a 85 DigitalIn hb_fault1(PA_6);
caseyquinn 12:5b4f3245606a 86 DigitalIn hb_fault2(PA_7);
caseyquinn 12:5b4f3245606a 87 DigitalIn hb_fault3(PA_5);
caseyquinn 12:5b4f3245606a 88 DigitalIn hb_fault4(PA_4);
caseyquinn 24:e274a34492cf 89 */
caseyquinn 23:1ca41779b8ec 90
caseyquinn 12:5b4f3245606a 91 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 92 //SD Card
caseyquinn 12:5b4f3245606a 93 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 94 char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
caseyquinn 12:5b4f3245606a 95 SDFileSystem sd(PB_5, PB_4, PB_3, PB_6, "sd");//(D4, D5, D3, D10, "sd"); // (MOSI, MISO, SCK, SEL)
caseyquinn 12:5b4f3245606a 96 DigitalIn sdCD(PA_11);
caseyquinn 14:7cdb643da356 97
caseyquinn 12:5b4f3245606a 98 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 99 //Callbacks
caseyquinn 12:5b4f3245606a 100 /////////////////////////////////////////////
caseyquinn 9:8646fd501832 101 Ticker stop; //This is the stop callback object
caseyquinn 8:c4a8f9b67cee 102 Ticker logg; //This is the logging callback object
caseyquinn 9:8646fd501832 103 Ticker flowCtl; //This is the control loop callback object
jelord 3:122bfc998c4c 104
caseyquinn 12:5b4f3245606a 105 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 106 //Varible Definitions
caseyquinn 12:5b4f3245606a 107 /////////////////////////////////////////////
jelord 3:122bfc998c4c 108 uint16_t serial_num = 1; // Default serial/calibration number
jelord 3:122bfc998c4c 109 int RunReady =0;
jelord 3:122bfc998c4c 110
caseyquinn 25:fbf7d44e7da4 111 bool ledOn = 0;
caseyquinn 25:fbf7d44e7da4 112
caseyquinn 4:5d004fd997d5 113 struct tm STtime;
caseyquinn 7:29b01d5812ee 114 char timestr[32];
jelord 3:122bfc998c4c 115
caseyquinn 9:8646fd501832 116 float press;
caseyquinn 9:8646fd501832 117 float temp;
caseyquinn 9:8646fd501832 118 float rh;
jelord 3:122bfc998c4c 119
caseyquinn 9:8646fd501832 120 int uv;
caseyquinn 9:8646fd501832 121 int vis;
caseyquinn 9:8646fd501832 122 int ir;
jelord 3:122bfc998c4c 123
caseyquinn 9:8646fd501832 124 float compass;
caseyquinn 9:8646fd501832 125 float accel_x;
caseyquinn 9:8646fd501832 126 float accel_y;
caseyquinn 9:8646fd501832 127 float accel_z;
caseyquinn 9:8646fd501832 128 float accel_comp;
caseyquinn 9:8646fd501832 129 float angle_x;
caseyquinn 9:8646fd501832 130 float angle_y;
caseyquinn 9:8646fd501832 131 float angle_z;
caseyquinn 9:8646fd501832 132 float mag_x;
caseyquinn 9:8646fd501832 133 float mag_y;
caseyquinn 9:8646fd501832 134 float mag_z;
jelord 3:122bfc998c4c 135
caseyquinn 9:8646fd501832 136 int vInReading;
caseyquinn 25:fbf7d44e7da4 137 int vInReadingLast;
caseyquinn 9:8646fd501832 138 int vBlowerReading;
caseyquinn 9:8646fd501832 139 int omronDiff;
caseyquinn 9:8646fd501832 140 float omronVolt; //V
caseyquinn 9:8646fd501832 141 int omronReading;
caseyquinn 9:8646fd501832 142 float atmoRho; //g/L
jelord 3:122bfc998c4c 143
caseyquinn 25:fbf7d44e7da4 144 int amps;
caseyquinn 25:fbf7d44e7da4 145 int bVolt;
caseyquinn 25:fbf7d44e7da4 146 int bFuel;
caseyquinn 25:fbf7d44e7da4 147 //bool pumpOn;
caseyquinn 9:8646fd501832 148 float massflow; //g/min
caseyquinn 9:8646fd501832 149 float volflow; //L/min
jelord 3:122bfc998c4c 150 float volflowSet = 1.0; //L/min
caseyquinn 14:7cdb643da356 151 int logInerval = 5;//seconds
jelord 3:122bfc998c4c 152 double secondsD = 0;
jelord 3:122bfc998c4c 153 double lastsecondD = 0;
caseyquinn 9:8646fd501832 154 float massflowSet;
jelord 3:122bfc998c4c 155 float deltaVflow = 0.0;
jelord 3:122bfc998c4c 156 float deltaMflow = 0.0;
caseyquinn 9:8646fd501832 157 float gainFlow;
caseyquinn 9:8646fd501832 158 float sampledVol; //L, total sampled volume
jelord 3:122bfc998c4c 159
caseyquinn 25:fbf7d44e7da4 160 int digital_pot_setpoint = 30; //min = 0x7F, max = 0x00
caseyquinn 9:8646fd501832 161 int digital_pot_set;
caseyquinn 9:8646fd501832 162 int digital_pot_change;
jelord 3:122bfc998c4c 163 int digitalpotMax = 127;
caseyquinn 9:8646fd501832 164 int digitalpotMin = 10;
jelord 3:122bfc998c4c 165
caseyquinn 12:5b4f3245606a 166 int dutyUp;
caseyquinn 12:5b4f3245606a 167 int dutyDown;
caseyquinn 12:5b4f3245606a 168
caseyquinn 12:5b4f3245606a 169 float flat = 0;
caseyquinn 12:5b4f3245606a 170 float flon = 0;
jelord 3:122bfc998c4c 171
caseyquinn 23:1ca41779b8ec 172 bool gpsFix;
caseyquinn 12:5b4f3245606a 173 uint8_t gpssatellites = 0;
caseyquinn 23:1ca41779b8ec 174 double gpsspeed = 0.0;
caseyquinn 23:1ca41779b8ec 175 double gpslatitude = 0.0;
caseyquinn 23:1ca41779b8ec 176 double gpslongitude = 0.0;
caseyquinn 23:1ca41779b8ec 177 float gpsaltitude = 0.0;
caseyquinn 23:1ca41779b8ec 178 char gpslat = 'W';
caseyquinn 23:1ca41779b8ec 179 char gpslon = 'N';
caseyquinn 12:5b4f3245606a 180
caseyquinn 12:5b4f3245606a 181
caseyquinn 12:5b4f3245606a 182 float home_lat = 40.580508;
caseyquinn 12:5b4f3245606a 183 float home_lon = -105.081823;
caseyquinn 12:5b4f3245606a 184 float work_lat = 40.594062; //40.569136;
caseyquinn 12:5b4f3245606a 185 float work_lon = -105.075683; //-105.081966;
caseyquinn 12:5b4f3245606a 186 int location = 0;
caseyquinn 12:5b4f3245606a 187
caseyquinn 12:5b4f3245606a 188 float homeDistance = 99999;
caseyquinn 12:5b4f3245606a 189 float workDistance = 99999;
caseyquinn 12:5b4f3245606a 190
jelord 3:122bfc998c4c 191 //*************************************************//
jelord 3:122bfc998c4c 192
jelord 2:88fcbfadec6a 193 void sendData();
caseyquinn 11:aa21628a9b15 194
caseyquinn 11:aa21628a9b15 195
caseyquinn 11:aa21628a9b15 196 void pc_recv(){
caseyquinn 11:aa21628a9b15 197 while(pc.readable()){
caseyquinn 11:aa21628a9b15 198 pc.getc();
caseyquinn 11:aa21628a9b15 199 }
caseyquinn 11:aa21628a9b15 200 }
caseyquinn 11:aa21628a9b15 201
jelord 0:2cb2b2ea316f 202 static uint8_t rx_buf[20];
jelord 0:2cb2b2ea316f 203 static uint8_t rx_len=0;
jelord 1:9fbb5b665068 204 static int haltBLE = 1;
jelord 1:9fbb5b665068 205 static int transmissionValue = 0;
jelord 2:88fcbfadec6a 206 uint8_t writeData[20] = {0,};
jelord 2:88fcbfadec6a 207 static uint8_t dataLength = 0;
jelord 3:122bfc998c4c 208 static int runReady = 0;
jelord 3:122bfc998c4c 209 static uint8_t startAndEndTime[12] = {0,};
caseyquinn 5:c3252e5d45ca 210
caseyquinn 9:8646fd501832 211 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 212 //BLE Functions
caseyquinn 9:8646fd501832 213 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 214
caseyquinn 9:8646fd501832 215 void uartMicro(){
caseyquinn 25:fbf7d44e7da4 216
jelord 3:122bfc998c4c 217 if(runReady!=1){
jelord 3:122bfc998c4c 218 haltBLE = 2;
jelord 3:122bfc998c4c 219 while(microChannel.readable()){
jelord 3:122bfc998c4c 220 rx_buf[rx_len++] = microChannel.getc();
jelord 2:88fcbfadec6a 221
jelord 3:122bfc998c4c 222 //Code block to verify what is being transmitted. To function correctly, all data must terminate with \0 or \n
jelord 3:122bfc998c4c 223 if(transmissionValue==0){
jelord 3:122bfc998c4c 224
caseyquinn 4:5d004fd997d5 225 if (rx_buf[0] == 0x01)transmissionValue = 1; //rtc
jelord 3:122bfc998c4c 226 else if(rx_buf[0] == 0x02)transmissionValue = 2; //sample start and end times
jelord 3:122bfc998c4c 227 else if(rx_buf[0] == 0x03)transmissionValue = 3; //sample name
jelord 3:122bfc998c4c 228 else if(rx_buf[0] == 0x04)transmissionValue = 4; //Send Data Check
jelord 3:122bfc998c4c 229
jelord 3:122bfc998c4c 230 else if(rx_buf[0] == 0x05)transmissionValue = 5; //log interval
jelord 3:122bfc998c4c 231 else if(rx_buf[0] == 0x06)transmissionValue = 6; //Flow Rate
jelord 3:122bfc998c4c 232 else if(rx_buf[0] == 0x07)transmissionValue = 7; //Serial Number
jelord 3:122bfc998c4c 233 else if(rx_buf[0] == 0x08)transmissionValue = 8; //Run Enable
caseyquinn 25:fbf7d44e7da4 234 else if(rx_buf[0] == 0x0A)transmissionValue = 10; //GPS Coordinates
caseyquinn 25:fbf7d44e7da4 235 //else if(rx_buf[0] == 0x30)RGB_LED.set_led(1,0,0);
jelord 3:122bfc998c4c 236 else transmissionValue = 100; //Not useful data
jelord 3:122bfc998c4c 237 }
jelord 3:122bfc998c4c 238
jelord 3:122bfc998c4c 239 if(rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n' || rx_buf[rx_len-1] == 0xff){
jelord 3:122bfc998c4c 240 if((transmissionValue == 1 || transmissionValue == 2 || transmissionValue == 3 || transmissionValue == 4 || transmissionValue == 5 ||
caseyquinn 25:fbf7d44e7da4 241 transmissionValue == 6 || transmissionValue == 7 || transmissionValue ==10) && rx_buf[rx_len-1] != 0xff)
jelord 3:122bfc998c4c 242 {}else{
caseyquinn 21:bb10efc5bf57 243 if(transmissionValue == 4 ) sendData();
jelord 3:122bfc998c4c 244 if(transmissionValue == 8){
jelord 3:122bfc998c4c 245 runReady = 1;
jelord 3:122bfc998c4c 246 microChannel.attach(NULL,microChannel.RxIrq);
jelord 3:122bfc998c4c 247 }
jelord 3:122bfc998c4c 248 haltBLE = 1;
jelord 3:122bfc998c4c 249 transmissionValue = 0;
jelord 3:122bfc998c4c 250 dataLength = 0;
caseyquinn 25:fbf7d44e7da4 251 //if(fileWrite == 1){
caseyquinn 25:fbf7d44e7da4 252 //FILE *fp = fopen(gpsConfigFilename, "a");
caseyquinn 25:fbf7d44e7da4 253 //fprintf(fp,"HELLO");
caseyquinn 25:fbf7d44e7da4 254 //fclose(fp);
caseyquinn 25:fbf7d44e7da4 255 //free(fp);
caseyquinn 25:fbf7d44e7da4 256 //fileWrite=0;
caseyquinn 25:fbf7d44e7da4 257 //}
jelord 3:122bfc998c4c 258 }
jelord 2:88fcbfadec6a 259 }
jelord 1:9fbb5b665068 260 }
caseyquinn 12:5b4f3245606a 261
jelord 3:122bfc998c4c 262 if(haltBLE!=1){
jelord 2:88fcbfadec6a 263
jelord 3:122bfc998c4c 264 if((transmissionValue!=100) && (dataLength!= 0)) writeData[dataLength-1] = rx_buf[0];
jelord 3:122bfc998c4c 265
jelord 3:122bfc998c4c 266 if(transmissionValue ==100){
caseyquinn 10:06fbb1c9e3bd 267 pc.putc(rx_buf[0]);
jelord 2:88fcbfadec6a 268
jelord 3:122bfc998c4c 269 }else if(transmissionValue ==1){ //process and store RTC values
jelord 3:122bfc998c4c 270
caseyquinn 7:29b01d5812ee 271 //if(dataLength==6)RTC_UPAS.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);//sets chronodot RTC
caseyquinn 7:29b01d5812ee 272 if(dataLength==6){
caseyquinn 17:3e6dda6e6335 273 RTC_UPAS.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);//sets chronodot RTC
caseyquinn 12:5b4f3245606a 274 ///////////////////////
caseyquinn 7:29b01d5812ee 275 //sets ST RTC
caseyquinn 12:5b4f3245606a 276 //////////////////////
caseyquinn 7:29b01d5812ee 277 STtime.tm_sec = writeData[0]; // 0-59
caseyquinn 7:29b01d5812ee 278 STtime.tm_min = writeData[1]; // 0-59
caseyquinn 7:29b01d5812ee 279 STtime.tm_hour = writeData[2]; // 0-23
caseyquinn 7:29b01d5812ee 280 STtime.tm_mday = writeData[3]; // 1-31
caseyquinn 7:29b01d5812ee 281 STtime.tm_mon = writeData[4]-1; // 0-11
caseyquinn 7:29b01d5812ee 282 STtime.tm_year = 100+writeData[5]; // year since 1900 (116 = 2016)
caseyquinn 7:29b01d5812ee 283 time_t STseconds = mktime(&STtime);
caseyquinn 12:5b4f3245606a 284 set_time(STseconds); // Set RTC time
caseyquinn 7:29b01d5812ee 285 }
jelord 3:122bfc998c4c 286
caseyquinn 12:5b4f3245606a 287 }
caseyquinn 14:7cdb643da356 288 else if(transmissionValue ==2){ //process and store sample start/end
jelord 3:122bfc998c4c 289 if(dataLength ==12)E2PROM.write(0x00015, writeData, 12);
jelord 3:122bfc998c4c 290
jelord 3:122bfc998c4c 291 }else if(transmissionValue ==3){ //process and store sample name
jelord 3:122bfc998c4c 292 if(dataLength ==8)E2PROM.write(0x00001,writeData,8);
jelord 3:122bfc998c4c 293
jelord 3:122bfc998c4c 294 }else if(transmissionValue ==5){ //process and store Log Interval
jelord 3:122bfc998c4c 295 if(dataLength ==1)E2PROM.write(0x00014,writeData,1);
jelord 2:88fcbfadec6a 296
jelord 3:122bfc998c4c 297 }else if(transmissionValue ==6){ //process and store Flow Rate
jelord 3:122bfc998c4c 298 if(dataLength ==4)E2PROM.write(0x00010,writeData,4);
jelord 3:122bfc998c4c 299
jelord 3:122bfc998c4c 300 }else if(transmissionValue ==7){ //process and store Serial Number
jelord 3:122bfc998c4c 301 if(dataLength ==2)E2PROM.write(0x00034,writeData,2);
caseyquinn 25:fbf7d44e7da4 302 }else if (transmissionValue == 10){
caseyquinn 25:fbf7d44e7da4 303 if(dataLength == 16)E2PROM.write(0x00050,writeData,16);
jelord 3:122bfc998c4c 304 }
caseyquinn 25:fbf7d44e7da4 305
jelord 3:122bfc998c4c 306 dataLength++;
jelord 1:9fbb5b665068 307 }
jelord 3:122bfc998c4c 308
jelord 3:122bfc998c4c 309 rx_len = 0;
jelord 3:122bfc998c4c 310 }else{
jelord 3:122bfc998c4c 311 while(microChannel.readable())
jelord 3:122bfc998c4c 312 uint8_t extract = microChannel.getc();
jelord 3:122bfc998c4c 313 }
jelord 2:88fcbfadec6a 314
caseyquinn 12:5b4f3245606a 315
jelord 2:88fcbfadec6a 316 }
caseyquinn 14:7cdb643da356 317
jelord 2:88fcbfadec6a 318 void sendData(){
jelord 2:88fcbfadec6a 319
caseyquinn 21:bb10efc5bf57 320 uint8_t sampleTimePassValues[13] = {0x01,0x00,0x00,0x0A,0x01,0x01,0x10,0x00,0x00,0x0A,0x01,0x01,0x10};
caseyquinn 21:bb10efc5bf57 321 uint8_t subjectLabelOriginal[9] = {0x02,0x52,0x45,0x53,0x45,0x54,0x5F,0x5F,0x5f};
caseyquinn 21:bb10efc5bf57 322 uint8_t dataLogOriginal[2] = {0x03,0x0A,};
caseyquinn 21:bb10efc5bf57 323 uint8_t flowRateOriginal[5] = {0x04,0x00,0x00,0x80,0x3F};
caseyquinn 25:fbf7d44e7da4 324 uint8_t latLongSchoolOriginal[17] = {0x0A,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F};
caseyquinn 25:fbf7d44e7da4 325 // Latitude School EEPROM = 0x50-0x53
caseyquinn 25:fbf7d44e7da4 326 // Longitude School EEPROM = 0x54-0x57
caseyquinn 25:fbf7d44e7da4 327 // Latitude Home EEPROM = 0x58-0x5B
caseyquinn 25:fbf7d44e7da4 328 // Longitude Home EEPROM = 0x5C-0x5F
caseyquinn 25:fbf7d44e7da4 329 uint8_t NEW_EEPROM_CHECK[1] = {0,}; //THIS IS USED TO ENSURE COOPERATION WITH MOBILE APPS
caseyquinn 25:fbf7d44e7da4 330
caseyquinn 25:fbf7d44e7da4 331 //NEW EEPROM Check bit = 0x75
caseyquinn 25:fbf7d44e7da4 332 E2PROM.read(0x00075,NEW_EEPROM_CHECK,1);
caseyquinn 25:fbf7d44e7da4 333
caseyquinn 25:fbf7d44e7da4 334 if(NEW_EEPROM_CHECK[0] == 0x0A){
caseyquinn 25:fbf7d44e7da4 335 E2PROM.read(0x00015, sampleTimePassValues+1, 12);
caseyquinn 25:fbf7d44e7da4 336 E2PROM.read(0x00001, subjectLabelOriginal+1,8);
caseyquinn 25:fbf7d44e7da4 337 E2PROM.read(0x00014,dataLogOriginal+1,1);
caseyquinn 25:fbf7d44e7da4 338 E2PROM.read(0x00010,flowRateOriginal+1,4);
caseyquinn 25:fbf7d44e7da4 339 E2PROM.read(0x00050,latLongSchoolOriginal+1,16);
caseyquinn 25:fbf7d44e7da4 340 }else{
caseyquinn 25:fbf7d44e7da4 341 NEW_EEPROM_CHECK[0] = 0x0A;
caseyquinn 25:fbf7d44e7da4 342 E2PROM.write(0x00075,NEW_EEPROM_CHECK,1);
caseyquinn 25:fbf7d44e7da4 343 E2PROM.write(0x00015, sampleTimePassValues+1, 12);
caseyquinn 25:fbf7d44e7da4 344 E2PROM.write(0x00001, subjectLabelOriginal+1,8);
caseyquinn 25:fbf7d44e7da4 345 E2PROM.write(0x00014,dataLogOriginal+1,1);
caseyquinn 25:fbf7d44e7da4 346 E2PROM.write(0x00010,flowRateOriginal+1,4);
caseyquinn 25:fbf7d44e7da4 347 E2PROM.write(0x00050,latLongSchoolOriginal+1,16);
caseyquinn 25:fbf7d44e7da4 348 }
caseyquinn 21:bb10efc5bf57 349
jelord 2:88fcbfadec6a 350
jelord 2:88fcbfadec6a 351 for(int i=0; i<13; i++){
jelord 2:88fcbfadec6a 352 microChannel.putc(sampleTimePassValues[i]);
jelord 2:88fcbfadec6a 353 }
jelord 2:88fcbfadec6a 354 wait(.25);
jelord 2:88fcbfadec6a 355
jelord 2:88fcbfadec6a 356 for(int i=0; i<9; i++){
jelord 2:88fcbfadec6a 357 microChannel.putc(subjectLabelOriginal[i]);
jelord 2:88fcbfadec6a 358 }
jelord 2:88fcbfadec6a 359 wait(.25);
jelord 2:88fcbfadec6a 360
jelord 2:88fcbfadec6a 361 for(int i=0; i<2; i++){
jelord 2:88fcbfadec6a 362 microChannel.putc(dataLogOriginal[i]);
jelord 2:88fcbfadec6a 363 }
jelord 2:88fcbfadec6a 364 wait(.25);
jelord 2:88fcbfadec6a 365
jelord 2:88fcbfadec6a 366 for(int i=0; i<5; i++){
jelord 2:88fcbfadec6a 367 microChannel.putc(flowRateOriginal[i]);
caseyquinn 25:fbf7d44e7da4 368 }
caseyquinn 25:fbf7d44e7da4 369 wait(.25);
caseyquinn 25:fbf7d44e7da4 370
caseyquinn 25:fbf7d44e7da4 371 for(int i=0;i<17;i++){
caseyquinn 25:fbf7d44e7da4 372 microChannel.putc(latLongSchoolOriginal[i]);
jelord 2:88fcbfadec6a 373 }
jelord 0:2cb2b2ea316f 374
jelord 2:88fcbfadec6a 375
caseyquinn 25:fbf7d44e7da4 376 }
caseyquinn 14:7cdb643da356 377
caseyquinn 12:5b4f3245606a 378 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 379 // GPS: Degree-minute format to decimal-degrees
caseyquinn 12:5b4f3245606a 380 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 381 double convertDegMinToDecDeg (float degMin)
caseyquinn 12:5b4f3245606a 382 {
caseyquinn 12:5b4f3245606a 383 double min = 0.0;
caseyquinn 12:5b4f3245606a 384 double decDeg = 0.0;
caseyquinn 12:5b4f3245606a 385
caseyquinn 12:5b4f3245606a 386 //get the minutes, fmod() requires double
caseyquinn 12:5b4f3245606a 387 min = fmod((double)degMin, 100.0);
caseyquinn 12:5b4f3245606a 388
caseyquinn 12:5b4f3245606a 389 //rebuild coordinates in decimal degrees
caseyquinn 12:5b4f3245606a 390 degMin = (int) ( degMin / 100 );
caseyquinn 12:5b4f3245606a 391 decDeg = degMin + ( min / 60 );
caseyquinn 12:5b4f3245606a 392
caseyquinn 12:5b4f3245606a 393 return decDeg;
caseyquinn 12:5b4f3245606a 394 }
caseyquinn 12:5b4f3245606a 395
caseyquinn 12:5b4f3245606a 396 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 397 // GPS: Calculate distance from target location
caseyquinn 12:5b4f3245606a 398 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 399 double GPSdistanceCalc (float tlat, float tlon)
caseyquinn 12:5b4f3245606a 400 {
caseyquinn 12:5b4f3245606a 401
caseyquinn 12:5b4f3245606a 402
caseyquinn 12:5b4f3245606a 403
caseyquinn 12:5b4f3245606a 404 float tlatrad, flatrad;
caseyquinn 12:5b4f3245606a 405 float sdlong, cdlong;
caseyquinn 12:5b4f3245606a 406 float sflat, cflat;
caseyquinn 12:5b4f3245606a 407 float stlat, ctlat;
caseyquinn 12:5b4f3245606a 408 float delta, denom;
caseyquinn 12:5b4f3245606a 409
caseyquinn 12:5b4f3245606a 410 double distance;
caseyquinn 12:5b4f3245606a 411 delta = (flon-tlon)*0.0174532925;
caseyquinn 12:5b4f3245606a 412 sdlong = sin(delta);
caseyquinn 12:5b4f3245606a 413 cdlong = cos(delta);
caseyquinn 12:5b4f3245606a 414 flatrad = (flat)*0.0174532925;
caseyquinn 12:5b4f3245606a 415 tlatrad = (tlat)*0.0174532925;
caseyquinn 12:5b4f3245606a 416 sflat = sin(flatrad);
caseyquinn 12:5b4f3245606a 417 cflat = cos(flatrad);
caseyquinn 12:5b4f3245606a 418 stlat = sin(tlatrad);
caseyquinn 12:5b4f3245606a 419 ctlat = cos(tlatrad);
caseyquinn 12:5b4f3245606a 420 delta = (cflat * stlat) - (sflat * ctlat * cdlong);
caseyquinn 12:5b4f3245606a 421 delta = pow(delta,2);
caseyquinn 12:5b4f3245606a 422 delta += pow(ctlat * sdlong,2);
caseyquinn 12:5b4f3245606a 423 delta = sqrt(delta);
caseyquinn 12:5b4f3245606a 424 denom = (sflat * stlat) + (cflat * ctlat * cdlong);
caseyquinn 12:5b4f3245606a 425 delta = atan2(delta, denom);
caseyquinn 12:5b4f3245606a 426 distance = delta * 6372795;
caseyquinn 12:5b4f3245606a 427 return distance;
caseyquinn 12:5b4f3245606a 428 }
caseyquinn 12:5b4f3245606a 429
caseyquinn 5:c3252e5d45ca 430
caseyquinn 9:8646fd501832 431 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 432 //Shutdown Function
caseyquinn 9:8646fd501832 433 //////////////////////////////////////////////////////////////
jelord 3:122bfc998c4c 434 void check_stop() // this checks if it's time to stop and shutdown
jelord 3:122bfc998c4c 435 {
caseyquinn 9:8646fd501832 436 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 9:8646fd501832 437 //UPDATE THIS TO WORK WITH ST RTC INSTEAD
caseyquinn 9:8646fd501832 438 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 17:3e6dda6e6335 439
jelord 3:122bfc998c4c 440 if(RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
jelord 3:122bfc998c4c 441 pbKill = 0; // this is were we shut everything down
caseyquinn 4:5d004fd997d5 442 //pc.printf("If you're reading this something has gone very wrong.");
jelord 3:122bfc998c4c 443 }
caseyquinn 17:3e6dda6e6335 444
jelord 3:122bfc998c4c 445 }
caseyquinn 5:c3252e5d45ca 446
caseyquinn 9:8646fd501832 447 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 448 //SD Logging Function
caseyquinn 9:8646fd501832 449 //////////////////////////////////////////////////////////////
jelord 3:122bfc998c4c 450 void log_data()
jelord 3:122bfc998c4c 451 {
caseyquinn 14:7cdb643da356 452
caseyquinn 25:fbf7d44e7da4 453
caseyquinn 23:1ca41779b8ec 454
caseyquinn 7:29b01d5812ee 455 time_t seconds = time(NULL);
caseyquinn 7:29b01d5812ee 456 strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
caseyquinn 13:455601f62aad 457
caseyquinn 17:3e6dda6e6335 458 RTC_UPAS.get_time();
caseyquinn 25:fbf7d44e7da4 459
caseyquinn 25:fbf7d44e7da4 460
caseyquinn 25:fbf7d44e7da4 461
caseyquinn 7:29b01d5812ee 462 press = bmesensor.getPressure();
caseyquinn 7:29b01d5812ee 463 temp = bmesensor.getTemperature()-5.0;
caseyquinn 7:29b01d5812ee 464 rh = bmesensor.getHumidity();
caseyquinn 7:29b01d5812ee 465 uv = lightsensor.getUV();
caseyquinn 14:7cdb643da356 466 movementsensor.getACCEL();
caseyquinn 14:7cdb643da356 467 movementsensor.getCOMPASS();
caseyquinn 14:7cdb643da356 468 compass = movementsensor.getCOMPASS_HEADING();
caseyquinn 14:7cdb643da356 469 accel_x = movementsensor.AccelData.x;
caseyquinn 14:7cdb643da356 470 accel_y = movementsensor.AccelData.y;
caseyquinn 14:7cdb643da356 471 accel_z = movementsensor.AccelData.z;
caseyquinn 14:7cdb643da356 472 accel_comp = pow(accel_x,(float)2)+pow(accel_y,(float)2)+pow(accel_z,(float)2)-1.0;
caseyquinn 14:7cdb643da356 473 mag_x = movementsensor.MagData.x;
caseyquinn 14:7cdb643da356 474 mag_y = movementsensor.MagData.y;
caseyquinn 14:7cdb643da356 475 mag_z = movementsensor.MagData.z;
caseyquinn 25:fbf7d44e7da4 476 vInReadingLast = vInReading;
caseyquinn 25:fbf7d44e7da4 477 vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0
caseyquinn 25:fbf7d44e7da4 478
caseyquinn 25:fbf7d44e7da4 479 if(vInReading > 5950 && amps > 8191) {
caseyquinn 25:fbf7d44e7da4 480 pumps = 0;
caseyquinn 25:fbf7d44e7da4 481 wait(1);
caseyquinn 25:fbf7d44e7da4 482 } else if(pumps == 0 && amps < 8191) {
caseyquinn 25:fbf7d44e7da4 483 pumps = 1;
caseyquinn 25:fbf7d44e7da4 484 }
caseyquinn 25:fbf7d44e7da4 485
caseyquinn 25:fbf7d44e7da4 486 amps = gasG.getAmps();
caseyquinn 25:fbf7d44e7da4 487 bVolt = gasG.getVolts();
caseyquinn 25:fbf7d44e7da4 488 bFuel = gasG.getCharge();
caseyquinn 25:fbf7d44e7da4 489
caseyquinn 14:7cdb643da356 490
caseyquinn 25:fbf7d44e7da4 491 if(pumps == 1){
caseyquinn 25:fbf7d44e7da4 492 omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 25:fbf7d44e7da4 493 omronVolt = (omronReading*4.096)/(32768*2);
caseyquinn 25:fbf7d44e7da4 494
caseyquinn 25:fbf7d44e7da4 495 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 25:fbf7d44e7da4 496 massflow = calibrations.omronMFMin;
caseyquinn 25:fbf7d44e7da4 497 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 25:fbf7d44e7da4 498 massflow = calibrations.omronMFMax;
caseyquinn 25:fbf7d44e7da4 499 } else {
caseyquinn 25:fbf7d44e7da4 500 massflow = calibrations.MF4*pow(omronVolt,(float)4)+calibrations.MF3*pow(omronVolt,(float)3)+calibrations.MF2*pow(omronVolt,(float)2)+calibrations.MF1*omronVolt+calibrations.MF0;
caseyquinn 25:fbf7d44e7da4 501 }
caseyquinn 25:fbf7d44e7da4 502
caseyquinn 25:fbf7d44e7da4 503 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 25:fbf7d44e7da4 504 volflow = massflow/atmoRho;
caseyquinn 25:fbf7d44e7da4 505 sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
caseyquinn 25:fbf7d44e7da4 506 deltaVflow = volflow-volflowSet;
caseyquinn 25:fbf7d44e7da4 507 massflowSet = volflowSet*atmoRho;
caseyquinn 25:fbf7d44e7da4 508 deltaMflow = massflow-massflowSet;
caseyquinn 25:fbf7d44e7da4 509
caseyquinn 25:fbf7d44e7da4 510 vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0
caseyquinn 25:fbf7d44e7da4 511 omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3
caseyquinn 14:7cdb643da356 512 }
caseyquinn 14:7cdb643da356 513
caseyquinn 23:1ca41779b8ec 514 //if(gpsEN ==1){
caseyquinn 25:fbf7d44e7da4 515 /*
caseyquinn 23:1ca41779b8ec 516 if(gpsFix){
caseyquinn 23:1ca41779b8ec 517 RGB_LED.set_led(1,1,1);
caseyquinn 23:1ca41779b8ec 518 }else{
caseyquinn 23:1ca41779b8ec 519 RGB_LED.set_led(1,0,0);
caseyquinn 23:1ca41779b8ec 520 }
caseyquinn 25:fbf7d44e7da4 521 */
caseyquinn 23:1ca41779b8ec 522 gpsFix = gps.read(1);
caseyquinn 21:bb10efc5bf57 523 //RGB_LED.set_led(1,1,0);
caseyquinn 12:5b4f3245606a 524 gpsspeed = gps.speed;
caseyquinn 12:5b4f3245606a 525 gpssatellites = gps.satellites;
caseyquinn 12:5b4f3245606a 526 gpslatitude = gps.lat;
caseyquinn 12:5b4f3245606a 527 // gpslat = 'N'; //gps.lat; need to fix this (if statement?)
caseyquinn 12:5b4f3245606a 528 gpslongitude = gps.lon;
caseyquinn 12:5b4f3245606a 529 // gpslon = 'W'; //gps.lon; need to fix this (if statement?)
caseyquinn 12:5b4f3245606a 530 gpsaltitude = gps.altitude;
caseyquinn 12:5b4f3245606a 531
caseyquinn 21:bb10efc5bf57 532 /*
caseyquinn 16:577cb22cec99 533 if (abs(gpslatitude) > 0 && abs(gpslongitude) > 0) {
caseyquinn 12:5b4f3245606a 534
caseyquinn 12:5b4f3245606a 535 if(gpslat == 'S')
caseyquinn 12:5b4f3245606a 536 {
caseyquinn 12:5b4f3245606a 537 flat = convertDegMinToDecDeg (gpslatitude) * -1;
caseyquinn 12:5b4f3245606a 538 }
caseyquinn 12:5b4f3245606a 539 else
caseyquinn 12:5b4f3245606a 540 {
caseyquinn 12:5b4f3245606a 541 flat = convertDegMinToDecDeg (gpslatitude);
caseyquinn 12:5b4f3245606a 542 }
caseyquinn 12:5b4f3245606a 543
caseyquinn 12:5b4f3245606a 544 if(gpslon == 'W')
caseyquinn 12:5b4f3245606a 545 {
caseyquinn 12:5b4f3245606a 546 flon = convertDegMinToDecDeg (gpslongitude) * -1;
caseyquinn 12:5b4f3245606a 547 }
caseyquinn 12:5b4f3245606a 548 else
caseyquinn 12:5b4f3245606a 549 {
caseyquinn 12:5b4f3245606a 550 flon = convertDegMinToDecDeg (gpslongitude);
caseyquinn 12:5b4f3245606a 551 }
caseyquinn 12:5b4f3245606a 552
caseyquinn 12:5b4f3245606a 553 workDistance = GPSdistanceCalc (work_lat, work_lon);
caseyquinn 12:5b4f3245606a 554 homeDistance = GPSdistanceCalc (home_lat, home_lon);
caseyquinn 12:5b4f3245606a 555 }
caseyquinn 12:5b4f3245606a 556
caseyquinn 12:5b4f3245606a 557 if (homeDistance == 99999 && workDistance == 99999) {
caseyquinn 12:5b4f3245606a 558 // digitalWrite (work_yellow_led, HIGH);
caseyquinn 12:5b4f3245606a 559 // digitalWrite (home_green_led, HIGH);
caseyquinn 12:5b4f3245606a 560 // digitalWrite (travel_red_led, HIGH);
caseyquinn 12:5b4f3245606a 561 location = 0;
caseyquinn 12:5b4f3245606a 562 }
caseyquinn 12:5b4f3245606a 563
caseyquinn 12:5b4f3245606a 564 else if (workDistance < 30) {
caseyquinn 12:5b4f3245606a 565 // digitalWrite (work_yellow_led, HIGH);
caseyquinn 12:5b4f3245606a 566 // digitalWrite (home_green_led, LOW);
caseyquinn 12:5b4f3245606a 567 // digitalWrite (travel_red_led, LOW);
caseyquinn 12:5b4f3245606a 568 location = 1;
caseyquinn 12:5b4f3245606a 569 }
caseyquinn 12:5b4f3245606a 570
caseyquinn 12:5b4f3245606a 571 else if (homeDistance < 20) {
caseyquinn 12:5b4f3245606a 572 // digitalWrite (work_yellow_led, LOW);
caseyquinn 12:5b4f3245606a 573 // digitalWrite (home_green_led, HIGH);
caseyquinn 12:5b4f3245606a 574 // digitalWrite (travel_red_led, LOW);
caseyquinn 12:5b4f3245606a 575 location = 2;
caseyquinn 12:5b4f3245606a 576 }
caseyquinn 12:5b4f3245606a 577
caseyquinn 12:5b4f3245606a 578 else {
caseyquinn 12:5b4f3245606a 579 // digitalWrite (work_yellow_led, LOW);
caseyquinn 12:5b4f3245606a 580 // digitalWrite (home_green_led, LOW);
caseyquinn 12:5b4f3245606a 581 // digitalWrite (travel_red_led, HIGH);
caseyquinn 12:5b4f3245606a 582 location = 3;
caseyquinn 12:5b4f3245606a 583 }
caseyquinn 21:bb10efc5bf57 584
caseyquinn 23:1ca41779b8ec 585
caseyquinn 17:3e6dda6e6335 586 }
caseyquinn 23:1ca41779b8ec 587 */
caseyquinn 21:bb10efc5bf57 588
caseyquinn 7:29b01d5812ee 589 FILE *fp = fopen(filename, "a");
caseyquinn 21:bb10efc5bf57 590 fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,",RTC_UPAS.year, RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds);
caseyquinn 7:29b01d5812ee 591 fprintf(fp, "%s,", timestr);
caseyquinn 7:29b01d5812ee 592 fprintf(fp, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho);
caseyquinn 7:29b01d5812ee 593 fprintf(fp, "%1.3f,%5.1f,%1.1f,%1.1f,%1.1f,%1.1f,", volflow, sampledVol, accel_x, accel_y, accel_z, accel_comp);
caseyquinn 7:29b01d5812ee 594 fprintf(fp, "%.1f,%.1f,%.1f,%.3f,%.3f,%.3f,%.1f,", angle_x,angle_y,angle_z,mag_x, mag_y, mag_z,compass);
caseyquinn 25:fbf7d44e7da4 595 fprintf(fp, "%d,%d,%d,%d,%d,%d," ,uv,omronReading, vInReading, vBlowerReading, omronDiff,amps);
caseyquinn 25:fbf7d44e7da4 596 fprintf(fp, "%d,%d,%d,%1.3f,%1.3f,", bVolt, bFuel,digital_pot_set, deltaMflow, deltaVflow);
caseyquinn 25:fbf7d44e7da4 597 fprintf(fp, "%f,%f,%06d,%06d,%f,%d,%f,%d,%d\r\n", gpslatitude, gpslongitude, (long)gps.date, (long)gps.utc, gpsspeed, gpssatellites, gpsaltitude, gpsFix, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
caseyquinn 7:29b01d5812ee 598 fclose(fp);
caseyquinn 7:29b01d5812ee 599 free(fp);
caseyquinn 25:fbf7d44e7da4 600
caseyquinn 25:fbf7d44e7da4 601
caseyquinn 25:fbf7d44e7da4 602 if(bVolt > 1750 && amps > 8191) {
caseyquinn 25:fbf7d44e7da4 603 RGB_LED.set_led(0,1,0);
caseyquinn 25:fbf7d44e7da4 604 } else if(amps > 8191 && (RTC_UPAS.hour >=20 || bVolt < 1500)) {
caseyquinn 25:fbf7d44e7da4 605 if(ledOn) {
caseyquinn 25:fbf7d44e7da4 606 RGB_LED.set_led(0,0,0);
caseyquinn 25:fbf7d44e7da4 607 ledOn = 0;
caseyquinn 25:fbf7d44e7da4 608 } else {
caseyquinn 25:fbf7d44e7da4 609 RGB_LED.set_led(1,0,0);
caseyquinn 25:fbf7d44e7da4 610 ledOn = 1;
caseyquinn 25:fbf7d44e7da4 611 }
caseyquinn 25:fbf7d44e7da4 612 } else {
caseyquinn 25:fbf7d44e7da4 613 RGB_LED.set_led(0,0,0);
caseyquinn 25:fbf7d44e7da4 614 }
caseyquinn 14:7cdb643da356 615
caseyquinn 12:5b4f3245606a 616
caseyquinn 25:fbf7d44e7da4 617
caseyquinn 25:fbf7d44e7da4 618 //pc.printf("%s,", timestr);
caseyquinn 12:5b4f3245606a 619
jelord 3:122bfc998c4c 620
jelord 3:122bfc998c4c 621 }
caseyquinn 8:c4a8f9b67cee 622
caseyquinn 9:8646fd501832 623 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 624 //Flow Control Function
caseyquinn 9:8646fd501832 625 //////////////////////////////////////////////////////////////
caseyquinn 8:c4a8f9b67cee 626 void flowControl()
caseyquinn 8:c4a8f9b67cee 627 {
caseyquinn 25:fbf7d44e7da4 628
caseyquinn 25:fbf7d44e7da4 629 //RGB_LED.set_led(0,1,0);
caseyquinn 8:c4a8f9b67cee 630 omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 8:c4a8f9b67cee 631 omronVolt = (omronReading*4.096)/(32768*2);
caseyquinn 8:c4a8f9b67cee 632
caseyquinn 8:c4a8f9b67cee 633 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 8:c4a8f9b67cee 634 massflow = calibrations.omronMFMin;
caseyquinn 8:c4a8f9b67cee 635 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 8:c4a8f9b67cee 636 massflow = calibrations.omronMFMax;
caseyquinn 8:c4a8f9b67cee 637 } else {
caseyquinn 8:c4a8f9b67cee 638 massflow = calibrations.MF4*pow(omronVolt,(float)4)+calibrations.MF3*pow(omronVolt,(float)3)+calibrations.MF2*pow(omronVolt,(float)2)+calibrations.MF1*omronVolt+calibrations.MF0;
caseyquinn 8:c4a8f9b67cee 639 }
caseyquinn 8:c4a8f9b67cee 640
caseyquinn 8:c4a8f9b67cee 641 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 8:c4a8f9b67cee 642 volflow = massflow/atmoRho;
caseyquinn 8:c4a8f9b67cee 643 sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
caseyquinn 8:c4a8f9b67cee 644 deltaVflow = volflow-volflowSet;
caseyquinn 8:c4a8f9b67cee 645 massflowSet = volflowSet*atmoRho;
caseyquinn 8:c4a8f9b67cee 646 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 647
caseyquinn 8:c4a8f9b67cee 648 if(abs(deltaMflow)>.025) {
caseyquinn 8:c4a8f9b67cee 649 digital_pot_change = (int)(gainFlow*deltaMflow);
caseyquinn 8:c4a8f9b67cee 650
caseyquinn 8:c4a8f9b67cee 651
caseyquinn 12:5b4f3245606a 652 if(abs(digital_pot_change)>=10) {
caseyquinn 12:5b4f3245606a 653 digital_pot_set = (int)(digital_pot_set+ (int)(1*deltaMflow));
caseyquinn 25:fbf7d44e7da4 654 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 655 } else {
caseyquinn 8:c4a8f9b67cee 656 digital_pot_set = (digital_pot_set+ digital_pot_change);
caseyquinn 25:fbf7d44e7da4 657 //RGB_LED.set_led(1,1,0);
caseyquinn 8:c4a8f9b67cee 658 }
caseyquinn 8:c4a8f9b67cee 659
caseyquinn 12:5b4f3245606a 660 if(digital_pot_set>=digitalpotMax) {
caseyquinn 12:5b4f3245606a 661 digital_pot_set = digitalpotMax;
caseyquinn 25:fbf7d44e7da4 662 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 663 } else if(digital_pot_set<=digitalpotMin) {
caseyquinn 12:5b4f3245606a 664 digital_pot_set = digitalpotMin;
caseyquinn 25:fbf7d44e7da4 665 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 666 }
caseyquinn 8:c4a8f9b67cee 667
caseyquinn 8:c4a8f9b67cee 668 DigPot.writeRegister(digital_pot_set);
caseyquinn 12:5b4f3245606a 669
caseyquinn 8:c4a8f9b67cee 670 } else {
caseyquinn 25:fbf7d44e7da4 671 //RGB_LED.set_led(0,1,0);
caseyquinn 8:c4a8f9b67cee 672 }
caseyquinn 12:5b4f3245606a 673
caseyquinn 25:fbf7d44e7da4 674
caseyquinn 8:c4a8f9b67cee 675 }
caseyquinn 9:8646fd501832 676 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 677 //Main Function
caseyquinn 9:8646fd501832 678 //////////////////////////////////////////////////////////////
jelord 1:9fbb5b665068 679 int main(){
caseyquinn 23:1ca41779b8ec 680
caseyquinn 23:1ca41779b8ec 681 RGB_LED.set_led(0,0,1);
caseyquinn 14:7cdb643da356 682
caseyquinn 7:29b01d5812ee 683
caseyquinn 25:fbf7d44e7da4 684 /*
caseyquinn 16:577cb22cec99 685 motor1.getFault();
caseyquinn 23:1ca41779b8ec 686 wait(1);
caseyquinn 16:577cb22cec99 687 motor2.getFault();
caseyquinn 23:1ca41779b8ec 688 wait(1);
caseyquinn 16:577cb22cec99 689 motor3.getFault();
caseyquinn 23:1ca41779b8ec 690 wait(1);
caseyquinn 16:577cb22cec99 691 motor4.getFault();
caseyquinn 23:1ca41779b8ec 692 wait(1);
caseyquinn 13:455601f62aad 693
caseyquinn 23:1ca41779b8ec 694 motor1.drive(254); //closed = 253, open = 254
caseyquinn 25:fbf7d44e7da4 695 motor2.drive(253); //closed = 253, open = 254
caseyquinn 25:fbf7d44e7da4 696 motor3.drive(253); //closed = 253, open = 254
caseyquinn 25:fbf7d44e7da4 697 motor4.drive(253); //closed = 253, open = 254
caseyquinn 23:1ca41779b8ec 698
caseyquinn 23:1ca41779b8ec 699
caseyquinn 25:fbf7d44e7da4 700 wait(1);
caseyquinn 23:1ca41779b8ec 701 motor1.stop();
caseyquinn 23:1ca41779b8ec 702 motor2.stop();
caseyquinn 23:1ca41779b8ec 703 motor3.stop();
caseyquinn 23:1ca41779b8ec 704 motor4.stop();
caseyquinn 24:e274a34492cf 705 */
caseyquinn 23:1ca41779b8ec 706
caseyquinn 23:1ca41779b8ec 707
caseyquinn 23:1ca41779b8ec 708 gpsEN = 1;
caseyquinn 23:1ca41779b8ec 709 wait(1);
caseyquinn 23:1ca41779b8ec 710 BT_SW = 1;
caseyquinn 23:1ca41779b8ec 711 wait(1);
caseyquinn 23:1ca41779b8ec 712 BT_IRST = 1;
caseyquinn 23:1ca41779b8ec 713 wait(1);
caseyquinn 23:1ca41779b8ec 714
caseyquinn 12:5b4f3245606a 715
caseyquinn 10:06fbb1c9e3bd 716 pc.baud(115200); // set what you want here depending on your terminal program speed
caseyquinn 10:06fbb1c9e3bd 717 pc.printf("\f\n\r-------------Startup-------------\n\r");
jelord 1:9fbb5b665068 718 wait(0.5);
caseyquinn 5:c3252e5d45ca 719
caseyquinn 12:5b4f3245606a 720
jelord 20:30a00cd18e21 721 uint8_t serialNumberAndType[6] = {0x50,0x53,};
caseyquinn 13:455601f62aad 722
jelord 3:122bfc998c4c 723 E2PROM.read(0x00034,serialNumberAndType+2,2);
caseyquinn 4:5d004fd997d5 724
jelord 3:122bfc998c4c 725 int tempSerialNum = serialNumberAndType[2]+serialNumberAndType[3];
jelord 3:122bfc998c4c 726 int serialNumDigits[4];
jelord 3:122bfc998c4c 727 serialNumDigits[0] = tempSerialNum / 1000 % 10;
jelord 3:122bfc998c4c 728 serialNumDigits[1] = tempSerialNum / 100 % 10;
jelord 3:122bfc998c4c 729 serialNumDigits[2] = tempSerialNum / 10 % 10;
jelord 3:122bfc998c4c 730 serialNumDigits[3] = tempSerialNum % 10;
jelord 3:122bfc998c4c 731
jelord 3:122bfc998c4c 732 serialNumberAndType[2] = serialNumDigits[0]+48;
jelord 3:122bfc998c4c 733 serialNumberAndType[3] = serialNumDigits[1]+48;
jelord 3:122bfc998c4c 734 serialNumberAndType[4] = serialNumDigits[2]+48;
jelord 3:122bfc998c4c 735 serialNumberAndType[5] = serialNumDigits[3]+48;
caseyquinn 12:5b4f3245606a 736
caseyquinn 5:c3252e5d45ca 737 RGB_LED.set_led(0,1,0);
caseyquinn 13:455601f62aad 738
caseyquinn 10:06fbb1c9e3bd 739 pc.attach(pc_recv);
jelord 1:9fbb5b665068 740 microChannel.attach(uartMicro,microChannel.RxIrq);
jelord 3:122bfc998c4c 741 microChannel.baud(115200);
jelord 1:9fbb5b665068 742 microChannel.printf("$$$");
jelord 3:122bfc998c4c 743 wait(0.5);
jelord 3:122bfc998c4c 744 microChannel.printf("SN,");
jelord 3:122bfc998c4c 745 for(int i=0;i<6;i++)microChannel.putc(serialNumberAndType[i]);
jelord 3:122bfc998c4c 746 microChannel.printf("\r");
jelord 3:122bfc998c4c 747 wait(0.5);
jelord 1:9fbb5b665068 748 microChannel.printf("A\r");
jelord 3:122bfc998c4c 749 wait(0.5);
jelord 2:88fcbfadec6a 750 microChannel.printf("---\r");
jelord 3:122bfc998c4c 751 wait(0.5);
jelord 2:88fcbfadec6a 752
caseyquinn 18:41ef98db0423 753 RGB_LED.set_led(1,1,1);
jelord 3:122bfc998c4c 754 while(runReady!=1) {
jelord 3:122bfc998c4c 755 wait(1);
caseyquinn 11:aa21628a9b15 756 pc.printf("Waiting for BLE instruction");
jelord 3:122bfc998c4c 757
jelord 3:122bfc998c4c 758 }
jelord 3:122bfc998c4c 759
caseyquinn 14:7cdb643da356 760
jelord 3:122bfc998c4c 761 E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
jelord 3:122bfc998c4c 762 RGB_LED.set_led(0,1,0);
caseyquinn 14:7cdb643da356 763
caseyquinn 7:29b01d5812ee 764 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 7:29b01d5812ee 765 //UPDATE THIS TO WORK WITH ST RTC INSTEAD
caseyquinn 7:29b01d5812ee 766 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 14:7cdb643da356 767
caseyquinn 21:bb10efc5bf57 768 BT_SW = 0;
caseyquinn 21:bb10efc5bf57 769 wait(1);
caseyquinn 21:bb10efc5bf57 770 BT_IRST = 0;
caseyquinn 21:bb10efc5bf57 771 wait(1);
caseyquinn 21:bb10efc5bf57 772
jelord 3:122bfc998c4c 773 while(!RTC_UPAS.compare(startAndEndTime[0], startAndEndTime[1], startAndEndTime[2], startAndEndTime[3], startAndEndTime[4], startAndEndTime[5])) { // this while waits for the start time by looping until the start time
jelord 3:122bfc998c4c 774 wait(0.5);
jelord 3:122bfc998c4c 775
jelord 3:122bfc998c4c 776 RTC_UPAS.get_time();
jelord 3:122bfc998c4c 777
jelord 3:122bfc998c4c 778 }
caseyquinn 14:7cdb643da356 779
caseyquinn 14:7cdb643da356 780
jelord 3:122bfc998c4c 781
jelord 3:122bfc998c4c 782 //Get the proper serial number
jelord 3:122bfc998c4c 783 uint8_t serialBytes[2] = {0,};
jelord 3:122bfc998c4c 784 E2PROM.read(0x00034, serialBytes,2);
jelord 3:122bfc998c4c 785 serial_num = ((uint16_t)serialBytes[1] << 8) | serialBytes[0];
jelord 3:122bfc998c4c 786 calibrations.initialize(serial_num);
jelord 3:122bfc998c4c 787
jelord 3:122bfc998c4c 788 uint8_t logByte[1] = {0,};
jelord 3:122bfc998c4c 789 E2PROM.read(0x00014,logByte,1);
jelord 3:122bfc998c4c 790 logInerval = logByte[0];
jelord 3:122bfc998c4c 791
jelord 3:122bfc998c4c 792 //Use the flow rate value stored in eeprom
jelord 3:122bfc998c4c 793 uint8_t flowRateBytes[4] = {0,};
jelord 3:122bfc998c4c 794 E2PROM.read(0x00010,flowRateBytes,4);
jelord 3:122bfc998c4c 795 E2PROM.byteToFloat(flowRateBytes, &volflowSet);
jelord 3:122bfc998c4c 796
jelord 3:122bfc998c4c 797 if(volflowSet<=1.0) {
jelord 3:122bfc998c4c 798 gainFlow = 100;
jelord 3:122bfc998c4c 799 } else if(volflowSet>=2.0) {
jelord 3:122bfc998c4c 800 gainFlow = 25;
jelord 3:122bfc998c4c 801 } else {
jelord 3:122bfc998c4c 802 gainFlow = 25;
jelord 0:2cb2b2ea316f 803 }
caseyquinn 17:3e6dda6e6335 804
jelord 3:122bfc998c4c 805 RGB_LED.set_led(1,0,0);
jelord 3:122bfc998c4c 806 press = bmesensor.getPressure();
jelord 3:122bfc998c4c 807 temp = bmesensor.getTemperature();
jelord 3:122bfc998c4c 808 rh = bmesensor.getHumidity();
jelord 3:122bfc998c4c 809
jelord 3:122bfc998c4c 810 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));
jelord 3:122bfc998c4c 811 massflowSet = volflowSet*atmoRho;
jelord 3:122bfc998c4c 812
jelord 3:122bfc998c4c 813 DigPot.writeRegister(digital_pot_setpoint);
jelord 3:122bfc998c4c 814 wait(1);
caseyquinn 25:fbf7d44e7da4 815 pumps = 1;
caseyquinn 25:fbf7d44e7da4 816 //pumpOn = 1;
jelord 3:122bfc998c4c 817
jelord 3:122bfc998c4c 818 uint8_t subjectLabelOriginal[8] = {0,};
caseyquinn 4:5d004fd997d5 819 E2PROM.read(0x00001, subjectLabelOriginal,8);
caseyquinn 12:5b4f3245606a 820
caseyquinn 13:455601f62aad 821
caseyquinn 12:5b4f3245606a 822
caseyquinn 21:bb10efc5bf57 823 time_t seconds = time(NULL);
caseyquinn 4:5d004fd997d5 824 strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
caseyquinn 13:455601f62aad 825
caseyquinn 25:fbf7d44e7da4 826 sprintf(filename, "/sd/AMAS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
caseyquinn 22:baa5a077d908 827 //sprintf(filename, "/sd/UPAS_TboardtestLog_%s_%c%c%c%c%c%c%c%c.txt", timestr,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
caseyquinn 25:fbf7d44e7da4 828 //sprintf(filename, "/sd/UPAS_TboardtestLog_%s.txt", timestr);
jelord 3:122bfc998c4c 829 FILE *fp = fopen(filename, "w");
jelord 3:122bfc998c4c 830 fclose(fp);
jelord 3:122bfc998c4c 831
caseyquinn 25:fbf7d44e7da4 832
caseyquinn 12:5b4f3245606a 833 omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 12:5b4f3245606a 834 omronVolt = (omronReading*4.096)/(32768*2);
caseyquinn 12:5b4f3245606a 835 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 12:5b4f3245606a 836 massflow = calibrations.omronMFMin;
caseyquinn 12:5b4f3245606a 837 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 12:5b4f3245606a 838 massflow = calibrations.omronMFMax;
caseyquinn 12:5b4f3245606a 839 } else {
caseyquinn 12:5b4f3245606a 840 massflow = calibrations.MF4*pow(omronVolt,(float)4)+calibrations.MF3*pow(omronVolt,(float)3)+calibrations.MF2*pow(omronVolt,(float)2)+calibrations.MF1*omronVolt+calibrations.MF0;
caseyquinn 12:5b4f3245606a 841 }
caseyquinn 12:5b4f3245606a 842 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 843 digital_pot_set = digital_pot_setpoint;
caseyquinn 12:5b4f3245606a 844 wait(5);
caseyquinn 12:5b4f3245606a 845
caseyquinn 12:5b4f3245606a 846 //---------------------------------------------------------------------------------------------//
caseyquinn 12:5b4f3245606a 847 //Sets the flow withen +-1.5% of the desired flow rate based on mass flow
caseyquinn 25:fbf7d44e7da4 848 /*
caseyquinn 12:5b4f3245606a 849 while(abs(deltaMflow)>.025) {
caseyquinn 12:5b4f3245606a 850
caseyquinn 12:5b4f3245606a 851 omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 12:5b4f3245606a 852 omronVolt = (omronReading*4.096)/(32768*2);
caseyquinn 12:5b4f3245606a 853 //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
caseyquinn 12:5b4f3245606a 854 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 12:5b4f3245606a 855 massflow = calibrations.omronMFMin;
caseyquinn 12:5b4f3245606a 856 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 12:5b4f3245606a 857 massflow = calibrations.omronMFMax;
caseyquinn 12:5b4f3245606a 858 } else {
caseyquinn 12:5b4f3245606a 859 massflow = calibrations.MF4*pow(omronVolt,(float)4)+calibrations.MF3*pow(omronVolt,(float)3)+calibrations.MF2*pow(omronVolt,(float)2)+calibrations.MF1*omronVolt+calibrations.MF0;
caseyquinn 12:5b4f3245606a 860 }
caseyquinn 12:5b4f3245606a 861
caseyquinn 12:5b4f3245606a 862 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 12:5b4f3245606a 863 volflow = massflow/atmoRho;
caseyquinn 12:5b4f3245606a 864 massflowSet = volflowSet*atmoRho;
caseyquinn 12:5b4f3245606a 865 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 866
caseyquinn 12:5b4f3245606a 867 digital_pot_set = (int)(digital_pot_set+(int)((gainFlow*deltaMflow)));
caseyquinn 12:5b4f3245606a 868 if(digital_pot_set>=digitalpotMax) {
caseyquinn 12:5b4f3245606a 869 digital_pot_set = digitalpotMax;
caseyquinn 12:5b4f3245606a 870 } else if(digital_pot_set<=digitalpotMin) {
caseyquinn 12:5b4f3245606a 871 digital_pot_set = digitalpotMin;
caseyquinn 12:5b4f3245606a 872 }
caseyquinn 12:5b4f3245606a 873
caseyquinn 12:5b4f3245606a 874 wait(2);
caseyquinn 12:5b4f3245606a 875 DigPot.writeRegister(digital_pot_set);
caseyquinn 12:5b4f3245606a 876 pc.printf("%d,\r\n", digital_pot_set);
caseyquinn 12:5b4f3245606a 877 wait(1);
caseyquinn 12:5b4f3245606a 878
caseyquinn 12:5b4f3245606a 879
caseyquinn 12:5b4f3245606a 880 }
caseyquinn 25:fbf7d44e7da4 881
caseyquinn 14:7cdb643da356 882 */
jelord 3:122bfc998c4c 883 sampledVol = 0.0;
jelord 3:122bfc998c4c 884 RGB_LED.set_led(0,1,0);
caseyquinn 25:fbf7d44e7da4 885 wait(1);
caseyquinn 25:fbf7d44e7da4 886 RGB_LED.set_led(0,0,0);
caseyquinn 14:7cdb643da356 887
caseyquinn 18:41ef98db0423 888 stop.attach(&check_stop, 9); // check if we should shut down every 9 number seconds, starting after the start.
caseyquinn 14:7cdb643da356 889 logg.attach(&log_data, logInerval);
caseyquinn 25:fbf7d44e7da4 890 //flowCtl.attach(&flowControl, 3);
caseyquinn 7:29b01d5812ee 891
jelord 3:122bfc998c4c 892
jelord 3:122bfc998c4c 893 //** end of initalization **//
jelord 3:122bfc998c4c 894 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 895 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 896 // Main Control Loop
jelord 3:122bfc998c4c 897
caseyquinn 7:29b01d5812ee 898 while (1) {
caseyquinn 7:29b01d5812ee 899 // Do other things...
caseyquinn 14:7cdb643da356 900 /*
caseyquinn 18:41ef98db0423 901 pumps = 1;
caseyquinn 13:455601f62aad 902 wait(5);
caseyquinn 18:41ef98db0423 903 pumps = 0;
caseyquinn 13:455601f62aad 904 wait(5);
caseyquinn 14:7cdb643da356 905 */
caseyquinn 7:29b01d5812ee 906 }
caseyquinn 7:29b01d5812ee 907
caseyquinn 8:c4a8f9b67cee 908
caseyquinn 4:5d004fd997d5 909
jelord 3:122bfc998c4c 910
jelord 0:2cb2b2ea316f 911 }