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 Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
caseyquinn
Date:
Tue Dec 08 05:41:19 2015 +0000
Parent:
18:c911a8928d0b
Commit message:
semi works. seems to be hanging at the SD card file creation and writing calls.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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();
+        }
 
 }