Initial version for the 2 chip MMA8653/MAG3110 version of the BBC Microbit

Dependencies:   mbed AES BLE_API nRF51822 smallAES

Revision:
4:052ba96b27f5
Parent:
2:4871b5ad7938
--- a/accelService.h	Mon Sep 30 11:59:42 2019 +0000
+++ b/accelService.h	Wed Oct 02 18:52:21 2019 +0000
@@ -19,8 +19,8 @@
 #include <mbed.h>
 // Accelerometer : LSM303
 I2C i2c(P0_30, P0_0); // SDA is on P0_30, SCL is on P0_0
-const int LSM303_ADDRESS = (0x19<<1); 
-//const int MMA8653_ID = 0x5a;
+const int MMA8653_ADDRESS = (0x1d<<1); 
+const int MMA8653_ID = 0x5a;
 class ACCELService {
 public:
     const static uint16_t ACCEL_SERVICE_UUID = 0xA012;
@@ -34,16 +34,12 @@
         GattCharacteristic *charTable[] = {&AccelX,&AccelY,&AccelZ};
         GattService         AccelService(ACCEL_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
         ble.addService(AccelService);
-        // Wake the accelerometer from sleep mode by writing disabling low power mode, setting freq to 10Hz and enabling all three axes
+        // Wake the accelerometer from sleep mode by writing 1 to register number 0x2a    
         char Data[8]; // Declare a buffer for data transfer    
         int Status;
-        Data[0]=0x20;   // wake up LSM303 (max speed, all accel channels)
-        Data[1]=0x77;
-        Status = i2c.write(LSM303_ADDRESS,Data,2);  // Write data to register   
-       
-        Data[0]=0x23;   // enable high resolution mode
-        Data[1]=0x0e; 
-        Status = i2c.write(LSM303_ADDRESS,Data,2);  // Write data to register   
+        Data[0]=0x2a; 
+        Data[1]=1;
+        Status = i2c.write(MMA8653_ADDRESS,Data,2);  // Write data to register    
     }
 
     GattAttribute::Handle_t getValueHandle() const {
@@ -63,27 +59,28 @@
         char Data[8]; // Declare a buffer for data transfer    
         int Status;
         int16_t X;
-                         
-        
-        Data[0]=0x80 + 0x28; // Register number 0x28 has the X data (2 bytes)
-        Status = i2c.write(LSM303_ADDRESS,Data,1,true);  // Write register number
-        Status = i2c.read(LSM303_ADDRESS,Data,2); // Read register contents
-        X = Data[1];
-        X = (X << 8) + Data[0];
+        Data[0]=0x01; // Register number 1 has the X data (2 bytes)
+        Status = i2c.write(MMA8653_ADDRESS,Data,1,true);  // Write register number
+        Status = i2c.read(MMA8653_ADDRESS,Data,2); // Read register contents
+        X = Data[0];
+        X = (X << 8) + Data[1];
+        X = X >> 6; // only 10 bits of data are available
         
         int16_t Y;
-        Data[0]=0x80 + 0x2a; // Register number 0x2a has the Y data (2 bytes)
-        Status = i2c.write(LSM303_ADDRESS,Data,1,true);  // Write register number
-        Status = i2c.read(LSM303_ADDRESS,Data,2); // Read register contents
-        Y = Data[1];
-        Y = (Y << 8) + Data[0];
+        Data[0]=0x03; // Register number 3 has the Y data (2 bytes)
+        Status = i2c.write(MMA8653_ADDRESS,Data,1,true);  // Write register number
+        Status = i2c.read(MMA8653_ADDRESS,Data,2); // Read register contents
+        Y = Data[0];
+        Y = (Y << 8) + Data[1];
+        Y = Y >> 6; // only 10 bits of data are available        
         
         int16_t Z;
-        Data[0]=0x80 + 0x2c; // Register number 0x2c has the Z data (2 bytes)
-        Status = i2c.write(LSM303_ADDRESS,Data,1,true);  // Write register number
-        Status = i2c.read(LSM303_ADDRESS,Data,2); // Read register contents
-        Z = Data[1];
-        Z = (Z << 8) + Data[0];
+        Data[0]=0x05; // Register number 1 has the Z data (2 bytes)
+        Status = i2c.write(MMA8653_ADDRESS,Data,1,true);  // Write register number
+        Status = i2c.read(MMA8653_ADDRESS,Data,2); // Read register contents
+        Z = Data[0];
+        Z = (Z << 8) + Data[1];
+        Z = Z >> 6; // only 10 bits of data are available
         
         updateAccelX(X);
         updateAccelY(Y);