Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

Dependencies:   mbed

main.cpp

Committer:
ymerdushku
Date:
2016-12-10
Revision:
2:6b07b1425f3e
Parent:
1:68e3916ad434
Child:
3:7ee105ee13be
Child:
4:420dc2851775

File content as of revision 2:6b07b1425f3e:

#include "mbed.h"
#include <I2C.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[]);
int setREG_I2C(char REG_ADDR_DATA[]);

int main() {
    char ident[1];
    char data_write[2];
    char ADDR[1];
    char X[2];
    char Y[2];
    char Z[2];
        
    //read WHO_AM_I
    ADDR[0]=IDENTIFIER;
    ident[0]=readREG_I2C(ADDR);
    
    //power on accelerometer
    data_write[0] = POWER_ON_ACC;
    data_write[1] = 0x06; //select f=982Hz
    setREG_I2C(data_write);
    
    //read X
    ADDR[0]=READ_X_L;
    X[0]=readREG_I2C(ADDR);
    ADDR[0]=READ_X_H;
    X[1]=readREG_I2C(ADDR);
    pc.printf("%c",X);
    
    //read Y
    ADDR[0]=READ_Y_L;
    Y[0]=readREG_I2C(ADDR);
    ADDR[0]=READ_Y_H;
    Y[1]=readREG_I2C(ADDR);
    pc.printf("%c",Y);
    
    //read Z
    ADDR[0]=READ_Z_L;
    Z[0]=readREG_I2C(ADDR);
    ADDR[0]=READ_Z_H;
    Z[1]=readREG_I2C(ADDR);
    pc.printf("%c",Z);
}
 

 
int setREG_I2C(char REG_ADDR_DATA[]) //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");
        return 0;       
    } 
    else 
        return 1;
}
 
// read register
char readREG_I2C(char REG_ADDR[]) //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];
}