Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

Dependencies:   mbed

main.cpp

Committer:
ymerdushku
Date:
2016-12-15
Revision:
3:7ee105ee13be
Parent:
2:6b07b1425f3e

File content as of revision 3:7ee105ee13be:

#include "mbed.h"
#include <I2C.h>
#include <string.h>

#define LSM6DS0_ADDRESS_WRITE (0xD6) //  Register_write
#define LSM6DS0_ADDRESS_READ (0xD7) //  Register_read
#define POWER_ON_ACC (0x20)
#define READ_X_L (0x28)
#define READ_X_H (0x29)
#define READ_Y_L (0x2A)
#define READ_Y_H (0x2B)
#define READ_Z_L (0x2C)
#define READ_Z_H (0x2D)
#define IDENTIFIER (0x0F)

I2C i2c(I2C_SDA,I2C_SCL);
Serial pc(SERIAL_TX, SERIAL_RX);
char readREG_I2C(char REG_ADDR[1]);
void setREG_I2C(char REG_ADDR_DATA[2]);

int main() {
    char X_value[2];
    char ident[1];
    char data_write[2];
    char ADDR[1];
    char ADDR_X[1];
    char ADDR_Y[1];
    char ADDR_Z[1];
    char X[2];
    char Y[2];
    char Z[2];
        
    //read WHO_AM_I
    //ADDR[0]=0x0F;
    //ident[0]=readREG_I2C(ADDR);
    //pc.printf("%c",ident[0]);
 
    //power on accelerometer
    data_write[0] = POWER_ON_ACC;
    data_write[1] = 0b01100000; //select f=982Hz
    setREG_I2C(data_write);

    /*
    //read X
    ADDR_X[0]=READ_X_L;
    X[1]=readREG_I2C(ADDR_X);
    pc.printf("%c",X[1]);
    ADDR_X[0]=READ_X_H;
    X[0]=readREG_I2C(ADDR_X);
    pc.printf("%c",X[0]);
 
    //read Y
    ADDR_Y[0]=READ_Y_L;
    Y[1]=readREG_I2C(ADDR_Y);
    pc.printf("%c",Y[1]);
    ADDR_Y[0]=READ_Y_H;
    Y[0]=readREG_I2C(ADDR_Y);
    pc.printf("%c",Y[0]);
    */
    //read Z
    ADDR_Z[0]=READ_Z_H;
    Z[1]=readREG_I2C(ADDR_Z);
    pc.printf("%c",Z[1]);
    ADDR_Z[0]=READ_Z_L;
    Z[0]=readREG_I2C(ADDR_Z);
    pc.printf("%c",Z[0]);
     
}
 

 
void setREG_I2C(char REG_ADDR_DATA[2]) //argument to pass : address register and data to write in
{ 
    if ((i2c.write(LSM6DS0_ADDRESS_WRITE,REG_ADDR_DATA,2,0))!=0)//ADDR+SUB+DATA+STOP, return 0 if ack
    { 
        pc.printf("Error, not ack\n");      
    } 
   
}
 
// read register
char readREG_I2C(char REG_ADDR[1]) //argument to pass : address register to read
{ 
    char data_read[1];
    
        i2c.write(LSM6DS0_ADDRESS_WRITE,REG_ADDR,1,1);  //ADDR+SUB, return 0 if ack
        i2c.read(LSM6DS0_ADDRESS_READ,data_read,1,0); //ADDR+data+STOP, return 0 if ack
   
    return data_read[0];
}