SensorTile Dreamers / Mbed 2 deprecated Nucleo_i2c_master

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
rschiano
Date:
Thu Feb 01 14:33:45 2018 +0000
Child:
1:e9a1cf8774e0
Commit message:
I2C Ottimizzato;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 01 14:33:45 2018 +0000
@@ -0,0 +1,133 @@
+#include "mbed.h"
+ 
+#define ACC_W           0xD6
+#define WHO_AM_I        0x0F
+#define CTRL1X          0x10
+#define ODR416          0x60
+#define CTRL2G          0x11
+#define OUTG            0x22
+#define OUTX            0x28
+#define OUTT            0x20
+
+#define MAG_W           0x3C
+#define ACC_M           0x32
+#define CFG_REG_A_M     0x60
+#define ODR100          0x8C
+#define OUTM            0x68
+
+
+I2C i2c(D14, D15);
+ 
+DigitalOut myled(LED1);
+int16_t buffer[10]; 
+char bufUart[20];
+RawSerial pc(USBTX, USBRX, 921600);
+Timer timer; 
+// volatile char TempCelsiusDisplay[] = "+abc.d C";
+ 
+int main()
+{
+ 
+    char data_write[2];
+    char data_read[6];
+ 
+    /* Configure the Temperature sensor device STLM75:
+    - Thermostat mode Interrupt
+    - Fault tolerance: 0
+    */
+    i2c.frequency(400000);
+#ifdef DEBUG
+    data_write[0] = WHO_AM_I;
+    //data_write[1] = WHO_AM_I;
+    pc.printf("Invio who am i...\r\n");
+    int status = i2c.write(ACC_M, data_write, 1, 0);
+    if (status != 0) { // Error
+        while (1) {
+            myled = !myled;
+            wait(0.2);
+        }
+    }
+    pc.printf("Who am i inviato...\r\n");
+    i2c.read(ACC_M, data_read, 1, 0);
+    pc.printf("temp = %d\r\n", data_read[0]);
+    pc.printf("Fine\r\n");
+#endif    
+    // Imposto ODR 416 Hz su acc
+    data_write[0] = CTRL1X;
+    data_write[1] = ODR416;
+    i2c.write(ACC_W, data_write, 2, 0);
+    // Imposto ODR 416 Hz su gyro
+    data_write[0] = CTRL2G;
+    data_write[1] = ODR416;
+    i2c.write(ACC_W, data_write, 2, 0);
+    // Imposto ODR 100 Hz Mag
+    data_write[0] = CFG_REG_A_M;
+    data_write[1] = ODR100;
+    i2c.write(MAG_W, data_write, 2, 0);
+    while(1){
+         //timer.reset();
+         //timer.start();
+         char app = '.';
+         //pc.printf("Avvio...\r\n");
+         do{
+             app = pc.getc();
+        }while(app!='k');
+         data_write[0] = OUTG;
+         i2c.write(ACC_W, data_write, 1, 0);
+         i2c.read(ACC_W, data_read, 6, 0);
+         for(int i=0; i<3; i++)
+            buffer[i] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+         for(int i=0; i<6; i++){
+             bufUart[i] = data_read[i];
+             }
+         //timer.stop();
+         //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+         //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+         //timer.reset();
+         //timer.start();
+         data_write[0] = OUTX;
+         i2c.write(ACC_W, data_write, 1, 0);
+         i2c.read(ACC_W, data_read, 6, 0);
+         for(int i=0; i<3; i++)
+            buffer[i+3] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+         for(int i=0; i<6; i++){
+             bufUart[i+6] = data_read[i];
+             }
+         //timer.stop();
+         //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+         //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+         //timer.reset();
+         //timer.start();
+         data_write[0] = OUTT;
+         i2c.write(ACC_W, data_write, 1, 0);
+         i2c.read(ACC_W, data_read, 2, 0);
+         for(int i=0; i<1; i++)
+            buffer[i+6] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+         for(int i=0; i<2; i++){
+             bufUart[i+12] = data_read[i];
+             }
+         //timer.stop();
+         //pc.printf("%f\t%d\t%d\r\n",(float)((int16_t)(((int16_t)data_read[1])*256+data_read[0]))/256.0 + 25.0,data_read[1],data_read[0]);
+         //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+         //timer.reset();
+         //timer.start();
+         data_write[0] = OUTM;
+         i2c.write(MAG_W, data_write, 1, 0);
+         i2c.read(MAG_W, data_read, 6, 0);
+         for(int i=0; i<3; i++)
+            buffer[i+7] = (int16_t)((uint16_t)data_read[2*i+1]*256+data_read[2*i]);
+         for(int i=0; i<6; i++){
+             bufUart[i+14] = data_read[i];
+             }
+         //timer.stop();
+         //pc.printf("%d\t%d\t%d\r\n",(int16_t)((uint16_t)data_read[1]*256+data_read[0]),(int16_t)((uint16_t)data_read[3]*256+data_read[2]),(int16_t)((uint16_t)data_read[5]*256+data_read[4]));
+         //pc.printf("Elapsed time %d [us]\r\n",timer.read_us());
+         //wait_ms(1000);
+         //pc.printf("Invio dati...\r\n");
+         for(int i=0; i<20; i++){
+            pc.putc(bufUart[i]);
+        }
+    }
+         
+}
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Feb 01 14:33:45 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/7130f322cb7e
\ No newline at end of file