attempt to fix posible power issues with the sharp

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_Tboard by scott kelleher

Committer:
caseyquinn
Date:
Tue May 03 03:54:50 2016 +0000
Revision:
42:c8ed2dc04dfe
Parent:
40:cac5bdffba44
Child:
43:05aa1fb68946
Fixed ST RTC logging issue. This is now the dedicated UBC UPAS code to work with android app for now.

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