all working version 2.0

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_powerfunction by scott kelleher

Committer:
caseyquinn
Date:
Sun May 08 00:50:41 2016 +0000
Revision:
50:5f1b378e4f64
Parent:
49:055231b09a7e
Child:
51:feba3e2aa1a0
Removed the duplicate sampledVol calculation from the flowcontrol callback to ensure no double counting of flow. Also made flowcontrol only available when the pumps are on.

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 43:05aa1fb68946 14 //#include "DRV8830.h"
jelord 39:f1ebecfb32ca 15 #include "Tb_SD_Reader.h"
caseyquinn 14:7cdb643da356 16
jelord 0:2cb2b2ea316f 17
caseyquinn 12:5b4f3245606a 18 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 19 //General Items
caseyquinn 12:5b4f3245606a 20 /////////////////////////////////////////////
caseyquinn 14:7cdb643da356 21 I2C i2c(PB_9, PB_8);//(D14, D15); SDA,SCL
caseyquinn 12:5b4f3245606a 22 Serial pc(USBTX, USBRX);
caseyquinn 18:41ef98db0423 23 DigitalOut pumps(PA_9, 0);//(D8, 0);
caseyquinn 12:5b4f3245606a 24 DigitalOut pbKill(PC_12, 1); // Digital input pin that conncect to the LTC2950 battery charger used to shutdown the UPAS
caseyquinn 13:455601f62aad 25 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 26 MCP40D17 DigPot(&i2c);
caseyquinn 12:5b4f3245606a 27 BME280 bmesensor(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 28 NCP5623BMUTBG RGB_LED(PB_9, PB_8);//(D14, D15);
caseyquinn 17:3e6dda6e6335 29 CronoDot RTC_UPAS(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 30 EEPROM E2PROM(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 31 Calibration calibrations(1); //Default serial/calibration if there are no values for the selected option
caseyquinn 14:7cdb643da356 32
caseyquinn 12:5b4f3245606a 33
caseyquinn 12:5b4f3245606a 34 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 35 //RN4677 BT/BLE Module
caseyquinn 12:5b4f3245606a 36 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 37 Serial microChannel(PB_10, PB_11); // tx, rx
caseyquinn 4:5d004fd997d5 38 DigitalOut bleRTS(PB_14, 0);
caseyquinn 4:5d004fd997d5 39 DigitalOut bleCTS(PB_13, 0);
caseyquinn 12:5b4f3245606a 40 DigitalOut BT_IRST(PC_8, 0);
caseyquinn 12:5b4f3245606a 41 DigitalOut BT_SW(PA_12, 0);
caseyquinn 17:3e6dda6e6335 42
caseyquinn 13:455601f62aad 43
caseyquinn 12:5b4f3245606a 44 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 45 //Analog to Digital Converter
caseyquinn 12:5b4f3245606a 46 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 47 Adafruit_ADS1115 ads(&i2c);
caseyquinn 12:5b4f3245606a 48 //DigitalIn ADS_ALRT(PA_10); //Connected but currently unused. (ADS1115) http://www.ti.com/lit/ds/symlink/ads1115.pdf
caseyquinn 12:5b4f3245606a 49
caseyquinn 12:5b4f3245606a 50 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 51 //Battery Monitoring
caseyquinn 12:5b4f3245606a 52 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 53 STC3100 gasG(PB_9, PB_8);//(D14, D15); // http://www.st.com/web/en/resource/technical/document/datasheet/CD00219947.pdf
caseyquinn 28:42932d3b105d 54 InterruptIn bcs1(PC_9); //Charge complete if High. Connected but currently unused. (MCP73871) http://www.mouser.com/ds/2/268/22090a-52174.pdf
caseyquinn 28:42932d3b105d 55 InterruptIn 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 56
caseyquinn 12:5b4f3245606a 57 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 58 //Accelerometer and Magnometer
caseyquinn 12:5b4f3245606a 59 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 60 LSM303 movementsensor(PB_9, PB_8);//(D14, D15); // http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
caseyquinn 12:5b4f3245606a 61 //DigitalIn ACC_INT1(PC_7); //Connected but currently unused. (LSM303)
caseyquinn 12:5b4f3245606a 62 //DigitalIn ACC_INT2(PC_6); //Connected but currently unused. (LSM303)
caseyquinn 12:5b4f3245606a 63 //DigitalIn ACC_DRDY(PC_11); //Connected but currently unused. (LSM303)
jelord 0:2cb2b2ea316f 64
caseyquinn 12:5b4f3245606a 65 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 66 //UV and Visible Light Sensor
caseyquinn 12:5b4f3245606a 67 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 68 SI1145 lightsensor(PB_9, PB_8);//(D14, D15);
caseyquinn 12:5b4f3245606a 69 //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 70
caseyquinn 12:5b4f3245606a 71 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 72 //GPS
caseyquinn 12:5b4f3245606a 73 /////////////////////////////////////////////
caseyquinn 17:3e6dda6e6335 74 DigitalOut gpsEN(PB_15, 0);
caseyquinn 23:1ca41779b8ec 75 Max_M8 gps(PB_9, PB_8,(0x84));
caseyquinn 12:5b4f3245606a 76
caseyquinn 43:05aa1fb68946 77 /*
caseyquinn 12:5b4f3245606a 78 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 79 //Hbridge Valve Control
caseyquinn 12:5b4f3245606a 80 /////////////////////////////////////////////
caseyquinn 36:2e344db70d35 81 DRV8830 schoolF1(PB_9, PB_8, 0xC4); //Work/School Filter A HB1
caseyquinn 36:2e344db70d35 82 DRV8830 homeF2(PB_9, PB_8, 0xCA); //Home Filter B HB2
caseyquinn 36:2e344db70d35 83 DRV8830 transitF3(PB_9, PB_8, 0xCC); //Transit Filter C HB3
caseyquinn 36:2e344db70d35 84 DRV8830 blankF4(PB_9, PB_8, 0xCE); //Blank Filter D HB4
caseyquinn 28:42932d3b105d 85 DigitalIn hb1_school(PA_6);
caseyquinn 28:42932d3b105d 86 DigitalIn hb2_home(PA_7);
caseyquinn 28:42932d3b105d 87 DigitalIn hb3_transit(PA_5);
caseyquinn 28:42932d3b105d 88 DigitalIn hb4_blank(PA_4);
caseyquinn 43:05aa1fb68946 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)
jelord 39:f1ebecfb32ca 96 Tb_SD_Reader sdReader;
caseyquinn 28:42932d3b105d 97 DigitalIn sdCD(PA_11, PullUp);
jelord 39:f1ebecfb32ca 98 char fileTest[] = "test.txt";
caseyquinn 14:7cdb643da356 99
caseyquinn 12:5b4f3245606a 100 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 101 //Callbacks
caseyquinn 12:5b4f3245606a 102 /////////////////////////////////////////////
caseyquinn 9:8646fd501832 103 Ticker stop; //This is the stop callback object
caseyquinn 8:c4a8f9b67cee 104 Ticker logg; //This is the logging callback object
caseyquinn 9:8646fd501832 105 Ticker flowCtl; //This is the control loop callback object
jelord 3:122bfc998c4c 106
caseyquinn 12:5b4f3245606a 107 /////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 108 //Varible Definitions
caseyquinn 12:5b4f3245606a 109 /////////////////////////////////////////////
jelord 3:122bfc998c4c 110 uint16_t serial_num = 1; // Default serial/calibration number
jelord 3:122bfc998c4c 111 int RunReady =0;
jelord 3:122bfc998c4c 112
caseyquinn 25:fbf7d44e7da4 113 bool ledOn = 0;
caseyquinn 25:fbf7d44e7da4 114
caseyquinn 4:5d004fd997d5 115 struct tm STtime;
caseyquinn 7:29b01d5812ee 116 char timestr[32];
caseyquinn 43:05aa1fb68946 117 char yrstr[4];
caseyquinn 43:05aa1fb68946 118 char mostr[4];
caseyquinn 43:05aa1fb68946 119 char daystr[4];
caseyquinn 43:05aa1fb68946 120 char hrstr[4];
caseyquinn 43:05aa1fb68946 121 char minstr[4];
caseyquinn 43:05aa1fb68946 122 char secstr[4];
caseyquinn 43:05aa1fb68946 123
caseyquinn 43:05aa1fb68946 124 int stYr, stMo, stDay, stHr, stMin, stSec;
jelord 3:122bfc998c4c 125
caseyquinn 36:2e344db70d35 126
caseyquinn 9:8646fd501832 127 float press;
caseyquinn 9:8646fd501832 128 float temp;
caseyquinn 9:8646fd501832 129 float rh;
jelord 3:122bfc998c4c 130
caseyquinn 9:8646fd501832 131 int uv;
caseyquinn 9:8646fd501832 132 int vis;
caseyquinn 9:8646fd501832 133 int ir;
jelord 3:122bfc998c4c 134
caseyquinn 9:8646fd501832 135 float compass;
caseyquinn 9:8646fd501832 136 float accel_x;
caseyquinn 9:8646fd501832 137 float accel_y;
caseyquinn 9:8646fd501832 138 float accel_z;
caseyquinn 9:8646fd501832 139 float accel_comp;
caseyquinn 9:8646fd501832 140 float angle_x;
caseyquinn 9:8646fd501832 141 float angle_y;
caseyquinn 9:8646fd501832 142 float angle_z;
caseyquinn 9:8646fd501832 143 float mag_x;
caseyquinn 9:8646fd501832 144 float mag_y;
caseyquinn 9:8646fd501832 145 float mag_z;
jelord 3:122bfc998c4c 146
caseyquinn 9:8646fd501832 147 int vInReading;
caseyquinn 25:fbf7d44e7da4 148 int vInReadingLast;
caseyquinn 9:8646fd501832 149 int vBlowerReading;
caseyquinn 9:8646fd501832 150 int omronDiff;
caseyquinn 9:8646fd501832 151 float omronVolt; //V
caseyquinn 9:8646fd501832 152 int omronReading;
caseyquinn 9:8646fd501832 153 float atmoRho; //g/L
jelord 3:122bfc998c4c 154
caseyquinn 25:fbf7d44e7da4 155 int amps;
caseyquinn 25:fbf7d44e7da4 156 int bVolt;
caseyquinn 25:fbf7d44e7da4 157 int bFuel;
caseyquinn 25:fbf7d44e7da4 158 //bool pumpOn;
caseyquinn 9:8646fd501832 159 float massflow; //g/min
caseyquinn 9:8646fd501832 160 float volflow; //L/min
jelord 3:122bfc998c4c 161 float volflowSet = 1.0; //L/min
caseyquinn 14:7cdb643da356 162 int logInerval = 5;//seconds
jelord 3:122bfc998c4c 163 double secondsD = 0;
jelord 3:122bfc998c4c 164 double lastsecondD = 0;
caseyquinn 9:8646fd501832 165 float massflowSet;
jelord 3:122bfc998c4c 166 float deltaVflow = 0.0;
jelord 3:122bfc998c4c 167 float deltaMflow = 0.0;
caseyquinn 9:8646fd501832 168 float gainFlow;
caseyquinn 9:8646fd501832 169 float sampledVol; //L, total sampled volume
jelord 3:122bfc998c4c 170
caseyquinn 29:fd74725294d5 171 int digital_pot_setpoint = 30; //min = 0x7F, max = 0x00
caseyquinn 9:8646fd501832 172 int digital_pot_set;
caseyquinn 9:8646fd501832 173 int digital_pot_change;
jelord 3:122bfc998c4c 174 int digitalpotMax = 127;
caseyquinn 9:8646fd501832 175 int digitalpotMin = 10;
jelord 3:122bfc998c4c 176
caseyquinn 46:99d129bfdbbd 177 //int dutyUp;
caseyquinn 46:99d129bfdbbd 178 //int dutyDown;
caseyquinn 46:99d129bfdbbd 179 int dutycycleSecOn;
caseyquinn 46:99d129bfdbbd 180 int dutyCycleI;
caseyquinn 12:5b4f3245606a 181
caseyquinn 23:1ca41779b8ec 182 bool gpsFix;
caseyquinn 12:5b4f3245606a 183 uint8_t gpssatellites = 0;
caseyquinn 23:1ca41779b8ec 184 double gpsspeed = 0.0;
caseyquinn 28:42932d3b105d 185 double gpscourse = 0.0;
caseyquinn 23:1ca41779b8ec 186 double gpslatitude = 0.0;
caseyquinn 23:1ca41779b8ec 187 double gpslongitude = 0.0;
caseyquinn 23:1ca41779b8ec 188 float gpsaltitude = 0.0;
caseyquinn 12:5b4f3245606a 189
caseyquinn 26:6aa294d83af4 190 float home_lat = 40.00000; //40.580508;
caseyquinn 26:6aa294d83af4 191 float home_lon = -105.000000; //-105.081823;
caseyquinn 36:2e344db70d35 192 float home_lat2 = 40.00000; //40.580508;
caseyquinn 36:2e344db70d35 193 float home_lon2 = -105.000000; //-105.081823;
caseyquinn 26:6aa294d83af4 194 float work_lat = 40.100000; //40.594062; //40.569136;
caseyquinn 26:6aa294d83af4 195 float work_lon = -105.100000; //-105.075683; //-105.081966;
caseyquinn 12:5b4f3245606a 196 int location = 0;
caseyquinn 12:5b4f3245606a 197
caseyquinn 12:5b4f3245606a 198 float homeDistance = 99999;
caseyquinn 36:2e344db70d35 199 float home2Distance = 99999;
caseyquinn 12:5b4f3245606a 200 float workDistance = 99999;
caseyquinn 12:5b4f3245606a 201
jelord 3:122bfc998c4c 202 //*************************************************//
jelord 3:122bfc998c4c 203
jelord 2:88fcbfadec6a 204 void sendData();
jelord 39:f1ebecfb32ca 205 void Read_File(char[]);
caseyquinn 11:aa21628a9b15 206
caseyquinn 11:aa21628a9b15 207 void pc_recv(){
caseyquinn 11:aa21628a9b15 208 while(pc.readable()){
caseyquinn 11:aa21628a9b15 209 pc.getc();
caseyquinn 11:aa21628a9b15 210 }
caseyquinn 11:aa21628a9b15 211 }
caseyquinn 11:aa21628a9b15 212
jelord 0:2cb2b2ea316f 213 static uint8_t rx_buf[20];
jelord 0:2cb2b2ea316f 214 static uint8_t rx_len=0;
jelord 1:9fbb5b665068 215 static int haltBLE = 1;
jelord 1:9fbb5b665068 216 static int transmissionValue = 0;
jelord 2:88fcbfadec6a 217 uint8_t writeData[20] = {0,};
jelord 2:88fcbfadec6a 218 static uint8_t dataLength = 0;
jelord 3:122bfc998c4c 219 static int runReady = 0;
jelord 3:122bfc998c4c 220 static uint8_t startAndEndTime[12] = {0,};
jelord 39:f1ebecfb32ca 221 static uint8_t fileTransferLock = 0;
jelord 49:055231b09a7e 222 static uint8_t transmissionStopLock = 1;
caseyquinn 5:c3252e5d45ca 223
caseyquinn 9:8646fd501832 224 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 225 //BLE Functions
caseyquinn 9:8646fd501832 226 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 227
caseyquinn 9:8646fd501832 228 void uartMicro(){
caseyquinn 25:fbf7d44e7da4 229
jelord 3:122bfc998c4c 230 if(runReady!=1){
jelord 3:122bfc998c4c 231 haltBLE = 2;
jelord 3:122bfc998c4c 232 while(microChannel.readable()){
jelord 3:122bfc998c4c 233 rx_buf[rx_len++] = microChannel.getc();
jelord 2:88fcbfadec6a 234
jelord 3:122bfc998c4c 235 //Code block to verify what is being transmitted. To function correctly, all data must terminate with \0 or \n
jelord 3:122bfc998c4c 236 if(transmissionValue==0){
jelord 3:122bfc998c4c 237
caseyquinn 4:5d004fd997d5 238 if (rx_buf[0] == 0x01)transmissionValue = 1; //rtc
jelord 3:122bfc998c4c 239 else if(rx_buf[0] == 0x02)transmissionValue = 2; //sample start and end times
jelord 3:122bfc998c4c 240 else if(rx_buf[0] == 0x03)transmissionValue = 3; //sample name
jelord 3:122bfc998c4c 241 else if(rx_buf[0] == 0x04)transmissionValue = 4; //Send Data Check
jelord 3:122bfc998c4c 242
jelord 3:122bfc998c4c 243 else if(rx_buf[0] == 0x05)transmissionValue = 5; //log interval
jelord 3:122bfc998c4c 244 else if(rx_buf[0] == 0x06)transmissionValue = 6; //Flow Rate
jelord 3:122bfc998c4c 245 else if(rx_buf[0] == 0x07)transmissionValue = 7; //Serial Number
jelord 3:122bfc998c4c 246 else if(rx_buf[0] == 0x08)transmissionValue = 8; //Run Enable
caseyquinn 25:fbf7d44e7da4 247 else if(rx_buf[0] == 0x0A)transmissionValue = 10; //GPS Coordinates
jelord 33:03d0e7f5ef0a 248 else if(rx_buf[0] == 0x0B)transmissionValue = 11; //GPS Coordinates (Second Set)
jelord 38:65ae9771f1e3 249 else if(rx_buf[0] == 0x0C)transmissionValue = 12; //Cartridge ID
jelord 38:65ae9771f1e3 250 else if(rx_buf[0] == 0x0D)transmissionValue = 13; //Duty Cycle
jelord 39:f1ebecfb32ca 251 else if (rx_buf[0] == 0x0F)transmissionValue = 15; //BT TRANSFER TEST
caseyquinn 25:fbf7d44e7da4 252 //else if(rx_buf[0] == 0x30)RGB_LED.set_led(1,0,0);
jelord 3:122bfc998c4c 253 else transmissionValue = 100; //Not useful data
jelord 3:122bfc998c4c 254 }
jelord 3:122bfc998c4c 255
jelord 38:65ae9771f1e3 256 if(rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n' || rx_buf[rx_len-1] == 0xff || transmissionValue==15){
jelord 3:122bfc998c4c 257 if((transmissionValue == 1 || transmissionValue == 2 || transmissionValue == 3 || transmissionValue == 4 || transmissionValue == 5 ||
jelord 38:65ae9771f1e3 258 transmissionValue == 6 || transmissionValue == 7 || transmissionValue ==10 || transmissionValue ==11 || transmissionValue ==12) && rx_buf[rx_len-1] != 0xff)
jelord 3:122bfc998c4c 259 {}else{
caseyquinn 21:bb10efc5bf57 260 if(transmissionValue == 4 ) sendData();
jelord 39:f1ebecfb32ca 261 if(transmissionValue == 15){
jelord 39:f1ebecfb32ca 262 if(fileTransferLock==0){
jelord 39:f1ebecfb32ca 263 fileTransferLock=1;
jelord 39:f1ebecfb32ca 264 Read_File(fileTest);
jelord 39:f1ebecfb32ca 265 fileTransferLock=0;
jelord 39:f1ebecfb32ca 266 RGB_LED.set_led(1,1,1);
jelord 39:f1ebecfb32ca 267 }
jelord 49:055231b09a7e 268 }
jelord 49:055231b09a7e 269 if((transmissionValue == 10 && dataLength<17)||(transmissionValue == 11 && dataLength<9))transmissionStopLock=0;
jelord 49:055231b09a7e 270 else transmissionStopLock=1;
jelord 3:122bfc998c4c 271 if(transmissionValue == 8){
jelord 3:122bfc998c4c 272 runReady = 1;
jelord 3:122bfc998c4c 273 microChannel.attach(NULL,microChannel.RxIrq);
jelord 49:055231b09a7e 274 }
jelord 49:055231b09a7e 275 if(transmissionStopLock==1){
jelord 49:055231b09a7e 276 haltBLE = 1;
jelord 49:055231b09a7e 277 transmissionValue = 0;
jelord 49:055231b09a7e 278 dataLength = 0;
jelord 49:055231b09a7e 279 }
jelord 3:122bfc998c4c 280 }
jelord 2:88fcbfadec6a 281 }
jelord 1:9fbb5b665068 282 }
caseyquinn 12:5b4f3245606a 283
jelord 3:122bfc998c4c 284 if(haltBLE!=1){
jelord 2:88fcbfadec6a 285
jelord 3:122bfc998c4c 286 if((transmissionValue!=100) && (dataLength!= 0)) writeData[dataLength-1] = rx_buf[0];
jelord 3:122bfc998c4c 287
jelord 3:122bfc998c4c 288 if(transmissionValue ==100){
caseyquinn 10:06fbb1c9e3bd 289 pc.putc(rx_buf[0]);
jelord 2:88fcbfadec6a 290
jelord 3:122bfc998c4c 291 }else if(transmissionValue ==1){ //process and store RTC values
jelord 3:122bfc998c4c 292
caseyquinn 7:29b01d5812ee 293 //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 294 if(dataLength==6){
caseyquinn 17:3e6dda6e6335 295 RTC_UPAS.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);//sets chronodot RTC
caseyquinn 12:5b4f3245606a 296 ///////////////////////
caseyquinn 7:29b01d5812ee 297 //sets ST RTC
caseyquinn 12:5b4f3245606a 298 //////////////////////
caseyquinn 7:29b01d5812ee 299 STtime.tm_sec = writeData[0]; // 0-59
caseyquinn 7:29b01d5812ee 300 STtime.tm_min = writeData[1]; // 0-59
caseyquinn 7:29b01d5812ee 301 STtime.tm_hour = writeData[2]; // 0-23
caseyquinn 7:29b01d5812ee 302 STtime.tm_mday = writeData[3]; // 1-31
caseyquinn 7:29b01d5812ee 303 STtime.tm_mon = writeData[4]-1; // 0-11
caseyquinn 7:29b01d5812ee 304 STtime.tm_year = 100+writeData[5]; // year since 1900 (116 = 2016)
caseyquinn 7:29b01d5812ee 305 time_t STseconds = mktime(&STtime);
caseyquinn 12:5b4f3245606a 306 set_time(STseconds); // Set RTC time
caseyquinn 7:29b01d5812ee 307 }
jelord 3:122bfc998c4c 308
caseyquinn 12:5b4f3245606a 309 }
caseyquinn 14:7cdb643da356 310 else if(transmissionValue ==2){ //process and store sample start/end
jelord 3:122bfc998c4c 311 if(dataLength ==12)E2PROM.write(0x00015, writeData, 12);
jelord 3:122bfc998c4c 312
jelord 3:122bfc998c4c 313 }else if(transmissionValue ==3){ //process and store sample name
jelord 39:f1ebecfb32ca 314 if(dataLength ==15)E2PROM.write(0x00001,writeData,15);
jelord 3:122bfc998c4c 315
jelord 3:122bfc998c4c 316 }else if(transmissionValue ==5){ //process and store Log Interval
jelord 3:122bfc998c4c 317 if(dataLength ==1)E2PROM.write(0x00014,writeData,1);
jelord 2:88fcbfadec6a 318
jelord 3:122bfc998c4c 319 }else if(transmissionValue ==6){ //process and store Flow Rate
jelord 3:122bfc998c4c 320 if(dataLength ==4)E2PROM.write(0x00010,writeData,4);
jelord 3:122bfc998c4c 321
jelord 3:122bfc998c4c 322 }else if(transmissionValue ==7){ //process and store Serial Number
jelord 3:122bfc998c4c 323 if(dataLength ==2)E2PROM.write(0x00034,writeData,2);
caseyquinn 25:fbf7d44e7da4 324 }else if (transmissionValue == 10){
caseyquinn 25:fbf7d44e7da4 325 if(dataLength == 16)E2PROM.write(0x00050,writeData,16);
jelord 33:03d0e7f5ef0a 326 }else if (transmissionValue == 11){
jelord 33:03d0e7f5ef0a 327 if(dataLength == 8)E2PROM.write(0x00060,writeData,8);
jelord 38:65ae9771f1e3 328 }else if (transmissionValue == 12){
jelord 38:65ae9771f1e3 329 if(dataLength == 3)E2PROM.write(0x00070,writeData,3);
jelord 38:65ae9771f1e3 330 }else if (transmissionValue == 13){
jelord 38:65ae9771f1e3 331 if(dataLength == 3)E2PROM.write(0x00076,writeData,3);
jelord 3:122bfc998c4c 332 }
caseyquinn 25:fbf7d44e7da4 333
jelord 3:122bfc998c4c 334 dataLength++;
jelord 1:9fbb5b665068 335 }
jelord 3:122bfc998c4c 336
jelord 3:122bfc998c4c 337 rx_len = 0;
jelord 3:122bfc998c4c 338 }else{
jelord 3:122bfc998c4c 339 while(microChannel.readable())
jelord 3:122bfc998c4c 340 uint8_t extract = microChannel.getc();
jelord 3:122bfc998c4c 341 }
jelord 2:88fcbfadec6a 342
caseyquinn 12:5b4f3245606a 343
jelord 2:88fcbfadec6a 344 }
caseyquinn 14:7cdb643da356 345
jelord 2:88fcbfadec6a 346 void sendData(){
jelord 2:88fcbfadec6a 347
caseyquinn 27:922f53fa649c 348 //First byte is designator for the App
caseyquinn 21:bb10efc5bf57 349 uint8_t sampleTimePassValues[13] = {0x01,0x00,0x00,0x0A,0x01,0x01,0x10,0x00,0x00,0x0A,0x01,0x01,0x10};
caseyquinn 40:cac5bdffba44 350 uint8_t subjectLabelOriginal[16] = {0x02,0x52,0x45,0x53,0x45,0x54,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x0F};
caseyquinn 21:bb10efc5bf57 351 uint8_t dataLogOriginal[2] = {0x03,0x0A,};
caseyquinn 21:bb10efc5bf57 352 uint8_t flowRateOriginal[5] = {0x04,0x00,0x00,0x80,0x3F};
caseyquinn 29:fd74725294d5 353 uint8_t serialBytes[3] = {0x07,0x00,0x00};
caseyquinn 25:fbf7d44e7da4 354 uint8_t latLongSchoolOriginal[17] = {0x0A,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F};
jelord 33:03d0e7f5ef0a 355 uint8_t latLongHome2[9] = {0x0B,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F};
jelord 38:65ae9771f1e3 356 uint8_t cartridgeIDOriginal[4] = {0x0C,0x48,0x48,0x48};
jelord 38:65ae9771f1e3 357 uint8_t dutyCycleOriginal[4] = {0x0D,0x31,0x30,0x30};
caseyquinn 25:fbf7d44e7da4 358 // Latitude School EEPROM = 0x50-0x53
caseyquinn 25:fbf7d44e7da4 359 // Longitude School EEPROM = 0x54-0x57
caseyquinn 25:fbf7d44e7da4 360 // Latitude Home EEPROM = 0x58-0x5B
caseyquinn 25:fbf7d44e7da4 361 // Longitude Home EEPROM = 0x5C-0x5F
caseyquinn 25:fbf7d44e7da4 362 uint8_t NEW_EEPROM_CHECK[1] = {0,}; //THIS IS USED TO ENSURE COOPERATION WITH MOBILE APPS
jelord 33:03d0e7f5ef0a 363 uint8_t TERMINATE_BYTE[1] = {0xff,}; //used for compatibility with android app
caseyquinn 25:fbf7d44e7da4 364
caseyquinn 25:fbf7d44e7da4 365 //NEW EEPROM Check bit = 0x75
caseyquinn 25:fbf7d44e7da4 366 E2PROM.read(0x00075,NEW_EEPROM_CHECK,1);
caseyquinn 25:fbf7d44e7da4 367
jelord 39:f1ebecfb32ca 368 if(NEW_EEPROM_CHECK[0] == 0x0C){ //increment when you add a new parameter to pass to app
caseyquinn 25:fbf7d44e7da4 369 E2PROM.read(0x00015, sampleTimePassValues+1, 12);
jelord 39:f1ebecfb32ca 370 E2PROM.read(0x00001, subjectLabelOriginal+1,15);
caseyquinn 25:fbf7d44e7da4 371 E2PROM.read(0x00014,dataLogOriginal+1,1);
caseyquinn 25:fbf7d44e7da4 372 E2PROM.read(0x00010,flowRateOriginal+1,4);
caseyquinn 29:fd74725294d5 373 E2PROM.read(0x00034,serialBytes+1,2);
caseyquinn 25:fbf7d44e7da4 374 E2PROM.read(0x00050,latLongSchoolOriginal+1,16);
jelord 33:03d0e7f5ef0a 375 E2PROM.read(0x00060,latLongHome2+1,8);
jelord 38:65ae9771f1e3 376 E2PROM.read(0x00070,cartridgeIDOriginal+1,3);
jelord 38:65ae9771f1e3 377 E2PROM.read(0x00076,dutyCycleOriginal+1,3);
jelord 38:65ae9771f1e3 378
caseyquinn 25:fbf7d44e7da4 379 }else{
jelord 39:f1ebecfb32ca 380 NEW_EEPROM_CHECK[0] = 0x0C; //increment as well
caseyquinn 25:fbf7d44e7da4 381 E2PROM.write(0x00075,NEW_EEPROM_CHECK,1);
caseyquinn 25:fbf7d44e7da4 382 E2PROM.write(0x00015, sampleTimePassValues+1, 12);
jelord 39:f1ebecfb32ca 383 E2PROM.write(0x00001, subjectLabelOriginal+1,15);
caseyquinn 25:fbf7d44e7da4 384 E2PROM.write(0x00014,dataLogOriginal+1,1);
caseyquinn 25:fbf7d44e7da4 385 E2PROM.write(0x00010,flowRateOriginal+1,4);
caseyquinn 29:fd74725294d5 386 E2PROM.write(0x00034,serialBytes+1,2);
caseyquinn 25:fbf7d44e7da4 387 E2PROM.write(0x00050,latLongSchoolOriginal+1,16);
jelord 33:03d0e7f5ef0a 388 E2PROM.write(0x00060,latLongHome2+1,8);
jelord 38:65ae9771f1e3 389 E2PROM.write(0x00070,cartridgeIDOriginal+1,3);
jelord 38:65ae9771f1e3 390 E2PROM.write(0x00076,dutyCycleOriginal+1,3);
caseyquinn 25:fbf7d44e7da4 391 }
caseyquinn 21:bb10efc5bf57 392
jelord 2:88fcbfadec6a 393
jelord 2:88fcbfadec6a 394 for(int i=0; i<13; i++){
jelord 2:88fcbfadec6a 395 microChannel.putc(sampleTimePassValues[i]);
jelord 2:88fcbfadec6a 396 }
jelord 33:03d0e7f5ef0a 397 wait(.15);
jelord 2:88fcbfadec6a 398
jelord 39:f1ebecfb32ca 399 for(int i=0; i<16; i++){
jelord 2:88fcbfadec6a 400 microChannel.putc(subjectLabelOriginal[i]);
jelord 2:88fcbfadec6a 401 }
jelord 33:03d0e7f5ef0a 402 wait(.15);
jelord 2:88fcbfadec6a 403
jelord 2:88fcbfadec6a 404 for(int i=0; i<2; i++){
jelord 2:88fcbfadec6a 405 microChannel.putc(dataLogOriginal[i]);
jelord 2:88fcbfadec6a 406 }
jelord 33:03d0e7f5ef0a 407 wait(.15);
jelord 2:88fcbfadec6a 408
jelord 2:88fcbfadec6a 409 for(int i=0; i<5; i++){
jelord 2:88fcbfadec6a 410 microChannel.putc(flowRateOriginal[i]);
caseyquinn 25:fbf7d44e7da4 411 }
jelord 33:03d0e7f5ef0a 412 wait(.15);
caseyquinn 25:fbf7d44e7da4 413
caseyquinn 25:fbf7d44e7da4 414 for(int i=0;i<17;i++){
caseyquinn 25:fbf7d44e7da4 415 microChannel.putc(latLongSchoolOriginal[i]);
jelord 2:88fcbfadec6a 416 }
jelord 33:03d0e7f5ef0a 417 wait(.15);
jelord 33:03d0e7f5ef0a 418
jelord 33:03d0e7f5ef0a 419 for(int i=0;i<9;i++){
jelord 33:03d0e7f5ef0a 420 microChannel.putc(latLongHome2[i]);
jelord 33:03d0e7f5ef0a 421 }
jelord 33:03d0e7f5ef0a 422 wait(.15);
jelord 38:65ae9771f1e3 423 for(int i=0;i<4;i++){
jelord 38:65ae9771f1e3 424 microChannel.putc(cartridgeIDOriginal[i]);
jelord 38:65ae9771f1e3 425 }
jelord 38:65ae9771f1e3 426 wait(.15);
jelord 38:65ae9771f1e3 427 for(int i=0;i<4;i++){
jelord 38:65ae9771f1e3 428 microChannel.putc(dutyCycleOriginal[i]);
jelord 38:65ae9771f1e3 429 }
jelord 38:65ae9771f1e3 430 wait(.15);
jelord 33:03d0e7f5ef0a 431 microChannel.putc(TERMINATE_BYTE[0]);
jelord 0:2cb2b2ea316f 432
jelord 2:88fcbfadec6a 433
caseyquinn 25:fbf7d44e7da4 434 }
jelord 39:f1ebecfb32ca 435 void Read_File(char filename[]){
jelord 39:f1ebecfb32ca 436 char new_str[] = "/sd/XXXX0000LOG000000000000---------------.txt";
jelord 39:f1ebecfb32ca 437
jelord 39:f1ebecfb32ca 438 sprintf(new_str, "/sd/%s", filename);
jelord 39:f1ebecfb32ca 439 FILE *fp = fopen(new_str, "r");
jelord 39:f1ebecfb32ca 440 if(fp == NULL) {
jelord 39:f1ebecfb32ca 441 pc.printf("Could not open file, check disk.\r\n");
jelord 39:f1ebecfb32ca 442 while(1) {};
jelord 39:f1ebecfb32ca 443 } else {
jelord 39:f1ebecfb32ca 444 pc.printf("file opened\r\n");
jelord 39:f1ebecfb32ca 445 }
jelord 39:f1ebecfb32ca 446 unsigned char c;
jelord 39:f1ebecfb32ca 447 uint8_t sendMe[1] = {254};
jelord 39:f1ebecfb32ca 448 RGB_LED.set_led(0,1,0);
jelord 39:f1ebecfb32ca 449 //pc.printf("%s\r\n",fp.c_str());
jelord 39:f1ebecfb32ca 450 microChannel.putc(sendMe[0]);
jelord 39:f1ebecfb32ca 451 while (c != 255){ // while not end of file or forever
jelord 39:f1ebecfb32ca 452 c=fgetc(fp); // get a character/byte from the file
jelord 39:f1ebecfb32ca 453 //printf("%c",c); // and show it in hex format
jelord 39:f1ebecfb32ca 454 microChannel.putc(c);
jelord 39:f1ebecfb32ca 455 //wait(0.005);
jelord 39:f1ebecfb32ca 456 }
jelord 39:f1ebecfb32ca 457 //RGB_LED.set_led(1,0,0);
jelord 39:f1ebecfb32ca 458 printf("\r\n");
jelord 39:f1ebecfb32ca 459 fclose(fp); // close the file
jelord 39:f1ebecfb32ca 460
jelord 39:f1ebecfb32ca 461 };
caseyquinn 14:7cdb643da356 462
caseyquinn 12:5b4f3245606a 463 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 464 // GPS: Calculate distance from target location
caseyquinn 12:5b4f3245606a 465 //////////////////////////////////////////////////////////////
caseyquinn 12:5b4f3245606a 466 double GPSdistanceCalc (float tlat, float tlon)
caseyquinn 12:5b4f3245606a 467 {
caseyquinn 12:5b4f3245606a 468
caseyquinn 12:5b4f3245606a 469 float tlatrad, flatrad;
caseyquinn 12:5b4f3245606a 470 float sdlong, cdlong;
caseyquinn 12:5b4f3245606a 471 float sflat, cflat;
caseyquinn 12:5b4f3245606a 472 float stlat, ctlat;
caseyquinn 12:5b4f3245606a 473 float delta, denom;
caseyquinn 12:5b4f3245606a 474
caseyquinn 12:5b4f3245606a 475 double distance;
caseyquinn 27:922f53fa649c 476 delta = (gpslongitude-tlon)*0.0174532925;
caseyquinn 12:5b4f3245606a 477 sdlong = sin(delta);
caseyquinn 12:5b4f3245606a 478 cdlong = cos(delta);
caseyquinn 27:922f53fa649c 479 flatrad = (gpslatitude)*0.0174532925;
caseyquinn 12:5b4f3245606a 480 tlatrad = (tlat)*0.0174532925;
caseyquinn 12:5b4f3245606a 481 sflat = sin(flatrad);
caseyquinn 12:5b4f3245606a 482 cflat = cos(flatrad);
caseyquinn 12:5b4f3245606a 483 stlat = sin(tlatrad);
caseyquinn 12:5b4f3245606a 484 ctlat = cos(tlatrad);
caseyquinn 12:5b4f3245606a 485 delta = (cflat * stlat) - (sflat * ctlat * cdlong);
caseyquinn 12:5b4f3245606a 486 delta = pow(delta,2);
caseyquinn 12:5b4f3245606a 487 delta += pow(ctlat * sdlong,2);
caseyquinn 12:5b4f3245606a 488 delta = sqrt(delta);
caseyquinn 12:5b4f3245606a 489 denom = (sflat * stlat) + (cflat * ctlat * cdlong);
caseyquinn 12:5b4f3245606a 490 delta = atan2(delta, denom);
caseyquinn 12:5b4f3245606a 491 distance = delta * 6372795;
caseyquinn 12:5b4f3245606a 492 return distance;
caseyquinn 12:5b4f3245606a 493 }
caseyquinn 12:5b4f3245606a 494
caseyquinn 43:05aa1fb68946 495 //////////////////////////////////////////////////////////////
caseyquinn 45:5e0942088e31 496 //Time Comparison Function
caseyquinn 43:05aa1fb68946 497 //////////////////////////////////////////////////////////////
caseyquinn 43:05aa1fb68946 498 bool timecompare(uint8_t t_sec, uint8_t t_minutes, uint8_t t_hour, uint8_t t_date, uint8_t t_month, uint8_t t_year)
caseyquinn 43:05aa1fb68946 499 {
caseyquinn 43:05aa1fb68946 500
caseyquinn 43:05aa1fb68946 501 time_t seconds = time(NULL);
caseyquinn 43:05aa1fb68946 502 //strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
caseyquinn 43:05aa1fb68946 503
caseyquinn 43:05aa1fb68946 504 strftime(yrstr, 4, "%y", localtime(&seconds));
caseyquinn 43:05aa1fb68946 505 stYr = atoi(yrstr);
caseyquinn 43:05aa1fb68946 506
caseyquinn 43:05aa1fb68946 507 strftime(mostr, 4, "%m", localtime(&seconds));
caseyquinn 43:05aa1fb68946 508 stMo = atoi(mostr);
caseyquinn 43:05aa1fb68946 509
caseyquinn 43:05aa1fb68946 510 strftime(daystr, 4, "%d", localtime(&seconds));
caseyquinn 43:05aa1fb68946 511 stDay = atoi(daystr);
caseyquinn 43:05aa1fb68946 512
caseyquinn 43:05aa1fb68946 513 strftime(hrstr, 4, "%H", localtime(&seconds));
caseyquinn 43:05aa1fb68946 514 stHr = atoi(hrstr);
caseyquinn 43:05aa1fb68946 515
caseyquinn 43:05aa1fb68946 516 strftime(minstr, 4, "%M", localtime(&seconds));
caseyquinn 43:05aa1fb68946 517 stMin = atoi(minstr);
caseyquinn 43:05aa1fb68946 518
caseyquinn 43:05aa1fb68946 519 strftime(secstr, 4, "%S", localtime(&seconds));
caseyquinn 43:05aa1fb68946 520 stSec = atoi(secstr);
caseyquinn 43:05aa1fb68946 521
caseyquinn 43:05aa1fb68946 522 if(t_year != stYr){
caseyquinn 43:05aa1fb68946 523 return t_year < stYr;
caseyquinn 43:05aa1fb68946 524 }
caseyquinn 43:05aa1fb68946 525 if(t_month != stMo){
caseyquinn 43:05aa1fb68946 526 return t_month < stMo;
caseyquinn 43:05aa1fb68946 527 }
caseyquinn 43:05aa1fb68946 528 if(t_date != stDay){
caseyquinn 43:05aa1fb68946 529 return t_date < stDay;
caseyquinn 43:05aa1fb68946 530 }
caseyquinn 43:05aa1fb68946 531 if(t_hour != stHr){
caseyquinn 43:05aa1fb68946 532 return t_hour < stHr;
caseyquinn 43:05aa1fb68946 533 }
caseyquinn 43:05aa1fb68946 534 if(t_minutes != stMin){
caseyquinn 43:05aa1fb68946 535 return t_minutes < stMin;
caseyquinn 43:05aa1fb68946 536 }
caseyquinn 43:05aa1fb68946 537 return t_sec < stSec;
caseyquinn 43:05aa1fb68946 538
caseyquinn 43:05aa1fb68946 539 }
caseyquinn 43:05aa1fb68946 540
caseyquinn 5:c3252e5d45ca 541
caseyquinn 9:8646fd501832 542 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 543 //Shutdown Function
caseyquinn 9:8646fd501832 544 //////////////////////////////////////////////////////////////
jelord 3:122bfc998c4c 545 void check_stop() // this checks if it's time to stop and shutdown
jelord 3:122bfc998c4c 546 {
caseyquinn 17:3e6dda6e6335 547
caseyquinn 43:05aa1fb68946 548 if(timecompare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
jelord 3:122bfc998c4c 549 pbKill = 0; // this is were we shut everything down
caseyquinn 4:5d004fd997d5 550 //pc.printf("If you're reading this something has gone very wrong.");
jelord 3:122bfc998c4c 551 }
caseyquinn 17:3e6dda6e6335 552
jelord 3:122bfc998c4c 553 }
caseyquinn 5:c3252e5d45ca 554
caseyquinn 9:8646fd501832 555 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 556 //SD Logging Function
caseyquinn 9:8646fd501832 557 //////////////////////////////////////////////////////////////
jelord 3:122bfc998c4c 558 void log_data()
jelord 3:122bfc998c4c 559 {
caseyquinn 44:075fa63d5df1 560 //Get RTC time(s)
caseyquinn 28:42932d3b105d 561 ///////////////////////////
caseyquinn 43:05aa1fb68946 562 RTC_UPAS.get_time();
caseyquinn 7:29b01d5812ee 563 time_t seconds = time(NULL);
caseyquinn 42:c8ed2dc04dfe 564 strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
caseyquinn 43:05aa1fb68946 565
caseyquinn 43:05aa1fb68946 566 strftime(yrstr, 4, "%y", localtime(&seconds));
caseyquinn 43:05aa1fb68946 567 stYr = atoi(yrstr);
caseyquinn 43:05aa1fb68946 568
caseyquinn 43:05aa1fb68946 569 strftime(mostr, 4, "%m", localtime(&seconds));
caseyquinn 43:05aa1fb68946 570 stMo = atoi(mostr);
caseyquinn 43:05aa1fb68946 571
caseyquinn 43:05aa1fb68946 572 strftime(daystr, 4, "%d", localtime(&seconds));
caseyquinn 43:05aa1fb68946 573 stDay = atoi(daystr);
caseyquinn 43:05aa1fb68946 574
caseyquinn 43:05aa1fb68946 575 strftime(hrstr, 4, "%H", localtime(&seconds));
caseyquinn 43:05aa1fb68946 576 stHr = atoi(hrstr);
caseyquinn 43:05aa1fb68946 577
caseyquinn 43:05aa1fb68946 578 strftime(minstr, 4, "%M", localtime(&seconds));
caseyquinn 43:05aa1fb68946 579 stMin = atoi(minstr);
caseyquinn 43:05aa1fb68946 580
caseyquinn 43:05aa1fb68946 581 strftime(secstr, 4, "%S", localtime(&seconds));
caseyquinn 43:05aa1fb68946 582 stSec = atoi(secstr);
caseyquinn 43:05aa1fb68946 583
caseyquinn 44:075fa63d5df1 584 //pc.printf("%s,%s,%d,%s,%d,%s,%d,%s,%d,%s,%d,%s,%d\r\n", timestr,yrstr,stYr,mostr,stMo,daystr,stDay,hrstr,stHr,minstr,stMin,secstr,stSec);
caseyquinn 36:2e344db70d35 585
caseyquinn 46:99d129bfdbbd 586 /////////////////////////////
caseyquinn 46:99d129bfdbbd 587 ///Dutycycle
caseyquinn 46:99d129bfdbbd 588 ////////////////////////////
caseyquinn 46:99d129bfdbbd 589 if(stSec >= dutycycleSecOn && pumps == 1){
caseyquinn 46:99d129bfdbbd 590 pumps = 0;
caseyquinn 46:99d129bfdbbd 591 }
caseyquinn 46:99d129bfdbbd 592 else if(stSec < dutycycleSecOn && pumps == 0) {
caseyquinn 46:99d129bfdbbd 593 pumps = 1;
caseyquinn 46:99d129bfdbbd 594 }
caseyquinn 46:99d129bfdbbd 595
caseyquinn 28:42932d3b105d 596 //Get Sensor Data except GPS
caseyquinn 28:42932d3b105d 597 ////////////////////////////
caseyquinn 7:29b01d5812ee 598 press = bmesensor.getPressure();
caseyquinn 7:29b01d5812ee 599 temp = bmesensor.getTemperature()-5.0;
caseyquinn 7:29b01d5812ee 600 rh = bmesensor.getHumidity();
caseyquinn 7:29b01d5812ee 601 uv = lightsensor.getUV();
caseyquinn 14:7cdb643da356 602 movementsensor.getACCEL();
caseyquinn 14:7cdb643da356 603 movementsensor.getCOMPASS();
caseyquinn 14:7cdb643da356 604 compass = movementsensor.getCOMPASS_HEADING();
caseyquinn 14:7cdb643da356 605 accel_x = movementsensor.AccelData.x;
caseyquinn 14:7cdb643da356 606 accel_y = movementsensor.AccelData.y;
caseyquinn 14:7cdb643da356 607 accel_z = movementsensor.AccelData.z;
caseyquinn 14:7cdb643da356 608 accel_comp = pow(accel_x,(float)2)+pow(accel_y,(float)2)+pow(accel_z,(float)2)-1.0;
caseyquinn 14:7cdb643da356 609 mag_x = movementsensor.MagData.x;
caseyquinn 14:7cdb643da356 610 mag_y = movementsensor.MagData.y;
caseyquinn 14:7cdb643da356 611 mag_z = movementsensor.MagData.z;
caseyquinn 25:fbf7d44e7da4 612 vInReadingLast = vInReading;
caseyquinn 25:fbf7d44e7da4 613 vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0
caseyquinn 25:fbf7d44e7da4 614 amps = gasG.getAmps();
caseyquinn 25:fbf7d44e7da4 615 bVolt = gasG.getVolts();
caseyquinn 25:fbf7d44e7da4 616 bFuel = gasG.getCharge();
caseyquinn 35:e0bdd6389a75 617
caseyquinn 28:42932d3b105d 618 //Check for fully charged battery
caseyquinn 28:42932d3b105d 619 if(bVolt > 1750 && amps > 8191) {
caseyquinn 46:99d129bfdbbd 620 //RGB_LED.set_led(0,0,0);
caseyquinn 46:99d129bfdbbd 621 RGB_LED.set_led(0,1,0);
caseyquinn 44:075fa63d5df1 622 //Check for battery with ~2 hours left of runtime at 2lpm to remind user to plug in sampler
caseyquinn 44:075fa63d5df1 623 }else if(amps > 8191 && bVolt < 1500) {
caseyquinn 28:42932d3b105d 624 if(ledOn) {
caseyquinn 28:42932d3b105d 625 RGB_LED.set_led(0,0,0);
caseyquinn 28:42932d3b105d 626 ledOn = 0;
caseyquinn 28:42932d3b105d 627 }else {
caseyquinn 28:42932d3b105d 628 RGB_LED.set_led(1,0,0);
caseyquinn 28:42932d3b105d 629 ledOn = 1;
caseyquinn 28:42932d3b105d 630 }
caseyquinn 28:42932d3b105d 631 //No LED on when not low battery and not fully charged
caseyquinn 28:42932d3b105d 632 }else{
caseyquinn 28:42932d3b105d 633 RGB_LED.set_led(0,0,0);
caseyquinn 28:42932d3b105d 634 }
caseyquinn 28:42932d3b105d 635
caseyquinn 35:e0bdd6389a75 636
caseyquinn 28:42932d3b105d 637 // Get GPS Data
caseyquinn 28:42932d3b105d 638 //////////////////////////////
caseyquinn 28:42932d3b105d 639 //if(gpsEN ==1){
caseyquinn 28:42932d3b105d 640
caseyquinn 28:42932d3b105d 641 gpsFix = gps.read(1);
caseyquinn 28:42932d3b105d 642 gpsspeed = gps.speed;
caseyquinn 28:42932d3b105d 643 //gpscourse = gps.course;
caseyquinn 28:42932d3b105d 644 gpssatellites = gps.satellites;
caseyquinn 28:42932d3b105d 645 gpslatitude = gps.lat;
caseyquinn 28:42932d3b105d 646 gpslongitude = gps.lon;
caseyquinn 28:42932d3b105d 647 gpsaltitude = gps.altitude;
caseyquinn 43:05aa1fb68946 648 //}
caseyquinn 28:42932d3b105d 649
caseyquinn 28:42932d3b105d 650 //Check for 3.3V rail cut out and turn off pumps in this event
caseyquinn 28:42932d3b105d 651 if(vInReading > 5950 && amps > 8191) {
caseyquinn 35:e0bdd6389a75 652 pumps = 0;
caseyquinn 28:42932d3b105d 653 wait(1);
caseyquinn 28:42932d3b105d 654 //Turn pumps back on once the sampler is plugged in and charging after pumps shutoff and 3.3V rail drops out
caseyquinn 28:42932d3b105d 655 } else if(pumps == 0 && amps < 8191) {
caseyquinn 46:99d129bfdbbd 656 //pumps = 1;
caseyquinn 28:42932d3b105d 657 }
caseyquinn 28:42932d3b105d 658
caseyquinn 28:42932d3b105d 659
caseyquinn 14:7cdb643da356 660
caseyquinn 25:fbf7d44e7da4 661 if(pumps == 1){
caseyquinn 34:da333abe3476 662 omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 34:da333abe3476 663 omronVolt = (omronReading*4.096)/(32768*1);
caseyquinn 25:fbf7d44e7da4 664
caseyquinn 25:fbf7d44e7da4 665 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 25:fbf7d44e7da4 666 massflow = calibrations.omronMFMin;
caseyquinn 25:fbf7d44e7da4 667 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 25:fbf7d44e7da4 668 massflow = calibrations.omronMFMax;
caseyquinn 25:fbf7d44e7da4 669 } else {
caseyquinn 25:fbf7d44e7da4 670 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 671 }
caseyquinn 25:fbf7d44e7da4 672
caseyquinn 25:fbf7d44e7da4 673 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 674 volflow = massflow/atmoRho;
caseyquinn 25:fbf7d44e7da4 675 sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
caseyquinn 25:fbf7d44e7da4 676 deltaVflow = volflow-volflowSet;
caseyquinn 25:fbf7d44e7da4 677 massflowSet = volflowSet*atmoRho;
caseyquinn 25:fbf7d44e7da4 678 deltaMflow = massflow-massflowSet;
caseyquinn 25:fbf7d44e7da4 679
caseyquinn 25:fbf7d44e7da4 680 vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0
caseyquinn 25:fbf7d44e7da4 681 omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3
caseyquinn 50:5f1b378e4f64 682 /*
caseyquinn 50:5f1b378e4f64 683 omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 50:5f1b378e4f64 684 omronVolt = (omronReading*4.096)/(32768*1);
caseyquinn 50:5f1b378e4f64 685 vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0
caseyquinn 50:5f1b378e4f64 686 omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3
caseyquinn 50:5f1b378e4f64 687
caseyquinn 50:5f1b378e4f64 688 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 50:5f1b378e4f64 689 massflow = calibrations.omronMFMin;
caseyquinn 50:5f1b378e4f64 690 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 50:5f1b378e4f64 691 massflow = calibrations.omronMFMax;
caseyquinn 50:5f1b378e4f64 692 } else {
caseyquinn 50:5f1b378e4f64 693 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 50:5f1b378e4f64 694 }
caseyquinn 50:5f1b378e4f64 695
caseyquinn 50:5f1b378e4f64 696 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 50:5f1b378e4f64 697 volflow = massflow/atmoRho;
caseyquinn 50:5f1b378e4f64 698 sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
caseyquinn 50:5f1b378e4f64 699 deltaVflow = volflow-volflowSet;
caseyquinn 50:5f1b378e4f64 700 massflowSet = volflowSet*atmoRho;
caseyquinn 50:5f1b378e4f64 701 deltaMflow = massflow-massflowSet;
caseyquinn 50:5f1b378e4f64 702
caseyquinn 50:5f1b378e4f64 703 if(abs(deltaMflow)>.025) {
caseyquinn 50:5f1b378e4f64 704 digital_pot_change = (int)(gainFlow*deltaMflow);
caseyquinn 50:5f1b378e4f64 705
caseyquinn 50:5f1b378e4f64 706
caseyquinn 50:5f1b378e4f64 707 if(abs(digital_pot_change)>=10) {
caseyquinn 50:5f1b378e4f64 708 digital_pot_set = (int)(digital_pot_set+ (int)(1*deltaMflow));
caseyquinn 50:5f1b378e4f64 709 //RGB_LED.set_led(1,0,0);
caseyquinn 50:5f1b378e4f64 710 } else {
caseyquinn 50:5f1b378e4f64 711 digital_pot_set = (digital_pot_set+ digital_pot_change);
caseyquinn 50:5f1b378e4f64 712 //RGB_LED.set_led(1,1,0);
caseyquinn 50:5f1b378e4f64 713 }
caseyquinn 50:5f1b378e4f64 714
caseyquinn 50:5f1b378e4f64 715 if(digital_pot_set>=digitalpotMax) {
caseyquinn 50:5f1b378e4f64 716 digital_pot_set = digitalpotMax;
caseyquinn 50:5f1b378e4f64 717 //RGB_LED.set_led(1,0,0);
caseyquinn 50:5f1b378e4f64 718 } else if(digital_pot_set<=digitalpotMin) {
caseyquinn 50:5f1b378e4f64 719 digital_pot_set = digitalpotMin;
caseyquinn 50:5f1b378e4f64 720 //RGB_LED.set_led(1,0,0);
caseyquinn 50:5f1b378e4f64 721 }
caseyquinn 50:5f1b378e4f64 722
caseyquinn 50:5f1b378e4f64 723 DigPot.writeRegister(digital_pot_set);
caseyquinn 50:5f1b378e4f64 724
caseyquinn 50:5f1b378e4f64 725 } else {
caseyquinn 50:5f1b378e4f64 726 //RGB_LED.set_led(0,1,0);
caseyquinn 50:5f1b378e4f64 727 }
caseyquinn 50:5f1b378e4f64 728 */
caseyquinn 50:5f1b378e4f64 729
caseyquinn 14:7cdb643da356 730 }
caseyquinn 14:7cdb643da356 731
caseyquinn 27:922f53fa649c 732
caseyquinn 21:bb10efc5bf57 733
caseyquinn 7:29b01d5812ee 734 FILE *fp = fopen(filename, "a");
caseyquinn 21:bb10efc5bf57 735 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 736 fprintf(fp, "%s,", timestr);
caseyquinn 7:29b01d5812ee 737 fprintf(fp, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho);
caseyquinn 7:29b01d5812ee 738 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 739 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 740 fprintf(fp, "%d,%d,%d,%d,%d,%d," ,uv,omronReading, vInReading, vBlowerReading, omronDiff,amps);
caseyquinn 25:fbf7d44e7da4 741 fprintf(fp, "%d,%d,%d,%1.3f,%1.3f,", bVolt, bFuel,digital_pot_set, deltaMflow, deltaVflow);
caseyquinn 27:922f53fa649c 742 fprintf(fp, "%f,%f,%06d,%06d,", gpslatitude, gpslongitude, (long)gps.date, (long)gps.utc);
caseyquinn 28:42932d3b105d 743 //fprintf(fp, "%f,%d,%f,%f,%d,", gpsspeed, gpssatellites, gpscourse, gpsaltitude, gpsFix);
caseyquinn 28:42932d3b105d 744 fprintf(fp, "%f,%d,%f,%d,", gpsspeed, gpssatellites, gpsaltitude, gpsFix);
caseyquinn 46:99d129bfdbbd 745 fprintf(fp, "%d,%d\r\n", dutyCycleI, pumps == 1); // test and add in speed, etc that Josh added in to match the adafruit GPS
caseyquinn 7:29b01d5812ee 746 fclose(fp);
caseyquinn 7:29b01d5812ee 747 free(fp);
caseyquinn 25:fbf7d44e7da4 748
caseyquinn 25:fbf7d44e7da4 749
caseyquinn 14:7cdb643da356 750
caseyquinn 12:5b4f3245606a 751
caseyquinn 25:fbf7d44e7da4 752
caseyquinn 12:5b4f3245606a 753
jelord 3:122bfc998c4c 754
jelord 3:122bfc998c4c 755 }
caseyquinn 8:c4a8f9b67cee 756
caseyquinn 9:8646fd501832 757 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 758 //Flow Control Function
caseyquinn 9:8646fd501832 759 //////////////////////////////////////////////////////////////
caseyquinn 8:c4a8f9b67cee 760 void flowControl()
caseyquinn 8:c4a8f9b67cee 761 {
caseyquinn 50:5f1b378e4f64 762 if(pumps == 1){
caseyquinn 50:5f1b378e4f64 763 //RGB_LED.set_led(1,1,1);
caseyquinn 34:da333abe3476 764 omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 34:da333abe3476 765 omronVolt = (omronReading*4.096)/(32768*1);
caseyquinn 8:c4a8f9b67cee 766
caseyquinn 8:c4a8f9b67cee 767 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 8:c4a8f9b67cee 768 massflow = calibrations.omronMFMin;
caseyquinn 8:c4a8f9b67cee 769 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 8:c4a8f9b67cee 770 massflow = calibrations.omronMFMax;
caseyquinn 8:c4a8f9b67cee 771 } else {
caseyquinn 8:c4a8f9b67cee 772 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 773 }
caseyquinn 8:c4a8f9b67cee 774
caseyquinn 8:c4a8f9b67cee 775 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 776 volflow = massflow/atmoRho;
caseyquinn 47:fe50d72c7adc 777 //sampledVol = sampledVol + ((((float)logInerval)/60.0)*volflow);
caseyquinn 8:c4a8f9b67cee 778 deltaVflow = volflow-volflowSet;
caseyquinn 8:c4a8f9b67cee 779 massflowSet = volflowSet*atmoRho;
caseyquinn 8:c4a8f9b67cee 780 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 781
caseyquinn 8:c4a8f9b67cee 782 if(abs(deltaMflow)>.025) {
caseyquinn 8:c4a8f9b67cee 783 digital_pot_change = (int)(gainFlow*deltaMflow);
caseyquinn 8:c4a8f9b67cee 784
caseyquinn 8:c4a8f9b67cee 785
caseyquinn 12:5b4f3245606a 786 if(abs(digital_pot_change)>=10) {
caseyquinn 50:5f1b378e4f64 787 digital_pot_set = (int)(digital_pot_set+ (int)((2/volflowSet)*deltaMflow));
caseyquinn 25:fbf7d44e7da4 788 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 789 } else {
caseyquinn 8:c4a8f9b67cee 790 digital_pot_set = (digital_pot_set+ digital_pot_change);
caseyquinn 25:fbf7d44e7da4 791 //RGB_LED.set_led(1,1,0);
caseyquinn 8:c4a8f9b67cee 792 }
caseyquinn 8:c4a8f9b67cee 793
caseyquinn 12:5b4f3245606a 794 if(digital_pot_set>=digitalpotMax) {
caseyquinn 12:5b4f3245606a 795 digital_pot_set = digitalpotMax;
caseyquinn 25:fbf7d44e7da4 796 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 797 } else if(digital_pot_set<=digitalpotMin) {
caseyquinn 12:5b4f3245606a 798 digital_pot_set = digitalpotMin;
caseyquinn 25:fbf7d44e7da4 799 //RGB_LED.set_led(1,0,0);
caseyquinn 12:5b4f3245606a 800 }
caseyquinn 8:c4a8f9b67cee 801
caseyquinn 8:c4a8f9b67cee 802 DigPot.writeRegister(digital_pot_set);
caseyquinn 12:5b4f3245606a 803
caseyquinn 8:c4a8f9b67cee 804 } else {
caseyquinn 25:fbf7d44e7da4 805 //RGB_LED.set_led(0,1,0);
caseyquinn 8:c4a8f9b67cee 806 }
caseyquinn 50:5f1b378e4f64 807 }
caseyquinn 25:fbf7d44e7da4 808
caseyquinn 8:c4a8f9b67cee 809 }
caseyquinn 9:8646fd501832 810 //////////////////////////////////////////////////////////////
caseyquinn 9:8646fd501832 811 //Main Function
caseyquinn 9:8646fd501832 812 //////////////////////////////////////////////////////////////
jelord 1:9fbb5b665068 813 int main(){
caseyquinn 27:922f53fa649c 814
caseyquinn 29:fd74725294d5 815
caseyquinn 23:1ca41779b8ec 816 RGB_LED.set_led(0,0,1);
caseyquinn 36:2e344db70d35 817
caseyquinn 36:2e344db70d35 818
caseyquinn 29:fd74725294d5 819 /*
caseyquinn 27:922f53fa649c 820 while(1){
caseyquinn 27:922f53fa649c 821 if(sdCD == 0){
caseyquinn 27:922f53fa649c 822 RGB_LED.set_led(0,1,0);
caseyquinn 27:922f53fa649c 823 }else{
caseyquinn 27:922f53fa649c 824 RGB_LED.set_led(1,0,0);
caseyquinn 27:922f53fa649c 825 }
caseyquinn 27:922f53fa649c 826
caseyquinn 27:922f53fa649c 827 wait(10);
caseyquinn 27:922f53fa649c 828 }
caseyquinn 35:e0bdd6389a75 829
caseyquinn 43:05aa1fb68946 830 */
caseyquinn 30:aa6324845a84 831
caseyquinn 23:1ca41779b8ec 832
caseyquinn 23:1ca41779b8ec 833 gpsEN = 1;
caseyquinn 23:1ca41779b8ec 834 wait(1);
caseyquinn 23:1ca41779b8ec 835 BT_SW = 1;
caseyquinn 23:1ca41779b8ec 836 wait(1);
caseyquinn 23:1ca41779b8ec 837 BT_IRST = 1;
caseyquinn 23:1ca41779b8ec 838 wait(1);
caseyquinn 23:1ca41779b8ec 839
caseyquinn 12:5b4f3245606a 840
caseyquinn 10:06fbb1c9e3bd 841 pc.baud(115200); // set what you want here depending on your terminal program speed
caseyquinn 10:06fbb1c9e3bd 842 pc.printf("\f\n\r-------------Startup-------------\n\r");
jelord 1:9fbb5b665068 843 wait(0.5);
caseyquinn 5:c3252e5d45ca 844
caseyquinn 29:fd74725294d5 845
caseyquinn 29:fd74725294d5 846
caseyquinn 29:fd74725294d5 847 uint8_t serialNumberAndType[6] = {0x50,0x53,}; //ex) PS0018 // 0x50,0x53 <- ASCII 80 + 83 (PS) //0x4d,0x53 <- ASCII 77 + 83 (MS)
caseyquinn 29:fd74725294d5 848 E2PROM.read(0x00034,serialNumberAndType+2,2);
caseyquinn 29:fd74725294d5 849
caseyquinn 29:fd74725294d5 850 int tempSerialNum = ((serialNumberAndType[2]-48)*10 + serialNumberAndType[3]-48);
caseyquinn 29:fd74725294d5 851 if(tempSerialNum < 18){
caseyquinn 29:fd74725294d5 852 serialNumberAndType[0] = 0x4D;
caseyquinn 29:fd74725294d5 853 }
caseyquinn 13:455601f62aad 854
jelord 3:122bfc998c4c 855 int serialNumDigits[4];
jelord 3:122bfc998c4c 856 serialNumDigits[0] = tempSerialNum / 1000 % 10;
jelord 3:122bfc998c4c 857 serialNumDigits[1] = tempSerialNum / 100 % 10;
jelord 3:122bfc998c4c 858 serialNumDigits[2] = tempSerialNum / 10 % 10;
jelord 3:122bfc998c4c 859 serialNumDigits[3] = tempSerialNum % 10;
jelord 3:122bfc998c4c 860
caseyquinn 29:fd74725294d5 861
jelord 3:122bfc998c4c 862 serialNumberAndType[2] = serialNumDigits[0]+48;
jelord 3:122bfc998c4c 863 serialNumberAndType[3] = serialNumDigits[1]+48;
jelord 3:122bfc998c4c 864 serialNumberAndType[4] = serialNumDigits[2]+48;
jelord 3:122bfc998c4c 865 serialNumberAndType[5] = serialNumDigits[3]+48;
caseyquinn 12:5b4f3245606a 866
caseyquinn 29:fd74725294d5 867 /*
caseyquinn 29:fd74725294d5 868 serialNumberAndType[2] = serialNumDigits[0];
caseyquinn 29:fd74725294d5 869 serialNumberAndType[3] = serialNumDigits[1];
caseyquinn 29:fd74725294d5 870 serialNumberAndType[4] = serialNumDigits[2];
caseyquinn 29:fd74725294d5 871 serialNumberAndType[5] = serialNumDigits[3];
caseyquinn 29:fd74725294d5 872 */
caseyquinn 29:fd74725294d5 873
caseyquinn 29:fd74725294d5 874 RGB_LED.set_led(0,1,0);
caseyquinn 13:455601f62aad 875
caseyquinn 10:06fbb1c9e3bd 876 pc.attach(pc_recv);
jelord 1:9fbb5b665068 877 microChannel.attach(uartMicro,microChannel.RxIrq);
jelord 3:122bfc998c4c 878 microChannel.baud(115200);
jelord 1:9fbb5b665068 879 microChannel.printf("$$$");
jelord 3:122bfc998c4c 880 wait(0.5);
jelord 3:122bfc998c4c 881 microChannel.printf("SN,");
jelord 3:122bfc998c4c 882 for(int i=0;i<6;i++)microChannel.putc(serialNumberAndType[i]);
jelord 3:122bfc998c4c 883 microChannel.printf("\r");
jelord 3:122bfc998c4c 884 wait(0.5);
jelord 1:9fbb5b665068 885 microChannel.printf("A\r");
jelord 3:122bfc998c4c 886 wait(0.5);
jelord 2:88fcbfadec6a 887 microChannel.printf("---\r");
jelord 3:122bfc998c4c 888 wait(0.5);
jelord 2:88fcbfadec6a 889
caseyquinn 18:41ef98db0423 890 RGB_LED.set_led(1,1,1);
caseyquinn 36:2e344db70d35 891
jelord 3:122bfc998c4c 892 while(runReady!=1) {
jelord 3:122bfc998c4c 893 wait(1);
caseyquinn 26:6aa294d83af4 894 pc.printf("Waiting for BLE instruction\r\n");
jelord 3:122bfc998c4c 895
jelord 3:122bfc998c4c 896 }
jelord 3:122bfc998c4c 897
caseyquinn 36:2e344db70d35 898 BT_SW = 0;
caseyquinn 36:2e344db70d35 899 wait(1);
caseyquinn 36:2e344db70d35 900 BT_IRST = 0;
caseyquinn 36:2e344db70d35 901 wait(1);
caseyquinn 36:2e344db70d35 902
caseyquinn 36:2e344db70d35 903
caseyquinn 36:2e344db70d35 904
jelord 3:122bfc998c4c 905 E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
jelord 3:122bfc998c4c 906 RGB_LED.set_led(0,1,0);
caseyquinn 14:7cdb643da356 907
caseyquinn 26:6aa294d83af4 908
caseyquinn 26:6aa294d83af4 909 //Pull MicroEnviornment Lat/Lons from EEPROM
caseyquinn 26:6aa294d83af4 910 // Latitude School EEPROM = 0x50-0x53
caseyquinn 26:6aa294d83af4 911 // Longitude School EEPROM = 0x54-0x57
caseyquinn 26:6aa294d83af4 912 // Latitude Home EEPROM = 0x58-0x5B
caseyquinn 26:6aa294d83af4 913 // Longitude Home EEPROM = 0x5C-0x5F
caseyquinn 26:6aa294d83af4 914
caseyquinn 26:6aa294d83af4 915 uint8_t workLat[4] = {0,};
caseyquinn 26:6aa294d83af4 916 E2PROM.read(0x00050,workLat,4);
caseyquinn 26:6aa294d83af4 917 E2PROM.byteToFloat(workLat, &work_lat);
caseyquinn 26:6aa294d83af4 918
caseyquinn 26:6aa294d83af4 919 uint8_t workLon[4] = {0,};
caseyquinn 26:6aa294d83af4 920 E2PROM.read(0x00054,workLon,4);
caseyquinn 26:6aa294d83af4 921 E2PROM.byteToFloat(workLon, &work_lon);
caseyquinn 26:6aa294d83af4 922
caseyquinn 26:6aa294d83af4 923 uint8_t homeLat[4] = {0,};
caseyquinn 26:6aa294d83af4 924 E2PROM.read(0x00058,homeLat,4);
caseyquinn 26:6aa294d83af4 925 E2PROM.byteToFloat(homeLat, &home_lat);
caseyquinn 26:6aa294d83af4 926
caseyquinn 26:6aa294d83af4 927 uint8_t homeLon[4] = {0,};
caseyquinn 26:6aa294d83af4 928 E2PROM.read(0x0005C,homeLon,4);
caseyquinn 26:6aa294d83af4 929 E2PROM.byteToFloat(homeLon, &home_lon);
caseyquinn 26:6aa294d83af4 930
caseyquinn 36:2e344db70d35 931 uint8_t homeLat2[4] = {0,};
caseyquinn 36:2e344db70d35 932 E2PROM.read(0x00060,homeLat2,4);
caseyquinn 36:2e344db70d35 933 E2PROM.byteToFloat(homeLat2, &home_lat2);
caseyquinn 26:6aa294d83af4 934
caseyquinn 36:2e344db70d35 935 uint8_t homeLon2[4] = {0,};
caseyquinn 36:2e344db70d35 936 E2PROM.read(0x00064,homeLon2,4);
caseyquinn 36:2e344db70d35 937 E2PROM.byteToFloat(homeLon2, &home_lon2);
caseyquinn 36:2e344db70d35 938
caseyquinn 36:2e344db70d35 939 pc.printf("%f,%f\r\n %f,%f\r\n %f,%f\r\n", home_lat, home_lon, work_lat, work_lon, home_lat2, home_lon2);
caseyquinn 36:2e344db70d35 940
caseyquinn 36:2e344db70d35 941 //Get the subject line information
caseyquinn 40:cac5bdffba44 942 uint8_t subjectLabelOriginal[15] = {0,};
caseyquinn 40:cac5bdffba44 943 E2PROM.read(0x00001, subjectLabelOriginal,15);
jelord 3:122bfc998c4c 944
caseyquinn 44:075fa63d5df1 945 //Get the cartridge ID information
caseyquinn 44:075fa63d5df1 946 uint8_t cartridgeID[3] = {0,};
caseyquinn 44:075fa63d5df1 947 E2PROM.read(0x00070, cartridgeID,3);
caseyquinn 44:075fa63d5df1 948
caseyquinn 46:99d129bfdbbd 949 //Get the dutycycle information
caseyquinn 46:99d129bfdbbd 950 uint8_t dutycycleStr[3] = {0,};
caseyquinn 46:99d129bfdbbd 951 E2PROM.read(0x00076, dutycycleStr,3);
caseyquinn 46:99d129bfdbbd 952 dutyCycleI = ((dutycycleStr[0]-48)*100 + (dutycycleStr[1]-48)*10 + (dutycycleStr[2]-48));
caseyquinn 46:99d129bfdbbd 953 float dutycycleF = ((float)dutyCycleI/100);
caseyquinn 46:99d129bfdbbd 954 dutycycleSecOn = (int)(dutycycleF*60);
caseyquinn 46:99d129bfdbbd 955
caseyquinn 46:99d129bfdbbd 956 //wait(1);
caseyquinn 46:99d129bfdbbd 957 //pc.printf("%s,%d,%f,%d\r\n", dutycycleStr,dutyCycleI,dutycycleF,dutycycleSecOn);
caseyquinn 46:99d129bfdbbd 958
jelord 3:122bfc998c4c 959 //Get the proper serial number
jelord 3:122bfc998c4c 960 uint8_t serialBytes[2] = {0,};
caseyquinn 29:fd74725294d5 961 E2PROM.read(0x00034,serialBytes,2);
caseyquinn 29:fd74725294d5 962 serial_num = (uint16_t)(((serialBytes[0]-48)*10 + serialBytes[1]-48));
caseyquinn 29:fd74725294d5 963
caseyquinn 29:fd74725294d5 964
caseyquinn 29:fd74725294d5 965 ////////////////////////////////////////////////////////////////////
caseyquinn 29:fd74725294d5 966 //Temporary fix for setting serial_num
caseyquinn 29:fd74725294d5 967 ////////////////////////////////////////////////////////////////////
caseyquinn 29:fd74725294d5 968 //uint8_t serialsubjectLabelOriginal[2] = {0,};
caseyquinn 29:fd74725294d5 969 //E2PROM.read(0x00001, serialsubjectLabelOriginal,2);
caseyquinn 29:fd74725294d5 970 //uint8_t newserialBytes[2] = {0,};
caseyquinn 29:fd74725294d5 971
caseyquinn 30:aa6324845a84 972 if(subjectLabelOriginal[2] == 126){
caseyquinn 29:fd74725294d5 973 E2PROM.write(0x00034,subjectLabelOriginal,2);
caseyquinn 29:fd74725294d5 974 serial_num = (uint16_t)(((subjectLabelOriginal[0]-48)*10 + subjectLabelOriginal[1]-48));
caseyquinn 29:fd74725294d5 975 }
caseyquinn 29:fd74725294d5 976
caseyquinn 29:fd74725294d5 977 //----------------------------------------------
jelord 3:122bfc998c4c 978 calibrations.initialize(serial_num);
caseyquinn 29:fd74725294d5 979 pc.printf("%d\r\n", serial_num);
caseyquinn 29:fd74725294d5 980 pc.printf("%f\r\n",calibrations.MF4);
caseyquinn 29:fd74725294d5 981 //----------------------------------------------
caseyquinn 29:fd74725294d5 982 ////////////////////////////////////////////////////////////////////
caseyquinn 29:fd74725294d5 983
jelord 3:122bfc998c4c 984
jelord 3:122bfc998c4c 985 uint8_t logByte[1] = {0,};
jelord 3:122bfc998c4c 986 E2PROM.read(0x00014,logByte,1);
jelord 3:122bfc998c4c 987 logInerval = logByte[0];
jelord 3:122bfc998c4c 988
jelord 3:122bfc998c4c 989 //Use the flow rate value stored in eeprom
jelord 3:122bfc998c4c 990 uint8_t flowRateBytes[4] = {0,};
jelord 3:122bfc998c4c 991 E2PROM.read(0x00010,flowRateBytes,4);
jelord 3:122bfc998c4c 992 E2PROM.byteToFloat(flowRateBytes, &volflowSet);
caseyquinn 29:fd74725294d5 993
caseyquinn 29:fd74725294d5 994
caseyquinn 43:05aa1fb68946 995
caseyquinn 36:2e344db70d35 996 /*
caseyquinn 36:2e344db70d35 997 while(!gpsFix){
caseyquinn 36:2e344db70d35 998 gpsFix = gps.read(1);
caseyquinn 36:2e344db70d35 999 if(ledOn) {
caseyquinn 36:2e344db70d35 1000 RGB_LED.set_led(0,0,0);
caseyquinn 36:2e344db70d35 1001 ledOn = 0;
caseyquinn 36:2e344db70d35 1002 }else {
caseyquinn 36:2e344db70d35 1003 RGB_LED.set_led(1,0,0);
caseyquinn 36:2e344db70d35 1004 ledOn = 1;
caseyquinn 36:2e344db70d35 1005 }
caseyquinn 36:2e344db70d35 1006 wait(1);
caseyquinn 36:2e344db70d35 1007 }
caseyquinn 36:2e344db70d35 1008 */
caseyquinn 36:2e344db70d35 1009
caseyquinn 36:2e344db70d35 1010
caseyquinn 36:2e344db70d35 1011
caseyquinn 43:05aa1fb68946 1012 while(!timecompare(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
caseyquinn 36:2e344db70d35 1013 wait(0.5);
caseyquinn 36:2e344db70d35 1014
caseyquinn 36:2e344db70d35 1015 }
caseyquinn 46:99d129bfdbbd 1016
caseyquinn 46:99d129bfdbbd 1017
caseyquinn 43:05aa1fb68946 1018
caseyquinn 43:05aa1fb68946 1019 time_t seconds = time(NULL);
caseyquinn 43:05aa1fb68946 1020 strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
caseyquinn 43:05aa1fb68946 1021 RTC_UPAS.get_time();
caseyquinn 43:05aa1fb68946 1022 if(tempSerialNum < 18){
caseyquinn 44:075fa63d5df1 1023 sprintf(filename, "/sd/MS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%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],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
caseyquinn 36:2e344db70d35 1024
caseyquinn 43:05aa1fb68946 1025 }
caseyquinn 43:05aa1fb68946 1026 else{
caseyquinn 44:075fa63d5df1 1027 sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c%c%c%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],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
caseyquinn 43:05aa1fb68946 1028 }
caseyquinn 43:05aa1fb68946 1029 //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 43:05aa1fb68946 1030 //sprintf(filename, "/sd/UPAS_TboardtestLog_%s.txt", timestr);
caseyquinn 43:05aa1fb68946 1031 FILE *fp = fopen(filename, "w");
caseyquinn 43:05aa1fb68946 1032 fclose(fp);
caseyquinn 36:2e344db70d35 1033
caseyquinn 36:2e344db70d35 1034 RGB_LED.set_led(1,0,1);
caseyquinn 36:2e344db70d35 1035
jelord 3:122bfc998c4c 1036 if(volflowSet<=1.0) {
jelord 3:122bfc998c4c 1037 gainFlow = 100;
jelord 3:122bfc998c4c 1038 } else if(volflowSet>=2.0) {
jelord 3:122bfc998c4c 1039 gainFlow = 25;
jelord 3:122bfc998c4c 1040 } else {
jelord 3:122bfc998c4c 1041 gainFlow = 25;
jelord 0:2cb2b2ea316f 1042 }
caseyquinn 36:2e344db70d35 1043
jelord 3:122bfc998c4c 1044 press = bmesensor.getPressure();
jelord 3:122bfc998c4c 1045 temp = bmesensor.getTemperature();
jelord 3:122bfc998c4c 1046 rh = bmesensor.getHumidity();
jelord 3:122bfc998c4c 1047
jelord 3:122bfc998c4c 1048 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 1049 massflowSet = volflowSet*atmoRho;
jelord 3:122bfc998c4c 1050
jelord 3:122bfc998c4c 1051 DigPot.writeRegister(digital_pot_setpoint);
jelord 3:122bfc998c4c 1052 wait(1);
caseyquinn 28:42932d3b105d 1053 pumps = 1;
caseyquinn 25:fbf7d44e7da4 1054 //pumpOn = 1;
jelord 3:122bfc998c4c 1055
caseyquinn 35:e0bdd6389a75 1056
caseyquinn 29:fd74725294d5 1057 if(volflowSet<=1.0) {
caseyquinn 29:fd74725294d5 1058 gainFlow = 100;
caseyquinn 29:fd74725294d5 1059 } else if(volflowSet>=2.0) {
caseyquinn 29:fd74725294d5 1060 gainFlow = 25;
caseyquinn 29:fd74725294d5 1061 } else {
caseyquinn 29:fd74725294d5 1062 gainFlow = 25;
caseyquinn 29:fd74725294d5 1063 }
caseyquinn 29:fd74725294d5 1064
caseyquinn 29:fd74725294d5 1065 RGB_LED.set_led(1,0,0);
caseyquinn 29:fd74725294d5 1066 press = bmesensor.getPressure();
caseyquinn 29:fd74725294d5 1067 temp = bmesensor.getTemperature();
caseyquinn 29:fd74725294d5 1068 rh = bmesensor.getHumidity();
caseyquinn 29:fd74725294d5 1069
caseyquinn 29:fd74725294d5 1070 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 29:fd74725294d5 1071 massflowSet = volflowSet*atmoRho;
caseyquinn 29:fd74725294d5 1072
caseyquinn 29:fd74725294d5 1073 //Digtal pot tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
caseyquinn 29:fd74725294d5 1074 digital_pot_setpoint = (int)floor(calibrations.DP4*pow(massflowSet,4)+calibrations.DP3*pow(massflowSet,3)+calibrations.DP2*pow(massflowSet,2)+calibrations.DP1*massflowSet+calibrations.DP0); //min = 0x7F, max = 0x00
caseyquinn 29:fd74725294d5 1075
caseyquinn 29:fd74725294d5 1076 if(digital_pot_setpoint>=digitalpotMax) {
caseyquinn 29:fd74725294d5 1077 digital_pot_setpoint = digitalpotMax;
caseyquinn 29:fd74725294d5 1078 } else if(digital_pot_setpoint<=digitalpotMin) {
caseyquinn 29:fd74725294d5 1079 digital_pot_setpoint = digitalpotMin;
caseyquinn 29:fd74725294d5 1080 }
caseyquinn 29:fd74725294d5 1081
caseyquinn 29:fd74725294d5 1082 pc.printf("%d\r\n", digital_pot_setpoint);
caseyquinn 29:fd74725294d5 1083 DigPot.writeRegister(digital_pot_setpoint);
caseyquinn 29:fd74725294d5 1084 wait(1);
caseyquinn 35:e0bdd6389a75 1085 pumps = 1;
caseyquinn 35:e0bdd6389a75 1086
jelord 3:122bfc998c4c 1087
caseyquinn 25:fbf7d44e7da4 1088
caseyquinn 34:da333abe3476 1089 omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 34:da333abe3476 1090 omronVolt = (omronReading*4.096)/(32768*1);
caseyquinn 12:5b4f3245606a 1091 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 12:5b4f3245606a 1092 massflow = calibrations.omronMFMin;
caseyquinn 12:5b4f3245606a 1093 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 12:5b4f3245606a 1094 massflow = calibrations.omronMFMax;
caseyquinn 12:5b4f3245606a 1095 } else {
caseyquinn 12:5b4f3245606a 1096 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 1097 }
caseyquinn 12:5b4f3245606a 1098 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 1099 digital_pot_set = digital_pot_setpoint;
caseyquinn 12:5b4f3245606a 1100 wait(5);
caseyquinn 12:5b4f3245606a 1101
caseyquinn 12:5b4f3245606a 1102 //---------------------------------------------------------------------------------------------//
caseyquinn 12:5b4f3245606a 1103 //Sets the flow withen +-1.5% of the desired flow rate based on mass flow
caseyquinn 35:e0bdd6389a75 1104
caseyquinn 12:5b4f3245606a 1105 while(abs(deltaMflow)>.025) {
caseyquinn 12:5b4f3245606a 1106
caseyquinn 34:da333abe3476 1107 omronReading = ads.readADC_SingleEnded(0, 0xC383); // read channel 0 PGA = 2 : Full Scale Range = 2.048V
caseyquinn 34:da333abe3476 1108 omronVolt = (omronReading*4.096)/(32768*1);
caseyquinn 36:2e344db70d35 1109 pc.printf("%d,%f\r\n", omronReading, omronVolt);
caseyquinn 12:5b4f3245606a 1110 //Mass Flow tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
caseyquinn 12:5b4f3245606a 1111 if(omronVolt<=calibrations.omronVMin) {
caseyquinn 12:5b4f3245606a 1112 massflow = calibrations.omronMFMin;
caseyquinn 12:5b4f3245606a 1113 } else if(omronVolt>=calibrations.omronVMax) {
caseyquinn 12:5b4f3245606a 1114 massflow = calibrations.omronMFMax;
caseyquinn 12:5b4f3245606a 1115 } else {
caseyquinn 12:5b4f3245606a 1116 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 1117 }
caseyquinn 12:5b4f3245606a 1118
caseyquinn 12:5b4f3245606a 1119 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 1120 volflow = massflow/atmoRho;
caseyquinn 36:2e344db70d35 1121 pc.printf("%f\r\n", volflow);
caseyquinn 12:5b4f3245606a 1122 massflowSet = volflowSet*atmoRho;
caseyquinn 12:5b4f3245606a 1123 deltaMflow = massflow-massflowSet;
caseyquinn 12:5b4f3245606a 1124
caseyquinn 12:5b4f3245606a 1125 digital_pot_set = (int)(digital_pot_set+(int)((gainFlow*deltaMflow)));
caseyquinn 12:5b4f3245606a 1126 if(digital_pot_set>=digitalpotMax) {
caseyquinn 12:5b4f3245606a 1127 digital_pot_set = digitalpotMax;
caseyquinn 12:5b4f3245606a 1128 } else if(digital_pot_set<=digitalpotMin) {
caseyquinn 12:5b4f3245606a 1129 digital_pot_set = digitalpotMin;
caseyquinn 12:5b4f3245606a 1130 }
caseyquinn 12:5b4f3245606a 1131
caseyquinn 12:5b4f3245606a 1132 wait(2);
caseyquinn 12:5b4f3245606a 1133 DigPot.writeRegister(digital_pot_set);
caseyquinn 12:5b4f3245606a 1134 pc.printf("%d,\r\n", digital_pot_set);
caseyquinn 12:5b4f3245606a 1135 wait(1);
caseyquinn 12:5b4f3245606a 1136
caseyquinn 12:5b4f3245606a 1137
caseyquinn 12:5b4f3245606a 1138 }
caseyquinn 36:2e344db70d35 1139 //pumps = 0;
jelord 3:122bfc998c4c 1140 sampledVol = 0.0;
jelord 3:122bfc998c4c 1141 RGB_LED.set_led(0,1,0);
caseyquinn 25:fbf7d44e7da4 1142 wait(1);
caseyquinn 25:fbf7d44e7da4 1143 RGB_LED.set_led(0,0,0);
caseyquinn 14:7cdb643da356 1144
caseyquinn 46:99d129bfdbbd 1145 while(fmod((double)stSec,10)!=0) {
caseyquinn 46:99d129bfdbbd 1146 //pc.printf("%f, %f\r\n", floor(secondsD), floor(lastsecondD));
caseyquinn 46:99d129bfdbbd 1147 time_t seconds = time(NULL);
caseyquinn 46:99d129bfdbbd 1148 strftime(secstr, 4, "%S", localtime(&seconds));
caseyquinn 46:99d129bfdbbd 1149 stSec = atoi(secstr);
caseyquinn 46:99d129bfdbbd 1150 wait_ms(100);
caseyquinn 46:99d129bfdbbd 1151 }
caseyquinn 46:99d129bfdbbd 1152
caseyquinn 46:99d129bfdbbd 1153 logg.attach(&log_data, logInerval);
caseyquinn 43:05aa1fb68946 1154 stop.attach(&check_stop, 9); // check if we should shut down every 9 number seconds, starting after the start.
caseyquinn 35:e0bdd6389a75 1155 flowCtl.attach(&flowControl, 3);
caseyquinn 30:aa6324845a84 1156
caseyquinn 35:e0bdd6389a75 1157
caseyquinn 35:e0bdd6389a75 1158
caseyquinn 30:aa6324845a84 1159
jelord 3:122bfc998c4c 1160 //** end of initalization **//
jelord 3:122bfc998c4c 1161 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 1162 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 1163 // Main Control Loop
jelord 3:122bfc998c4c 1164
caseyquinn 7:29b01d5812ee 1165 while (1) {
caseyquinn 7:29b01d5812ee 1166 // Do other things...
caseyquinn 46:99d129bfdbbd 1167
caseyquinn 46:99d129bfdbbd 1168 }
caseyquinn 7:29b01d5812ee 1169
caseyquinn 8:c4a8f9b67cee 1170
caseyquinn 4:5d004fd997d5 1171
jelord 3:122bfc998c4c 1172
jelord 0:2cb2b2ea316f 1173 }