t

Dependencies:   SDFileSystem BLE_API BufferedSerial DHT22_3 mbed-dev_2 nRF51822 nrf51_rtc

Fork of SDFileSystem_HelloWorld by mbed official

Files at this revision

API Documentation at this revision

Comitter:
amithy
Date:
Fri Nov 10 20:54:05 2017 +0000
Parent:
0:bdbd3d6fc5d5
Child:
3:42fbb9bc132b
Commit message:
t

Changed in this revision

BLE_API.lib Show annotated file Show diff for this revision Revisions of this file
BufferedSerial.lib Show annotated file Show diff for this revision Revisions of this file
DHT22.lib Show annotated file Show diff for this revision Revisions of this file
LIS3DH.h Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-dev.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
nRF51822.lib Show annotated file Show diff for this revision Revisions of this file
nrf51_rtc.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BLE_API.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#65474dc93927
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BufferedSerial.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/sam_grove/code/BufferedSerial/#a0d37088b405
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DHT22.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/amithy/code/DHT22_3/#1460b7a50ec0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LIS3DH.h	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,39 @@
+#define LIS3DH_STATUS_REG_AUX  0x07
+#define LIS3DH_OUT_ADC1_L      0x08
+#define LIS3DH_OUT_ADC1_H      0x09
+#define LIS3DH_OUT_ADC2_L      0x0a
+#define LIS3DH_OUT_ADC2_H      0x0b
+#define LIS3DH_OUT_ADC3_L      0x0c
+#define LIS3DH_OUT_ADC3_H      0x0d
+#define LIS3DH_INT_COUNTER_REG 0x0e
+#define LIS3DH_WHO_AM_I        0x0f
+#define LIS3DH_CTRL_REG0
+#define LIS3DH_TEMP_CFG_REG    0x1f
+#define LIS3DH_CTRL_REG1       0x20
+#define LIS3DH_CTRL_REG2       0x21
+#define LIS3DH_CTRL_REG3       0x22
+#define LIS3DH_CTRL_REG4       0x23
+#define LIS3DH_CTRL_REG5       0x24
+#define LIS3DH_CTRL_REG6       0x25
+#define LIS3DH_REFERENCE       0x26
+#define LIS3DH_STATUS_REG      0x27
+#define LIS3DH_OUT_X_L         0x28
+#define LIS3DH_OUT_X_H         0x29
+#define LIS3DH_OUT_Y_L         0x2a
+#define LIS3DH_OUT_Y_H         0x2b
+#define LIS3DH_OUT_Z_L         0x2c
+#define LIS3DH_OUT_Z_H         0x2d
+#define LIS3DH_FIFO_CTRL_REG   0x2e
+#define LIS3DH_FIFO_SRC_REG    0x2f
+#define LIS3DH_INT1_CFG        0x30
+#define LIS3DH_INT1_SRC        0x31
+#define LIS3DH_INT1_THS        0x32
+#define LIS3DH_INT1_DURATION   0x33
+#define LIS3DH_CLICK_CFG       0x38
+#define LIS3DH_CLICK_SRC       0x39
+#define LIS3DH_CLICK_THS       0x3a
+#define LIS3DH_TIME_LIMIT      0x3b
+#define LIS3DH_TIME_LATENCY    0x3c
+#define LIS3DH_TIME_WINDOW     0x3d
+#define LIS3DH_ACT_THS         0x3e
+#define LIS3DH_ACT_DUR         0x3f
\ No newline at end of file
--- a/SDFileSystem.lib	Fri Dec 07 11:25:01 2012 +0000
+++ b/SDFileSystem.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/SDFileSystem/#c8f66dc765d4
+https://mbed.org/users/neilt6/code/SDFileSystem/#e4d2567200db
--- a/main.cpp	Fri Dec 07 11:25:01 2012 +0000
+++ b/main.cpp	Fri Nov 10 20:54:05 2017 +0000
@@ -1,19 +1,506 @@
+#define LOGDELAY 290
+
 #include "mbed.h"
+#include "BufferedSerial.h"
 #include "SDFileSystem.h"
- 
-SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
- 
-int main() {
-    printf("Hello World!\n");   
- 
-    mkdir("/sd/mydir", 0777);
+#include "ble/BLE.h"
+#include "ble/services/DeviceInformationService.h"
+#include "nrf_soc.h" // for internal Thermo sensor
+#include "nrf51_rtc.h"
+#include "Dht22.h"
+#include <string>
+
+//Serial pc(USBTX, USBRX);
+
+
+char DEVICE_NAME[] = "IAQ"; //enter device name
+const static char datapath[] = "/sd/datalog.txt";
+Ticker wakeUp;
+char hpmbuffer[10];
+bool triggered = true;
+
+/*
+// Sensen Pin Configuration
+*/
+
+SDFileSystem sd(p25, p28, p29, p23, "sd");//Create an SDFileSystem object mosi, miso, sclk
+I2C i2c(p30 , p7); //sda, scl
+DigitalOut adp(p21);
+DigitalOut sample_led(p17); //yellow - sampling
+DigitalOut status_led(p18); //red - status
+
+     
+
+/*
+// Sensor Configuration
+*/
+
+//analog sensors
+AnalogIn spec(p1);
+AnalogIn figCO(p2);
+AnalogIn sharpVOut(p3);
+
+//digital sensors
+BufferedSerial hpm(p9,p11); //tx, rx
+//SoftwareSerial plantower(p10, p12);
+DigitalOut sharpLED(p13); //low = on
+DigitalOut plantowerReset(p10);
+DigitalOut plantowerSet(p12);
+Dht22 dht(p14);
+const int figCO2 = 0x69 << 1; // 8bit I2C address, 0x69 for figaro CO2
+const int DS1307 = 0x68 << 1;
+
+
+/*
+// Global variables for data
+*/
+char rtcbuff[8];
+float dataBuffer[30];
+uint32_t timeNow = 0;
+uint32_t wakeTime = 0;
+float sharpPM = 0.0;
+float specCO = 0.0;
+float figaroCO = 0.0;
+int dhtTemp = 0;
+int dhtHum = 0;
+int figaroCO2 = 0;
+int honeywellPM2_5 = 0;
+int honeywellPM10 = 0;
+int plantowerPM1 = 0;
+int plantowerPM2_5 = 0;
+int plantowerPM10 = 0;
+int32_t p_temp = 0;
+float temperature = 0;
+
+/*
+// I2C functions
+*/
+
+void writeReg(int addr8bit, char reg, char val)
+{
+    char tempData[2];
+    tempData[0] = reg;
+    tempData[1] = val;
+    i2c.write(addr8bit, tempData, 2);
+}
+
+void readReg(int addr8bit, uint8_t reg)
+{
+    char tempData[2];
+    tempData[0] = reg;
+    i2c.write(addr8bit, &tempData[0], 1, true);
+    i2c.read(addr8bit, &tempData[1], 1, false);
+}
+
+int twosComp( char bit_msb, char bit_lsb)
+{
+    int16_t myInt=0;
+    myInt = (bit_msb << 8) | (bit_lsb & 0xff);
+    return myInt;
+}
+
+
+/*
+// Sensor interface functions
+*/
+
+void getDHT()
+{
+    dht.read();
+    dhtTemp = dht.getCelsius();
+    dhtHum = dht.getHumidity();
+}
+
+void getFigaroCO2()
+{
+    char readme_msb, readme_lsb;
+    
+    char reg = 0x03;
+    i2c.write(figCO2, &reg, 1, true);
+    i2c.read(figCO2, &readme_lsb, 1, false);
+    
+    reg = 0x04;
+    i2c.write(figCO2, &reg, 1, true);
+    i2c.read(figCO2, &readme_msb, 1, false);
+    
+    figaroCO2 = twosComp(readme_msb,readme_lsb);
+}
+
+void getSharpPM()
+{
+    sharpVOut.read();
+    wait_ms(5);
+    sharpLED = 0;
+    wait_us(280);
+    sharpPM = sharpVOut.read();
+    wait_us(40);
+    sharpLED = 1;
+    wait_us(9680);
+}
+
+void getSpecCO()
+{
+    spec.read();
+    wait_ms(5);
+    specCO = 0.0;
+    for(int i=0; i<128; i++)
+    {
+        specCO += spec.read();
+        wait_ms(2);
+    }
+    specCO = specCO/128.0;    
+}
+
+void getFigaroCO()
+{
+    figCO.read();
+    wait_ms(5);
+    figaroCO = 0.0;
+    //for(int i=0; i<128; i++)
+    //{
+        figaroCO = figCO.read();
+    //    wait_ms(2);
+    //}
+    //figaroCO = figaroCO/128.0;    
+}
+
+void getHPM()
+{
+    for(int i=0; i<8; i++) {
+        hpmbuffer[i]=1;
+    }
+    for(int i=0; i<100; i++) {
+        if(hpm.getc()==0x42) {
+            if(hpm.getc()==0x4d) {
+                for(int i=0; i<8; i++) {
+                    hpmbuffer[i]=hpm.getc();
+                }
+                honeywellPM2_5 = twosComp(hpmbuffer[4],hpmbuffer[5]);
+                honeywellPM10 = twosComp(hpmbuffer[6],hpmbuffer[7]);
+                break;
+            }
+        }
+    }
+}
+
+void getTime()
+{
+        char readreg;
+    
+        char reg = 0x00;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[0] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x01;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[1] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x02;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[2] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x03;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[3] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x04;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[4] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x05;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[5] = readreg - 6 * (readreg >> 4);;
+        
+        reg = 0x06;
+        i2c.write(DS1307, &reg, 1, true);
+        i2c.read(DS1307, &readreg, 1, false);
+        rtcbuff[6] = readreg - 6 * (readreg >> 4);;
+        
+        struct tm t;
+        
+        t.tm_year = (int)rtcbuff[6]+100;
+        t.tm_mon = (int)rtcbuff[5]-1;           // Month, 0 - jan
+        t.tm_mday = (int)rtcbuff[4];          // Day of the month
+        t.tm_hour = (int)rtcbuff[2];
+        t.tm_min = (int)rtcbuff[1];
+        t.tm_sec = (int)rtcbuff[0];
+        t.tm_isdst = 0;        // Is DST on? 1 = yes, 0 = no, -1 = unknown
+        timeNow = mktime(&t);
+}
+
+
+void getData()
+{
+    getSharpPM();
+    wait(0.25);
+    
+    getSpecCO();
+    wait(0.25);
+    
+    getFigaroCO();
+    wait(0.25);
     
-    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
+    getFigaroCO2();
+    wait(0.25);
+
+    getHPM();
+    for(int i = 0; i<5; i++)
+    {
+        if (honeywellPM2_5 == 0 && honeywellPM10 == 0)
+        {
+            wait(0.25);
+            getHPM();
+        }
+    }
+    wait(0.25);
+    
+    getDHT();
+    if (dhtTemp == 0) 
+    {   
+        wait(5);
+        getDHT();
+    }
+    wait(0.25);
+    
+    
+}
+
+ 
+
+
+
+
+
+/*
+// SD functions
+*/
+
+void sd_begin()
+{
+    DigitalOut mosi(p25); //out
+    DigitalIn miso(p28); //in
+    miso.mode(PullUp);
+    DigitalOut sclk(p29); //out
+    DigitalOut cs(p23,1); //out
+
+    plantowerReset = 1;
+    plantowerSet = 1;
+    adp = 1; //turn on ADP194
+    sharpLED = 1;
+    status_led=1; //turn on status led - red
+    wait(0.25);
+}
+
+
+void sd_sleep()
+{
+    wait(0.25);
+    status_led=0; //turn off status led - red
+    adp = 0; //turn off ADP194
+    sharpLED = 0;
+    //set all SPI as outputs pulled down
+    DigitalOut mosi(p25,0);
+    DigitalOut miso(p28,0);
+    DigitalOut sclk(p29,0);
+    DigitalOut cs(p23,0);
+}
+
+void sd_header_write()//Write header sd card
+{
+    sd.mount();//Mount the filesystem
+    wait(0.25);//wait for stabilization
+
+    FILE *fp = fopen(datapath, "a"); //will overwrite any existing datalog.txt file
+    if (fp != NULL) {
+        fprintf(fp,"Time,PM2_5,PM10,sharpPM,dhtTemp,dhtHum,specCO,figaroCO,figaroCO2\r\n");
+        wait(0.25); //seconds
+    }
+    fclose(fp);
+    sd.unmount();//Unmount the filesystem
+}
+
+void saveData() 
+{
+    sd.mount();//Mount the filesystem
+    wait(0.25);//wait for stabilization
+
+    FILE *fp = fopen(datapath, "a"); //will overwrite any existing datalog.txt file
+    if (fp != NULL) {
+        //fprintf(fp,"%d,%.4f\r\n",temperature);
+        fprintf(fp,"%d,%d,%d,%.4f,%d,%d,%.4f,%.4f,%d\r\n",timeNow,honeywellPM2_5,honeywellPM10,sharpPM,dhtTemp,dhtHum,specCO,figaroCO,figaroCO2);
+        wait(0.25); //seconds
+    }
+    fclose(fp);
+    sd.unmount();//Unmount the filesystem
+
+}
+
+/*
+// Clock functions
+*/
+
+void checkTime() 
+{
+    timeNow = rtc.time();
+    if (timeNow > wakeTime) {
+        triggered = true;
     }
-    fprintf(fp, "Hello fun SD Card World!");
-    fclose(fp); 
+    //timeNow = rtc.time();
+    //wakeTime = timeNow + LOGDELAY;
+}
+
+
+
+
+
+int main(void)
+{    
+    /*
+    //set time
+    int val = 5;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x00,val);
+    
+    val = 5;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x01,val);
+    
+    val = 0;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x02,val);
+    
+    val = 20;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x03,val);
+    
+    val = 26;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x04,val);
+    
+    val = 10;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x05,val);
+    
+    val = 17;
+    val = ( ( val / 10 ) * 0x10 ) + ( val % 10 );
+    writeReg(DS1307,0x06,val);
+    
+    while(1)
+    {
+        sample_led = !sample_led;
+        wait(1);
+    }
+
+    */
+    
+    //pc.printf("starting up... \n");
+    /*
+    sd_begin();
+    while(1)
+    {   
+    
+        
+        while(1)
+        {
+            if(hpm.getc()==0x42)
+            {
+                if(hpm.getc()==0x4d)
+                {
+                    for(int i=0;i<8;i++)
+                    {
+                        hpmbuffer[i]=hpm.getc();
+                    }
+                    break;
+                }
+            }
+        }
+
+        FILE *fp = fopen(datapath, "a"); //will overwrite any existing datalog.txt file
+        if (fp != NULL) {
+            fprintf(fp,"%x,%x,%x,%x\r\n",hpmbuffer[4],hpmbuffer[5],hpmbuffer[6],hpmbuffer[7]);
+            //fprintf(fp,"%d,%.4f,%.4f,%.4f,%.4f\r\n",timeNow,sharpPM,specCO,figaroCO,figaroCO2        
+        }
+        fclose(fp);
+        */
+        
+/*
+        char readme_msb, readme_lsb;
+    
+        char reg = 0x03;
+        i2c.write(figCO2, &reg, 1, true);
+        i2c.read(figCO2, &readme_lsb, 1, false);
+        
+        reg = 0x04;
+        i2c.write(figCO2, &reg, 1, true);
+        i2c.read(figCO2, &readme_msb, 1, false);
+        
+        int16_t xval = twosComp(readme_msb,readme_lsb);
+        figaroCO2 = (float)xval/15987; 
+        
+        pc.printf("figaroCO2 %f\n", figaroCO2);
+        wait(1);
+    */
  
-    printf("Goodbye World!\n");
-}
+    BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
+    ble.init();
+    sd_begin();
+    sd_header_write();
+    sample_led = 1;
+
+    while (ble.hasInitialized()  == false) {
+    }
+    
+    while(true) {  
+        
+        //wait(5);
+        if(triggered)
+        {
+            sd_begin();
+            wait(1);
+/*        
+        getTime();
+        getDHT();
+        pc.printf("%ld,%d,%d,%d,%d,%d,%d,%d,",timeNow,rtcbuff[0],rtcbuff[1],rtcbuff[2],rtcbuff[3],rtcbuff[4],rtcbuff[5],rtcbuff[6]);
+        pc.printf("%d,%d\n\r",dhtTemp,dhtHum);
+        wait(5);    
+*/
+        
+        //getData();
+        //specCO = spec.read();
+        //sd_temp_get(&p_temp);
+        //temperature = float(p_temp)/4.;
+                
+        //pc.printf("%.4f\n",specCO);
+        
+            getTime();
+            wakeTime = timeNow + LOGDELAY;
+            
+            for(int i = 0; i < 2; i++) 
+            {
+                getTime();
+                sample_led = 1;
+                getData();
+                sample_led = 0;
+                saveData();
+            }
+            
+            
+            rtc.set_time(timeNow);
+            triggered = false;
+            sd_sleep(); //powers off everything
+        }
+        else 
+        {        
+            wakeUp.attach(&checkTime, 10); 
+            ble.waitForEvent();
+            __wfe();
+            wakeUp.detach();
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-dev.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/amithy/code/mbed-dev_2/#90c9440abc83
--- a/mbed.bld	Fri Dec 07 11:25:01 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/63cdd78b2dc1
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF51822.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/amithy/code/nRF51822/#7f459d371b75
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nrf51_rtc.lib	Fri Nov 10 20:54:05 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/fxschumacher/code/nrf51_rtc/#3677a016109b