Denwis La / Mbed OS mDot_Send_Data

Dependencies:   libmDot-dev-mbed5-deprecated ISL29011

Fork of mdot-examples by 3mdeb

Revision:
17:0a8d151af3c6
Parent:
16:12f38e4755de
Child:
18:0185bc4b9935
--- a/peer_to_peer_example.cpp	Sat Dec 09 03:38:19 2017 +0000
+++ b/peer_to_peer_example.cpp	Sun Dec 10 01:16:02 2017 +0000
@@ -19,6 +19,7 @@
 // * https://developer.mbed.org/teams/MultiTech/code/libxDot-mbed5/        //
 /////////////////////////////////////////////////////////////////////////////
 
+
 /////////////////////////////////////////////////////////////
 // * these options must match between the two devices in   //
 //   order for communication to be successful
@@ -42,6 +43,7 @@
 //InterruptIn INT1();
 //InterruptIn INT2();
 
+DigitalOut led1(LED1);
 
 // ADXL372 Slave I2C
 I2C ADXL372(I2C_SDA, I2C_SCL);  // (D14,D15) (MISO, CS)
@@ -69,6 +71,8 @@
 const int DS7505s_Address_8bit = DS7505s_Address_7bit << 1; // Same
 
 
+int counter = 0;
+
 //-------------------All prototype functions-----------------------//
 void ADXL372Initialize(void);
 
@@ -104,7 +108,9 @@
                 "b: Initialize Accelerometer with SPI\n\r"
                 "c: Check data in status register with SPI\n\r"
                 "d: Perform self test with SPI\n\r"
-                "e: Perform two's complement on accel data\n\r");
+                "e: Perform two's complement on accel data\n\r"
+                "g: Set temperature critical to 24 celsius\n\r"
+                "h: Print interrupt counter\n\r");
 }
 
 
@@ -136,6 +142,11 @@
 }
 ////////////////////////////////////////////////////////////////////////////////
 
+void CriticalTemperatureInterrupt(void){
+    
+    counter++;
+}
+
 
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -174,6 +185,8 @@
 
     // Change baud rate in serial terminal to this value
     pc.baud(115200);
+    ADXL372.frequency(300000);
+    ADT7410_Int.fall(&CriticalTemperatureInterrupt);
     
     
     mts::MTSLog::setLogLevel(mts::MTSLog::TRACE_LEVEL);
@@ -315,16 +328,21 @@
                 for(int i = 0; i < 15; ++i){
                     regAddress = 0x08;  // This is the register address for XData
                     accelValues = accelerometerI2CRead(regAddress);
-                    Xmsb = twosComplementConversion(*(accelValues + 0));
-                    Xlsb = twosComplementConversion(*(accelValues + 1));
-                    Ymsb = twosComplementConversion(*(accelValues + 2));
-                    Ylsb = twosComplementConversion(*(accelValues + 3));
-                    Zmsb = twosComplementConversion(*(accelValues + 4));
-                    Zlsb = twosComplementConversion(*(accelValues + 5));
+                    Xmsb = *(accelValues + 0);
+                    Xlsb = *(accelValues + 1);
+                    Ymsb = *(accelValues + 2);
+                    Ylsb = *(accelValues + 3);
+                    Zmsb = *(accelValues + 4);
+                    Zlsb = *(accelValues + 5);
                     
                     XData = (Xmsb << 8 | Xlsb) >> 4;  // Combine two bytes into short int, remove last 4 flag bits
                     YData = (Ymsb << 8 | Ylsb) >> 4;
                     ZData = (Zmsb << 8 | Zlsb) >> 4;
+                    
+                    XData = twosComplementConversion(XData);
+                    YData = twosComplementConversion(YData);
+                    ZData = twosComplementConversion(ZData);
+                    
                     pc.printf("\n %d: X: 0x%x | Y: 0x%x | Z: 0x%x \n\r", i+1, XData, YData, ZData);
                     wait(0.2);
                 }
@@ -344,14 +362,32 @@
             case 51:    // 3
                 pc.printf("Reading raw values from accelerometer\n\r");
                 for(int i = 0; i < 15; ++i){
-                    regAddress = 0x08;
+                    regAddress = 0x08;  // This is the register address for XData
                     accelValues = accelerometerI2CRead(regAddress);
-                    Xmsb = twosComplementConversion(*(accelValues + 0));
-                    Xlsb = twosComplementConversion(*(accelValues + 1));
-                    Ymsb = twosComplementConversion(*(accelValues + 2));
-                    Ylsb = twosComplementConversion(*(accelValues + 3));
-                    Zmsb = twosComplementConversion(*(accelValues + 4));
-                    Zlsb = twosComplementConversion(*(accelValues + 5));
+                    Xmsb = *(accelValues + 0);
+                    Xlsb = *(accelValues + 1);
+                    Ymsb = *(accelValues + 2);
+                    Ylsb = *(accelValues + 3);
+                    Zmsb = *(accelValues + 4);
+                    Zlsb = *(accelValues + 5);
+                    
+                    XData = (Xmsb << 8 | Xlsb) >> 4;  // Combine two bytes into short int, remove last 4 flag bits
+                    YData = (Ymsb << 8 | Ylsb) >> 4;
+                    ZData = (Zmsb << 8 | Zlsb) >> 4;
+                    
+                    XData = twosComplementConversion(XData);
+                    YData = twosComplementConversion(YData);
+                    ZData = twosComplementConversion(ZData);
+                    
+                    Xlsb = XData & 0xFF;
+                    Xmsb = XData >> 8;
+                    
+                    Ylsb = YData & 0xFF;
+                    Ymsb = YData >> 8;
+                    
+                    Zlsb = ZData & 0xFF;
+                    Zmsb = ZData >> 8;
+                    
                     pc.printf("\n %d: X:: H: %x | L: %x | Y:: H: %x | L: %x | Z: H: %x | L: %x \n\r", i+1, Xmsb, 
                                                                                                            Xlsb, 
                                                                                                            Ymsb,
@@ -479,6 +515,28 @@
                 wait(0.2);
                 
                 break;
+            case 102:   // f: check register 0x08 and 0x09 for critical temperature
+                char * critDatapointer;
+                uint8_t CritMSB;
+                uint8_t CritLSB;
+                uint16_t CritData;
+                critDatapointer  = ADT7410Read(0x08);
+                
+                CritMSB = *(critDatapointer + 0);
+                CritLSB = *(critDatapointer + 1);
+                
+                CritData = (CritMSB << 8) | CritLSB;
+                
+                pc.printf("H: 0x%x | L: 0x%x | Data: 0x%x CritData\n\r", CritMSB, CritLSB, CritData);
+                break;
+            case 103:   // g: set critical temperature to 30 celsius
+                ADT7410Write(0x08, 0x01);
+                ADT7410Write(0x09, 0x80);   
+                ADT7410Write(0x03, 0x08);   // Turn INT HIGH, works for the interrupt pin
+                break;
+            case 104:   // h: get count value
+                pc.printf("Count Value: %d\n\r", counter);
+                break;
             default:
                 printMenu();
                 break;
@@ -583,6 +641,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 void ADXL372Initialize(void){
     accelerometerI2CWrite(0x3F, 0x0F);  // Enable I2C highspeed,Low Pass, High pass and full bandwidth measurement mode
+    accelerometerI2CWrite(0x38, 0x01);  // Enable the High pass filter corner 1 at register 0x38
 /*     accelerometerI2CWrite(0x24, 0x01);  // X used for activity threshold
     accelerometerI2CWrite(0x26, 0x01);  // Y used for activity threshold
     accelerometerI2CWrite(0x28, 0x01);  // Z used for activity threshold  */
@@ -829,7 +888,7 @@
         pc.printf("Passed\n\r");
     }else {pc.printf("FAILED\n\r");}
 }
-////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////g
 
 // Used to clear serial buffer in beginning
 ////////////////////////////////////////////////////////////////////////////////