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 Mar 01 16:59:14 2016 +0000
Revision:
7:29b01d5812ee
Parent:
6:a738dcd53bf8
Child:
8:c4a8f9b67cee
ST RTC now being set (most of the time) with the app. Also callback for the log_data are now working (needed a while(1){} in the main loop for the interrupts to continue working. Need to check that the stop interrupt is working.

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"
jelord 2:88fcbfadec6a 12 #include "Calibration.h"
caseyquinn 7:29b01d5812ee 13 //Serial pc(USBTX, USBRX);
caseyquinn 5:c3252e5d45ca 14 //Serial microChannel(D0, D1); // tx, rx Appears there is a conflict in the mbed code (possibly already assigned to SERIAL_TX, SERIAL_RX, USBTX, USBRX need to reassign these values)
caseyquinn 5:c3252e5d45ca 15 // However still an issue with the BLE not reading the EEPROM with the old pin assignments Jake had.
caseyquinn 5:c3252e5d45ca 16 Serial microChannel(D8, D2); // tx, rx
caseyquinn 7:29b01d5812ee 17 //Timer t;
jelord 1:9fbb5b665068 18 struct tm tt;
jelord 0:2cb2b2ea316f 19
jelord 2:88fcbfadec6a 20 I2C i2c(D14, D15);
jelord 2:88fcbfadec6a 21 Adafruit_ADS1115 ads(&i2c);
jelord 2:88fcbfadec6a 22 MCP40D17 DigPot(&i2c);
jelord 2:88fcbfadec6a 23 BME280 bmesensor(D14, D15);
jelord 2:88fcbfadec6a 24 STC3100 gasG(D14, D15);
caseyquinn 5:c3252e5d45ca 25 //DigitalOut blower(D8, 0);
caseyquinn 4:5d004fd997d5 26 DigitalOut pbKill(PC_12, 1);
caseyquinn 4:5d004fd997d5 27 DigitalOut bleRTS(PB_14, 0);
caseyquinn 4:5d004fd997d5 28 DigitalOut bleCTS(PB_13, 0);
jelord 2:88fcbfadec6a 29 LSM303 movementsensor(D14, D15);
jelord 2:88fcbfadec6a 30 SI1145 lightsensor(D14, D15);
jelord 2:88fcbfadec6a 31 NCP5623BMUTBG RGB_LED(D14, D15);
jelord 3:122bfc998c4c 32 CronoDot RTC_UPAS(D14, D15);
jelord 2:88fcbfadec6a 33 EEPROM E2PROM(D14, D15);
jelord 2:88fcbfadec6a 34 //DigitalOut GPS_EN(p4,0); //pin 4 is used to enable and disable the GPS, in order to recive serial communications
jelord 2:88fcbfadec6a 35 Calibration calibrations(1); //Default serial/calibration if there are no values for the selected option
jelord 0:2cb2b2ea316f 36
jelord 3:122bfc998c4c 37 Timeout stop; //This is the stop call back object
caseyquinn 7:29b01d5812ee 38 //Timeout logg;
caseyquinn 7:29b01d5812ee 39 Ticker logg; //This is the logging call back object
jelord 3:122bfc998c4c 40
jelord 3:122bfc998c4c 41 uint16_t serial_num = 1; // Default serial/calibration number
jelord 3:122bfc998c4c 42 int RunReady =0;
jelord 3:122bfc998c4c 43
caseyquinn 4:5d004fd997d5 44 struct tm STtime;
caseyquinn 7:29b01d5812ee 45 char timestr[32];
jelord 3:122bfc998c4c 46
jelord 3:122bfc998c4c 47 float press = 1.1;
jelord 3:122bfc998c4c 48 float temp = 75.5;
jelord 3:122bfc998c4c 49 float rh = 12.1;
jelord 3:122bfc998c4c 50
jelord 3:122bfc998c4c 51 int uv = 8;
jelord 3:122bfc998c4c 52 int vis = 7;
jelord 3:122bfc998c4c 53 int ir = 6;
jelord 3:122bfc998c4c 54
jelord 3:122bfc998c4c 55 float compass = 0.1;
jelord 3:122bfc998c4c 56 float accel_x = 0.2;
jelord 3:122bfc998c4c 57 float accel_y = 0.3;
jelord 3:122bfc998c4c 58 float accel_z = 0.4;
jelord 3:122bfc998c4c 59 float accel_comp = 0.5;
jelord 3:122bfc998c4c 60 float angle_x = 0.6;
jelord 3:122bfc998c4c 61 float angle_y = 0.7;
jelord 3:122bfc998c4c 62 float angle_z = 0.8;
jelord 3:122bfc998c4c 63 float mag_x = 0.9;
jelord 3:122bfc998c4c 64 float mag_y = 1.0;
jelord 3:122bfc998c4c 65 float mag_z = 1.2;
jelord 3:122bfc998c4c 66
jelord 3:122bfc998c4c 67 int vInReading = 18;
jelord 3:122bfc998c4c 68 int vBlowerReading = 19;
jelord 3:122bfc998c4c 69 int omronDiff = 20;
jelord 3:122bfc998c4c 70 float omronVolt = 1.2; //V
jelord 3:122bfc998c4c 71 int omronReading = 100;
jelord 3:122bfc998c4c 72 float atmoRho = 1.5; //g/L
jelord 3:122bfc998c4c 73
jelord 3:122bfc998c4c 74 float massflow = 87.6; //g/min
jelord 3:122bfc998c4c 75 float volflow = 88.8; //L/min
jelord 3:122bfc998c4c 76 float volflowSet = 1.0; //L/min
jelord 3:122bfc998c4c 77 int logInerval = 10; //seconds
jelord 3:122bfc998c4c 78 double secondsD = 0;
jelord 3:122bfc998c4c 79 double lastsecondD = 0;
jelord 3:122bfc998c4c 80 float massflowSet = 19.2;
jelord 3:122bfc998c4c 81 float deltaVflow = 0.0;
jelord 3:122bfc998c4c 82 float deltaMflow = 0.0;
jelord 3:122bfc998c4c 83 float gainFlow = 98.1;
jelord 3:122bfc998c4c 84 float sampledVol = 2.0; //L, total sampled volume
jelord 3:122bfc998c4c 85
jelord 3:122bfc998c4c 86 int digital_pot_setpoint = 5 ; //min = 0x7F, max = 0x00
jelord 3:122bfc998c4c 87 int digital_pot_set = 6;
jelord 3:122bfc998c4c 88 int digital_pot_change = 7;
jelord 3:122bfc998c4c 89 int digitalpotMax = 127;
jelord 3:122bfc998c4c 90 int digitalpotMin = 2;
jelord 3:122bfc998c4c 91
jelord 3:122bfc998c4c 92 int dutyUp = 4;
jelord 3:122bfc998c4c 93 int dutyDown = 3;
jelord 3:122bfc998c4c 94
jelord 3:122bfc998c4c 95 // variables are only place holders for the US_Menu //
jelord 3:122bfc998c4c 96 int refreshtime = 6;
caseyquinn 7:29b01d5812ee 97 //int refresh_Time = 10; // refresh time in s, note calling read_GPS()(or similar) will still take how ever long it needs(hopefully < 1s)
jelord 3:122bfc998c4c 98 float home_lat, home_lon, work_lat, work_lon;
jelord 3:122bfc998c4c 99 //*************************************************//
jelord 3:122bfc998c4c 100
caseyquinn 7:29b01d5812ee 101
jelord 3:122bfc998c4c 102
jelord 3:122bfc998c4c 103 char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
jelord 3:122bfc998c4c 104
caseyquinn 4:5d004fd997d5 105 SDFileSystem sd(D4, D5, D3, D10, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (MOSI, MISO, SCK, SEL)
jelord 3:122bfc998c4c 106
jelord 2:88fcbfadec6a 107 void sendData();
jelord 2:88fcbfadec6a 108
jelord 0:2cb2b2ea316f 109
jelord 0:2cb2b2ea316f 110 static uint8_t rx_buf[20];
jelord 0:2cb2b2ea316f 111 static uint8_t rx_len=0;
jelord 1:9fbb5b665068 112 static int haltBLE = 1;
jelord 1:9fbb5b665068 113 static int transmissionValue = 0;
jelord 2:88fcbfadec6a 114 uint8_t writeData[20] = {0,};
jelord 2:88fcbfadec6a 115 static uint8_t dataLength = 0;
jelord 3:122bfc998c4c 116 static int runReady = 0;
jelord 3:122bfc998c4c 117 static uint8_t startAndEndTime[12] = {0,};
caseyquinn 5:c3252e5d45ca 118
jelord 0:2cb2b2ea316f 119 void uartMicro(void){
jelord 3:122bfc998c4c 120 if(runReady!=1){
jelord 3:122bfc998c4c 121 haltBLE = 2;
jelord 3:122bfc998c4c 122 while(microChannel.readable()){
jelord 3:122bfc998c4c 123 rx_buf[rx_len++] = microChannel.getc();
jelord 2:88fcbfadec6a 124
jelord 3:122bfc998c4c 125 //Code block to verify what is being transmitted. To function correctly, all data must terminate with \0 or \n
jelord 3:122bfc998c4c 126 if(transmissionValue==0){
jelord 3:122bfc998c4c 127
caseyquinn 4:5d004fd997d5 128 if (rx_buf[0] == 0x01)transmissionValue = 1; //rtc
jelord 3:122bfc998c4c 129 else if(rx_buf[0] == 0x02)transmissionValue = 2; //sample start and end times
jelord 3:122bfc998c4c 130 else if(rx_buf[0] == 0x03)transmissionValue = 3; //sample name
jelord 3:122bfc998c4c 131 else if(rx_buf[0] == 0x04)transmissionValue = 4; //Send Data Check
jelord 3:122bfc998c4c 132
jelord 3:122bfc998c4c 133 else if(rx_buf[0] == 0x05)transmissionValue = 5; //log interval
jelord 3:122bfc998c4c 134 else if(rx_buf[0] == 0x06)transmissionValue = 6; //Flow Rate
jelord 3:122bfc998c4c 135 else if(rx_buf[0] == 0x07)transmissionValue = 7; //Serial Number
jelord 3:122bfc998c4c 136 else if(rx_buf[0] == 0x08)transmissionValue = 8; //Run Enable
jelord 3:122bfc998c4c 137 else transmissionValue = 100; //Not useful data
jelord 3:122bfc998c4c 138 }
jelord 3:122bfc998c4c 139
jelord 3:122bfc998c4c 140 if(rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n' || rx_buf[rx_len-1] == 0xff){
jelord 3:122bfc998c4c 141 if((transmissionValue == 1 || transmissionValue == 2 || transmissionValue == 3 || transmissionValue == 4 || transmissionValue == 5 ||
jelord 3:122bfc998c4c 142 transmissionValue == 6 || transmissionValue == 7) && rx_buf[rx_len-1] != 0xff)
jelord 3:122bfc998c4c 143 {}else{
jelord 3:122bfc998c4c 144 if(transmissionValue == 4 ) sendData();
jelord 3:122bfc998c4c 145 if(transmissionValue == 8){
jelord 3:122bfc998c4c 146 runReady = 1;
jelord 3:122bfc998c4c 147 microChannel.attach(NULL,microChannel.RxIrq);
jelord 3:122bfc998c4c 148 }
jelord 3:122bfc998c4c 149 haltBLE = 1;
jelord 3:122bfc998c4c 150 transmissionValue = 0;
jelord 3:122bfc998c4c 151 dataLength = 0;
jelord 2:88fcbfadec6a 152
jelord 3:122bfc998c4c 153 }
jelord 2:88fcbfadec6a 154 }
jelord 1:9fbb5b665068 155 }
jelord 3:122bfc998c4c 156 if(haltBLE!=1){
jelord 2:88fcbfadec6a 157
jelord 3:122bfc998c4c 158 if((transmissionValue!=100) && (dataLength!= 0)) writeData[dataLength-1] = rx_buf[0];
jelord 3:122bfc998c4c 159
jelord 3:122bfc998c4c 160 if(transmissionValue ==100){
jelord 3:122bfc998c4c 161 //pc.putc(rx_buf[0]);
jelord 2:88fcbfadec6a 162
jelord 3:122bfc998c4c 163 }else if(transmissionValue ==1){ //process and store RTC values
jelord 3:122bfc998c4c 164
caseyquinn 7:29b01d5812ee 165 //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 166 if(dataLength==6){
caseyquinn 7:29b01d5812ee 167 RTC_UPAS.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);//sets chronodot RTC
caseyquinn 7:29b01d5812ee 168 //sets ST RTC
caseyquinn 7:29b01d5812ee 169 STtime.tm_sec = writeData[0]; // 0-59
caseyquinn 7:29b01d5812ee 170 STtime.tm_min = writeData[1]; // 0-59
caseyquinn 7:29b01d5812ee 171 STtime.tm_hour = writeData[2]; // 0-23
caseyquinn 7:29b01d5812ee 172 STtime.tm_mday = writeData[3]; // 1-31
caseyquinn 7:29b01d5812ee 173 STtime.tm_mon = writeData[4]-1; // 0-11
caseyquinn 7:29b01d5812ee 174 STtime.tm_year = 100+writeData[5]; // year since 1900 (116 = 2016)
caseyquinn 7:29b01d5812ee 175 time_t STseconds = mktime(&STtime);
caseyquinn 7:29b01d5812ee 176 set_time(STseconds); // Set RTC time to 16 December 2013 10:05:23 UTC
caseyquinn 7:29b01d5812ee 177 }
jelord 3:122bfc998c4c 178
jelord 3:122bfc998c4c 179 }else if(transmissionValue ==2){ //process and store sample start/end
jelord 3:122bfc998c4c 180 if(dataLength ==12)E2PROM.write(0x00015, writeData, 12);
jelord 3:122bfc998c4c 181
jelord 3:122bfc998c4c 182 }else if(transmissionValue ==3){ //process and store sample name
jelord 3:122bfc998c4c 183 if(dataLength ==8)E2PROM.write(0x00001,writeData,8);
jelord 3:122bfc998c4c 184
jelord 3:122bfc998c4c 185 }else if(transmissionValue ==5){ //process and store Log Interval
jelord 3:122bfc998c4c 186 if(dataLength ==1)E2PROM.write(0x00014,writeData,1);
jelord 2:88fcbfadec6a 187
jelord 3:122bfc998c4c 188 }else if(transmissionValue ==6){ //process and store Flow Rate
jelord 3:122bfc998c4c 189 if(dataLength ==4)E2PROM.write(0x00010,writeData,4);
jelord 3:122bfc998c4c 190
jelord 3:122bfc998c4c 191 }else if(transmissionValue ==7){ //process and store Serial Number
jelord 3:122bfc998c4c 192 if(dataLength ==2)E2PROM.write(0x00034,writeData,2);
jelord 3:122bfc998c4c 193 }
jelord 3:122bfc998c4c 194 dataLength++;
jelord 1:9fbb5b665068 195 }
jelord 3:122bfc998c4c 196
jelord 3:122bfc998c4c 197 rx_len = 0;
jelord 3:122bfc998c4c 198 }else{
jelord 3:122bfc998c4c 199 while(microChannel.readable())
jelord 3:122bfc998c4c 200 uint8_t extract = microChannel.getc();
jelord 3:122bfc998c4c 201 }
jelord 2:88fcbfadec6a 202
jelord 2:88fcbfadec6a 203 }
jelord 2:88fcbfadec6a 204 void sendData(){
jelord 2:88fcbfadec6a 205
jelord 2:88fcbfadec6a 206 uint8_t sampleTimePassValues[13] = {0x01,};
jelord 2:88fcbfadec6a 207 uint8_t subjectLabelOriginal[9] = {0x02,};
jelord 2:88fcbfadec6a 208 uint8_t dataLogOriginal[2] = {0x03,};
jelord 2:88fcbfadec6a 209 uint8_t flowRateOriginal[5] = {0x04,};
jelord 2:88fcbfadec6a 210 //uint8_t presetRunModeCheck[1] = {0,}; Commented and currently unused to prevent mem issues
jelord 2:88fcbfadec6a 211 E2PROM.read(0x00015, sampleTimePassValues+1, 12);
jelord 2:88fcbfadec6a 212 E2PROM.read(0x00001, subjectLabelOriginal+1,8);
jelord 2:88fcbfadec6a 213 E2PROM.read(0x00014,dataLogOriginal+1,1);
jelord 2:88fcbfadec6a 214 E2PROM.read(0x00010,flowRateOriginal+1,4);
jelord 2:88fcbfadec6a 215
jelord 2:88fcbfadec6a 216 for(int i=0; i<13; i++){
jelord 2:88fcbfadec6a 217 microChannel.putc(sampleTimePassValues[i]);
jelord 2:88fcbfadec6a 218 }
jelord 2:88fcbfadec6a 219 wait(.25);
jelord 2:88fcbfadec6a 220
jelord 2:88fcbfadec6a 221 for(int i=0; i<9; i++){
jelord 2:88fcbfadec6a 222 microChannel.putc(subjectLabelOriginal[i]);
jelord 2:88fcbfadec6a 223 }
jelord 2:88fcbfadec6a 224 wait(.25);
jelord 2:88fcbfadec6a 225
jelord 2:88fcbfadec6a 226 for(int i=0; i<2; i++){
jelord 2:88fcbfadec6a 227 microChannel.putc(dataLogOriginal[i]);
jelord 2:88fcbfadec6a 228 }
jelord 2:88fcbfadec6a 229 wait(.25);
jelord 2:88fcbfadec6a 230
jelord 2:88fcbfadec6a 231 for(int i=0; i<5; i++){
jelord 2:88fcbfadec6a 232 microChannel.putc(flowRateOriginal[i]);
jelord 2:88fcbfadec6a 233 }
jelord 0:2cb2b2ea316f 234
jelord 2:88fcbfadec6a 235
jelord 2:88fcbfadec6a 236 }
caseyquinn 5:c3252e5d45ca 237
caseyquinn 7:29b01d5812ee 238
jelord 3:122bfc998c4c 239 void check_stop() // this checks if it's time to stop and shutdown
jelord 3:122bfc998c4c 240 {
jelord 3:122bfc998c4c 241
jelord 3:122bfc998c4c 242 if(RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])) {
jelord 3:122bfc998c4c 243 pbKill = 0; // this is were we shut everything down
caseyquinn 4:5d004fd997d5 244 //pc.printf("If you're reading this something has gone very wrong.");
jelord 3:122bfc998c4c 245 }
jelord 3:122bfc998c4c 246 stop.detach();
jelord 3:122bfc998c4c 247 stop.attach(&check_stop, 9);
jelord 3:122bfc998c4c 248
jelord 3:122bfc998c4c 249 }
caseyquinn 5:c3252e5d45ca 250
jelord 3:122bfc998c4c 251
jelord 3:122bfc998c4c 252 void log_data()
jelord 3:122bfc998c4c 253 {
jelord 3:122bfc998c4c 254
caseyquinn 7:29b01d5812ee 255 RGB_LED.set_led(1,1,0);
caseyquinn 7:29b01d5812ee 256
caseyquinn 7:29b01d5812ee 257 time_t seconds = time(NULL);
caseyquinn 7:29b01d5812ee 258 strftime(timestr, 32, "%y%m%d%H%M%S", localtime(&seconds));
caseyquinn 7:29b01d5812ee 259 press = bmesensor.getPressure();
caseyquinn 7:29b01d5812ee 260 temp = bmesensor.getTemperature()-5.0;
caseyquinn 7:29b01d5812ee 261 rh = bmesensor.getHumidity();
caseyquinn 7:29b01d5812ee 262 uv = lightsensor.getUV();
caseyquinn 7:29b01d5812ee 263
caseyquinn 7:29b01d5812ee 264
caseyquinn 7:29b01d5812ee 265 FILE *fp = fopen(filename, "a");
caseyquinn 7:29b01d5812ee 266 //fprintf(fp, "Time as a basic string = %s\r\n", ctime(&seconds));
caseyquinn 7:29b01d5812ee 267 //fprintf(fp, "Time as a basic string = %s\r\n", timestr);
caseyquinn 7:29b01d5812ee 268 //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 269 fprintf(fp, "%s,", timestr);
caseyquinn 7:29b01d5812ee 270 fprintf(fp, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho);
caseyquinn 7:29b01d5812ee 271 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 272 fprintf(fp, "%.1f,%.1f,%.1f,%.3f,%.3f,%.3f,%.1f,", angle_x,angle_y,angle_z,mag_x, mag_y, mag_z,compass);
caseyquinn 7:29b01d5812ee 273 fprintf(fp, "%d,%d,%d,%d,%d,%d," ,uv,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps());
caseyquinn 7:29b01d5812ee 274 fprintf(fp, "%d,%d,%d,%1.3f,%1.3f\r\n", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow);
caseyquinn 7:29b01d5812ee 275 fclose(fp);
caseyquinn 7:29b01d5812ee 276 free(fp);
caseyquinn 7:29b01d5812ee 277 RGB_LED.set_led(1,0,0);
jelord 3:122bfc998c4c 278
jelord 3:122bfc998c4c 279 }
jelord 1:9fbb5b665068 280
jelord 1:9fbb5b665068 281 int main(){
caseyquinn 7:29b01d5812ee 282
caseyquinn 4:5d004fd997d5 283 //wait(10);
caseyquinn 6:a738dcd53bf8 284 //RGB_LED.set_led(0,0,1);
caseyquinn 4:5d004fd997d5 285 //pc.baud(115200); // set what you want here depending on your terminal program speed
caseyquinn 4:5d004fd997d5 286 //pc.printf("\f\n\r-------------Startup-------------\n\r");
jelord 1:9fbb5b665068 287 wait(0.5);
caseyquinn 5:c3252e5d45ca 288
jelord 3:122bfc998c4c 289 uint8_t serialNumberAndType[6] = {0x50,0x53};
jelord 3:122bfc998c4c 290 E2PROM.read(0x00034,serialNumberAndType+2,2);
caseyquinn 4:5d004fd997d5 291
jelord 3:122bfc998c4c 292 int tempSerialNum = serialNumberAndType[2]+serialNumberAndType[3];
jelord 3:122bfc998c4c 293 int serialNumDigits[4];
jelord 3:122bfc998c4c 294 serialNumDigits[0] = tempSerialNum / 1000 % 10;
jelord 3:122bfc998c4c 295 serialNumDigits[1] = tempSerialNum / 100 % 10;
jelord 3:122bfc998c4c 296 serialNumDigits[2] = tempSerialNum / 10 % 10;
jelord 3:122bfc998c4c 297 serialNumDigits[3] = tempSerialNum % 10;
jelord 3:122bfc998c4c 298
jelord 3:122bfc998c4c 299 serialNumberAndType[2] = serialNumDigits[0]+48;
jelord 3:122bfc998c4c 300 serialNumberAndType[3] = serialNumDigits[1]+48;
jelord 3:122bfc998c4c 301 serialNumberAndType[4] = serialNumDigits[2]+48;
jelord 3:122bfc998c4c 302 serialNumberAndType[5] = serialNumDigits[3]+48;
caseyquinn 5:c3252e5d45ca 303 RGB_LED.set_led(0,1,0);
jelord 3:122bfc998c4c 304 //pc.attach(pc_recv);
jelord 1:9fbb5b665068 305 microChannel.attach(uartMicro,microChannel.RxIrq);
jelord 3:122bfc998c4c 306 microChannel.baud(115200);
caseyquinn 6:a738dcd53bf8 307 //RGB_LED.set_led(1,0,0);
jelord 1:9fbb5b665068 308 microChannel.printf("$$$");
jelord 3:122bfc998c4c 309 wait(0.5);
jelord 3:122bfc998c4c 310 microChannel.printf("SN,");
jelord 3:122bfc998c4c 311 for(int i=0;i<6;i++)microChannel.putc(serialNumberAndType[i]);
jelord 3:122bfc998c4c 312 microChannel.printf("\r");
jelord 3:122bfc998c4c 313 wait(0.5);
jelord 1:9fbb5b665068 314 microChannel.printf("A\r");
jelord 3:122bfc998c4c 315 wait(0.5);
jelord 2:88fcbfadec6a 316 microChannel.printf("---\r");
jelord 3:122bfc998c4c 317 wait(0.5);
jelord 2:88fcbfadec6a 318
jelord 2:88fcbfadec6a 319
caseyquinn 4:5d004fd997d5 320
jelord 2:88fcbfadec6a 321
jelord 2:88fcbfadec6a 322 RGB_LED.set_led(1,1,1);
jelord 3:122bfc998c4c 323 while(runReady!=1) {
jelord 3:122bfc998c4c 324 wait(1);
jelord 3:122bfc998c4c 325 //pc.printf("Waiting for BLE instruction");
jelord 3:122bfc998c4c 326
jelord 3:122bfc998c4c 327 }
jelord 3:122bfc998c4c 328
caseyquinn 7:29b01d5812ee 329
jelord 3:122bfc998c4c 330 //wait(1);
jelord 3:122bfc998c4c 331
jelord 3:122bfc998c4c 332 E2PROM.read(0x00015, startAndEndTime, 12); //Grab start and end times from EEPROM
jelord 3:122bfc998c4c 333 RGB_LED.set_led(0,1,0);
caseyquinn 7:29b01d5812ee 334
caseyquinn 7:29b01d5812ee 335 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 7:29b01d5812ee 336 //UPDATE THIS TO WORK WITH ST RTC INSTEAD
caseyquinn 7:29b01d5812ee 337 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
caseyquinn 7:29b01d5812ee 338
jelord 3:122bfc998c4c 339 while(!RTC_UPAS.compare(startAndEndTime[0], startAndEndTime[1], startAndEndTime[2], startAndEndTime[3], startAndEndTime[4], startAndEndTime[5])) { // this while waits for the start time by looping until the start time
jelord 3:122bfc998c4c 340 wait(0.5);
jelord 3:122bfc998c4c 341
jelord 3:122bfc998c4c 342 RTC_UPAS.get_time();
jelord 3:122bfc998c4c 343
jelord 3:122bfc998c4c 344 }
jelord 3:122bfc998c4c 345
jelord 3:122bfc998c4c 346
jelord 3:122bfc998c4c 347 //Get the proper serial number
jelord 3:122bfc998c4c 348 uint8_t serialBytes[2] = {0,};
jelord 3:122bfc998c4c 349 E2PROM.read(0x00034, serialBytes,2);
jelord 3:122bfc998c4c 350 serial_num = ((uint16_t)serialBytes[1] << 8) | serialBytes[0];
jelord 3:122bfc998c4c 351 calibrations.initialize(serial_num);
jelord 3:122bfc998c4c 352
jelord 3:122bfc998c4c 353 uint8_t logByte[1] = {0,};
jelord 3:122bfc998c4c 354 E2PROM.read(0x00014,logByte,1);
jelord 3:122bfc998c4c 355 logInerval = logByte[0];
jelord 3:122bfc998c4c 356
caseyquinn 7:29b01d5812ee 357
jelord 3:122bfc998c4c 358 //Use the flow rate value stored in eeprom
jelord 3:122bfc998c4c 359 uint8_t flowRateBytes[4] = {0,};
jelord 3:122bfc998c4c 360 E2PROM.read(0x00010,flowRateBytes,4);
jelord 3:122bfc998c4c 361 E2PROM.byteToFloat(flowRateBytes, &volflowSet);
jelord 3:122bfc998c4c 362
jelord 3:122bfc998c4c 363 if(volflowSet<=1.0) {
jelord 3:122bfc998c4c 364 gainFlow = 100;
jelord 3:122bfc998c4c 365 } else if(volflowSet>=2.0) {
jelord 3:122bfc998c4c 366 gainFlow = 25;
jelord 3:122bfc998c4c 367 } else {
jelord 3:122bfc998c4c 368 gainFlow = 25;
jelord 0:2cb2b2ea316f 369 }
jelord 3:122bfc998c4c 370
jelord 3:122bfc998c4c 371 RGB_LED.set_led(1,0,0);
jelord 3:122bfc998c4c 372 press = bmesensor.getPressure();
jelord 3:122bfc998c4c 373 temp = bmesensor.getTemperature();
jelord 3:122bfc998c4c 374 rh = bmesensor.getHumidity();
jelord 3:122bfc998c4c 375
jelord 3:122bfc998c4c 376 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 377 massflowSet = volflowSet*atmoRho;
jelord 3:122bfc998c4c 378 //Digtal pot tf from file: UPAS v2 OSU-PrimaryFlowData FullSet 2015-05-29 CQ mods.xlsx
jelord 3:122bfc998c4c 379
jelord 3:122bfc998c4c 380
jelord 3:122bfc998c4c 381
jelord 3:122bfc998c4c 382
jelord 3:122bfc998c4c 383 DigPot.writeRegister(digital_pot_setpoint);
jelord 3:122bfc998c4c 384 wait(1);
caseyquinn 5:c3252e5d45ca 385 //blower = 1;
jelord 3:122bfc998c4c 386
jelord 3:122bfc998c4c 387 uint8_t subjectLabelOriginal[8] = {0,};
caseyquinn 4:5d004fd997d5 388 E2PROM.read(0x00001, subjectLabelOriginal,8);
caseyquinn 5:c3252e5d45ca 389 //sprintf(filename, "/sd/UPAS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%c%c%c%c%c%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
caseyquinn 5:c3252e5d45ca 390
caseyquinn 4:5d004fd997d5 391 time_t seconds = time(NULL);
caseyquinn 4:5d004fd997d5 392 strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
caseyquinn 4:5d004fd997d5 393 sprintf(filename, "/sd/UPASboardtest_%s.txt", timestr);
jelord 3:122bfc998c4c 394 FILE *fp = fopen(filename, "w");
jelord 3:122bfc998c4c 395 fclose(fp);
jelord 3:122bfc998c4c 396
jelord 3:122bfc998c4c 397 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 398 //Following lines are needed to enter into the initiallization flow control loop
jelord 3:122bfc998c4c 399
jelord 3:122bfc998c4c 400
jelord 3:122bfc998c4c 401 sampledVol = 0.0;
jelord 3:122bfc998c4c 402 RGB_LED.set_led(0,1,0);
caseyquinn 7:29b01d5812ee 403 //log_data();
caseyquinn 7:29b01d5812ee 404 stop.attach(&check_stop, 31); // check if we should shut down every 9 seconds, starting 60s after the start.
caseyquinn 7:29b01d5812ee 405 logg.attach(&log_data, logInerval);
caseyquinn 7:29b01d5812ee 406
jelord 3:122bfc998c4c 407
jelord 3:122bfc998c4c 408 //** end of initalization **//
jelord 3:122bfc998c4c 409 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 410 //---------------------------------------------------------------------------------------------//
jelord 3:122bfc998c4c 411 // Main Control Loop
jelord 3:122bfc998c4c 412
caseyquinn 7:29b01d5812ee 413 while (1) {
caseyquinn 7:29b01d5812ee 414 // Do other things...
caseyquinn 7:29b01d5812ee 415 }
caseyquinn 7:29b01d5812ee 416
jelord 3:122bfc998c4c 417 //logg.attach(&log_data, 30); // uses callbacks or block Interrupts for anything that uses i2c
caseyquinn 4:5d004fd997d5 418 // while(!RTC_UPAS.compare(startAndEndTime[6], startAndEndTime[7], startAndEndTime[8], startAndEndTime[9], startAndEndTime[10], startAndEndTime[11])){
caseyquinn 4:5d004fd997d5 419
jelord 3:122bfc998c4c 420
jelord 0:2cb2b2ea316f 421 }