Degree Computation

Dependencies:   aconno_SEGGER_RTT LSM9DS1 Si7006A20 adc52832_common aconnoMPL115A1 aconno_bsp

Files at this revision

API Documentation at this revision

Comitter:
jurica238814
Date:
Fri Dec 14 13:33:03 2018 +0100
Parent:
2:234a43ac483a
Child:
4:cb3513aa9814
Commit message:
All sensors. Cleaner code

Changed in this revision

aconnoHelpers/aconnoHelpers.cpp Show annotated file Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/aconnoHelpers/aconnoHelpers.cpp	Fri Dec 14 13:01:55 2018 +0100
+++ b/aconnoHelpers/aconnoHelpers.cpp	Fri Dec 14 13:33:03 2018 +0100
@@ -21,8 +21,6 @@
 extern DigitalOut temperaturePower;
 extern DigitalOut shdn;
 extern DigitalOut power;
-Si7006   *si;
-extern LSM9DS1  *mems;
 vector3_s memsAccelerometerInit;
 vector3_s memsGyroscopeInit;
 vector3_s memsMagnetometerInit;
@@ -30,6 +28,12 @@
 extern advertising_packet advertisementPacket;
 DigitalOut cs(p7);
 
+I2C i2c(I2C_DATA, I2C_CLK);   
+Si7006 si(&i2c);
+SPI spi(SPI_MOSI, SPI_MISO, SPI_SCLK);
+MPL115A1 mpl115a1(spi, cs);
+LSM9DS1 mems(&i2c);
+
 float getLight(){
     return ((float)analogIn.getData()[1])/ADC_RESOLUTION * VALUE_TO_PERCENTAGE;
 }
@@ -70,22 +74,22 @@
 
 float getHumidity(){
     float result;
-    si->getHumidity(&result);
+    si.getHumidity(&result);
     return result;
 }
 
 void readGyroscope(vector3_s *gyroscopeData){
-    mems->readGyroscope((int16_t *)gyroscopeData);
+    mems.readGyroscope((int16_t *)gyroscopeData);
     *gyroscopeData -= memsGyroscopeInit;
 }
 
 void readAccelerometer(vector3_s *accelerometerData){
-    mems->readAccelerometer((int16_t *)accelerometerData);
+    mems.readAccelerometer((int16_t *)accelerometerData);
     *accelerometerData -= memsAccelerometerInit;
 }
 
 void readMagnetometer(vector3_s *magnetometerData){
-    mems->readMagnetometer((int16_t *)magnetometerData);
+    mems.readMagnetometer((int16_t *)magnetometerData);
     *magnetometerData -= memsMagnetometerInit;
 }
 
@@ -116,63 +120,54 @@
     memsMagnetometerInit /= CALIBRATION_STEPS;
 }
 
-void disableI2C()
-{
-    
-    NRF_TWI0->ENABLE = 0;
-    NRF_TWI0->PSELSCL = 0xFFFFFFFF;
-    NRF_TWI1->ENABLE = 0;
-    NRF_TWI1->PSELSCL = 0xFFFFFFFF;
-    NRF_TWIM0->ENABLE = 0;
-    NRF_TWIM0->PSEL.SCL = 0x80000000;
-    NRF_TWIM0->PSEL.SDA = 0x80000000;
-    NRF_TWIM1->ENABLE = 0;
-    NRF_TWIM0->PSEL.SCL = 0x80000000;
-    NRF_TWIM0->PSEL.SDA = 0x80000000;
-    
-    //foo = new DigitalOut(I2C_DATA);
-    //bar = new DigitalOut(I2C_CLK);
-    
-    //foo = 1;
-    //bar = 1;
-   
-}
-
 void updateData()
 {
     static uint8_t advertisementType = 0;
     int16_t temp_acc[3];
     BLE &ble = BLE::Instance();
 
-    I2C i2c(I2C_DATA, I2C_CLK);   
-    si = new Si7006(&i2c);
-    SPI spi(SPI_MOSI, SPI_MISO, SPI_SCLK);
-    MPL115A1 mpl115a1(spi, cs);
-    
     float result;
-    
-    NRF_SAADC->ENABLE = 1;
-    power = 1;
-    temperaturePower = 1;
-    lightPower = 1;
-    shdn = 1;
-    analogIn.addChannel(9); // Set VDD  as source to SAADC
-    analogIn.addChannel(6); // Light
-    analogIn.addChannel(7); // Temp
-    analogIn.calibrate();
-    wait_ms(WAKEUP_TIME_DELAY_MS);
 
-    analogIn.updateData();
+    if(advertisementType < 1)
+    {
+        power = 1;
+        mems.startAccelerometer();
+        mems.startGyroscope();
+        mems.startMagnetometer();
+        wait_ms(WAKEUP_TIME_DELAY_MS);
+        advertisementPacket.type = 0x00;
+        readGyroscope((vector3_s *)advertisementPacket.gyroscope);
+        readAccelerometer((vector3_s *)temp_acc);
+        readMagnetometer((vector3_s *)advertisementPacket.magnetometer);
+        advertisementPacket.acc_lsb_value = (0xF9E);//(0x3D80);
+        advertisementPacket.accelerometer[0] = temp_acc[1];
+        advertisementPacket.accelerometer[1] = temp_acc[0];
+        advertisementPacket.accelerometer[2] = temp_acc[2];
+        // ^--- That's in ug cuz MSB is 1
+    }
+    else
+    {   
+        NRF_SAADC->ENABLE = 1;
+        power = 1;
+        temperaturePower = 1;
+        lightPower = 1;
+        shdn = 1;
+        analogIn.addChannel(9); // Set VDD  as source to SAADC
+        analogIn.addChannel(6); // Light
+        analogIn.addChannel(7); // Temp
+        analogIn.calibrate();
+        wait_ms(WAKEUP_TIME_DELAY_MS);
+        analogIn.updateData();
+        wait_ms(WAKEUP_TIME_DELAY_MS);
 
-    advertisementPacket.type = 0x01;
-    advertisementPacket.temperature = getTemperature();
-    advertisementPacket.light       = getLight();
-    advertisementPacket.humidity    = getHumidity();
-    advertisementPacket.pressure    = mpl115a1.getPressure();
+        advertisementPacket.type = 0x01;
+        advertisementPacket.temperature = getTemperature();
+        advertisementPacket.light       = getLight();
+        advertisementPacket.humidity    = getHumidity();
+        advertisementPacket.pressure    = mpl115a1.getPressure();
+        advertisementPacket.battery     = getBattery();
+    }
 
-    //disableI2C();
-    //I2C dummy(I2C_DATA, I2C_CLK);
-    
     SPI dummySpi(SPI_MOSI, SPI_MISO, SPI_SCLK);
     power = 0;
     shdn = 0;
@@ -180,16 +175,9 @@
     lightPower = 0;
     NRF_SAADC->ENABLE = 0;
 
-    
-    //DigitalOut foo(I2C_DATA);
-    //DigitalOut bar(I2C_CLK);
-    //foo = 1;
-    //bar = 1; 
-    
     if(++advertisementType > 2) advertisementType = 0;    
     adv_data = ble.gap().getAdvertisingPayload();
-    adv_data.updateData(adv_data.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertisementPacket));
+    adv_data.updateData(adv_data.MANUFACTURER_SPECIFIC_DATA, 
+                (uint8_t *)&advertisementPacket, sizeof(advertisementPacket));
     ble.gap().setAdvertisingPayload(adv_data);
-
-    //printf("Data updated.\r\n");
 }
\ No newline at end of file
--- a/source/main.cpp	Fri Dec 14 13:01:55 2018 +0100
+++ b/source/main.cpp	Fri Dec 14 13:33:03 2018 +0100
@@ -22,7 +22,6 @@
 
 GapAdvertisingData adv_data = GapAdvertisingData();
 advertising_packet advertisementPacket;
-LSM9DS1  *mems;
 DigitalOut lightPower(p28);
 DigitalOut temperaturePower(p31);
 DigitalOut shdn(p6);
@@ -61,8 +60,6 @@
 
 int main()
 {
-    //printf("Main started.\r\n");
-
     BLE &ble = BLE::Instance();
     ble.init(bleInitComplete);
     ble.onEventsToProcess(scheduleBleEventsProcessing);
@@ -70,32 +67,6 @@
     
     updateDataThread.start(updateDataTask);
     sendDataThread.start(sendDataTask);
-    
-    
-    /*
-    //DigitalOut bar(I2C_DATA);
-    //DigitalOut foo(I2C_CLK);
-    I2C *i2c;
-    float result;
-    while(true)
-    {
-        power = 1;
-        ThisThread::sleep_for(500);
-        i2c = new I2C(I2C_DATA, I2C_CLK);
-        //I2C i2c(I2C_DATA, I2C_CLK);
-        Si7006 si(i2c);
-        si.getHumidity(&result);
-        printf("Humidity is: %f\r\n", result);
-        power = 0;
-        //wait_ms(1000);
-        
-        //foo = 1;
-        //bar = 1;     
-
-        //I2C fooI2C(I2C_DATA, I2C_CLK);
-        ThisThread::sleep_for(1000);
-    }
-    */
 
     while(true)
     {