![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
This is a basic program that provides the necessary BLE service to allow communications with the UPAS
Dependencies: BLE_API mbed nRF51822 CronoDot EEPROM NCP5623BMUTBG ADS1115 BME280 Calibration_one MCP40D17 SDFileSystem LSM303 SI1145 STC3100
Fork of BLE_Button by
Diff: main.cpp
- Revision:
- 19:9886f667a62a
- Parent:
- 18:c911a8928d0b
--- a/main.cpp Tue Dec 08 05:03:24 2015 +0000 +++ b/main.cpp Tue Dec 08 05:41:19 2015 +0000 @@ -34,7 +34,8 @@ I2C i2c(p22, p20); Adafruit_ADS1115 ads(&i2c); Calibration calibrations(7); //Default serial/calibration if there are no values for the selected option - +MCP40D17 DigPot(&i2c); +BME280 bmesensor(p22, p20); BLE ble; /*EEPROM ADDRESSING: @@ -63,6 +64,47 @@ int RunReady =0; +float press; +float temp; +float rh; + +int uv; + +float compass; +float accel_x; +float accel_y; +float accel_z; +float accel_comp; + +int vInReading; +int vBlowerReading; +int omronDiff; +float omronVolt; //V +int omronReading; +float atmoRho; //g/L + +float massflow; //g/min +float volflow; //L/min +float volflowSet = 1.0; //L/min +int logInerval = 10; //seconds + +float massflowSet; +float deltaVflow = 0.0; +float deltaMflow = 0.0; +float gainFlow; +float sampledVol; //L, total sampled volume + +int digital_pot_setpoint; //min = 0x7F, max = 0x00 +int digital_pot_set; +int digital_pot_change; +int digitalpotMax = 127; +int digitalpotMin = 2; + +//char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt"; +char filename[] = "/sd/UPASLOG00.txt"; +SDFileSystem sd(SPIS_PSELMOSI, SPIS_PSELMISO, SPIS_PSELSCK, SPIS_PSELSS, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (p12, p13, p15, p14) + + const static char DEVICE_NAME[] = "UPAS"; //Will hold the actual name of the whichever UPAS is being connected to static const uint16_t uuid16_list[] = {UPAS_Service::UPAS_SERVICE_UUID}; //Currently a custom 16-bit representation of 128-bit UUID @@ -128,6 +170,61 @@ } } +void log_data() +{ + //logg.detach(); + //logg.attach(&log_data, logInerval); // reading and logging data must take significintly less than 0.5s. This can be increased. + RGB_LED.set_led(0,0,0); + RTC.get_time(); + //*****************************************// + //RTC.get_time(); //debug + //pc.printf("%02d:%02d:%02d on %d/%d/%d before fmod \r\n",RTC.hour, RTC.minutes, RTC.seconds, RTC.month, RTC.date, RTC.year);//debug + //*****************************************// + + + + /* while(fmod(secondsD,logInerval)!=0 || floor(secondsD)==floor(lastsecondD)) { + //pc.printf("%f, %f\r\n", floor(secondsD), floor(lastsecondD)); + RTC.get_time(); + secondsD = RTC.seconds; + wait_ms(100); + } + lastsecondD = secondsD; + */ + //*****************************************// + //RTC.get_time(); //debug + //pc.printf("%02d:%02d:%02d on %d/%d/%d after fmod \r\n",RTC.hour, RTC.minutes, RTC.seconds, RTC.month, RTC.date, RTC.year);//debug + //*****************************************// + DigPot.writeRegister(digital_pot_setpoint); + omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V + omronVolt = (omronReading*4.096)/(32768*2); + + vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0 + vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0 + omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3 + press = bmesensor.getPressure(); + temp = bmesensor.getTemperature()-5.0; + rh = bmesensor.getHumidity(); + uint16_t fuel = gasG.getCounter(); + + + + FILE *fp = fopen(filename, "a"); + fprintf(fp, "%02d,%02d,%02d,%02d,%02d,%02d,",RTC.year, RTC.month,RTC.date,RTC.hour,RTC.minutes,RTC.seconds); + fprintf(fp, "%1.3f,%1.3f,%2.2f,%4.2f,%2.1f,%1.3f,", omronVolt,massflow,temp,press,rh,atmoRho); + fprintf(fp, "%1.3f,%5.1f,%1.1f,%1.1f,%1.1f,%1.1f,", volflow, sampledVol, accel_x, accel_y, accel_z, accel_comp); + fprintf(fp, "%.1f,", compass); + fprintf(fp, "%d," ,uv); + fprintf(fp, "%d,%d,%d,%d,%d," ,omronReading, vInReading, vBlowerReading, omronDiff,gasG.getAmps()); + fprintf(fp, "%d,%d,%d,%1.3f,%1.3f,", gasG.getVolts(), gasG.getCharge(),digital_pot_set, deltaMflow, deltaVflow); + fclose(fp); + wait(5); + RGB_LED.set_led(0,1,0); + + +} + + int main(void) { Ticker ticker; @@ -168,6 +265,7 @@ RGB_LED.set_led(3,0,2); blower=1; RunReady=0; + break; } if(RunReady==2 && blower ==1){ //Code used to see if one-click run is done. blower=0; @@ -177,7 +275,7 @@ if(RunReady==10){ //Check to see if app is done with configurations blower = 0; ble.gap().stopAdvertising(); - break; + //break; } } uint8_t startAndEndTime[12] = {0,}; @@ -195,6 +293,32 @@ RTC.get_time(); } - pbKill = 0; // this is were we shut everything down + //pbKill = 0; // this is were we shut everything down + + RGB_LED.set_led(1,0,0); + //The filename creation isn't working... + /* + for (uint8_t i = 0; i < 100; i++) { + filename[11] = i/10 + '0'; + filename[12] = i%10 + '0'; + FILE *fp = fopen(filename, "r"); + if (fp == NULL) { + // only open a new file if it doesn't exist + FILE *fp = fopen(filename, "w"); + fclose(fp); + break; // leave the loop! + } + } + */ + wait(10); + RGB_LED.set_led(0,0,1); + + wait(10); + + while(1) { + + + log_data(); + } }