MGC3130 communication test

Dependencies:   MGC3130 mbed

Revision:
1:a6f1d535bbdb
Parent:
0:41f53df528da
--- a/main.cpp	Fri Feb 21 13:02:09 2014 +0000
+++ b/main.cpp	Tue Oct 13 10:53:07 2015 +0000
@@ -1,68 +1,48 @@
 #include "mbed.h"
- 
-#define LM75_REG_TEMP (0x00) // Temperature Register
-#define LM75_REG_CONF (0x01) // Configuration Register
-#define LM75_ADDR     (0x90) // LM75 address
- 
-I2C i2c(I2C_SDA, I2C_SCL);
- 
+#include "MGC3130.h"
+
 DigitalOut myled(LED1);
  
 Serial pc(SERIAL_TX, SERIAL_RX);
  
-volatile char TempCelsiusDisplay[] = "+abc.d C";
+    /** 
+    * IS2 is available for address selection and enables the user to connect up to two MGC3X30 devices on the same bus without address conflict.
+    * The MGC3X30 I2C addresses are 0x42 and 0x43. They are given as device addresses without the R/W bit.
+    * In addition, MGC3X30 requires a dedicated transfer status line (TS), which features a
+    * data transfer status function. The TS is used by both I2C Master and Slave to control
+    * the data flow. I2C SCL, I2C SDA and TS lines require an open-drain connection on
+    * MGC3X30 and the connected host controller. To function properly, I2C SCL and I2C
+    * SDA need to be pulled up to VCC with 1.8 kΩ resistors and the TS line needs to be
+    * pulled up to VCC with a 10 kΩ resistor.
+    *
+    * @param sda I2C sda signal
+    * @param scl I2C scl signal
+    * @param EI0 transfer status line
+    * @param IS2 High->true, Low->false
+    *
+    */
+     
+MGC3130 gestic(I2C_SDA, I2C_SCL, PB_1, false ); 
+
+SensorData *data;
+
  
 int main()
 {
  
-    char data_write[2];
-    char data_read[2];
- 
-    /* Configure the Temperature sensor device STLM75:
-    - Thermostat mode Interrupt
-    - Fault tolerance: 0
-    */
-    data_write[0] = LM75_REG_CONF;
-    data_write[1] = 0x02;
-    int status = i2c.write(LM75_ADDR, data_write, 2, 0);
-    if (status != 0) { // Error
-        while (1) {
-            myled = !myled;
-            wait(0.2);
-        }
-    }
+    pc.printf("Hello World !\r\n");
  
     while (1) {
-        // Read temperature register
-        data_write[0] = LM75_REG_TEMP;
-        i2c.write(LM75_ADDR, data_write, 1, 1); // no stop
-        i2c.read(LM75_ADDR, data_read, 2, 0);
- 
-        // Calculate temperature value in Celcius
-        int tempval = (int)((int)data_read[0] << 8) | data_read[1];
-        tempval >>= 7;
-        if (tempval <= 256) {
-            TempCelsiusDisplay[0] = '+';
-        } else {
-            TempCelsiusDisplay[0] = '-';
-            tempval = 512 - tempval;
-        }
- 
-        // Decimal part (0.5°C precision)
-        if (tempval & 0x01) {
-            TempCelsiusDisplay[5] = 0x05 + 0x30;
-        } else {
-            TempCelsiusDisplay[5] = 0x00 + 0x30;
-        }
- 
-        // Integer part
-        tempval >>= 1;
-        TempCelsiusDisplay[1] = (tempval / 100) + 0x30;
-        TempCelsiusDisplay[2] = ((tempval % 100) / 10) + 0x30;
-        TempCelsiusDisplay[3] = ((tempval % 100) % 10) + 0x30;
+        data = gestic.readSensorData();
+        if (data == NULL){
+            pc.printf("Data not avail\r\n");
+            }
+            else{
+                if (NULL != data->getxyzPosition())
+                    pc.printf("Got position data \r\n");
+                }
  
         // Display result
-        pc.printf("temp = %s\n", TempCelsiusDisplay);
         myled = !myled;
         wait(1.0);
     }