Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

Dependencies:   mbed

Committer:
ymerdushku
Date:
Sat Dec 10 18:38:37 2016 +0000
Revision:
2:6b07b1425f3e
Parent:
1:68e3916ad434
Child:
3:7ee105ee13be
Child:
4:420dc2851775
Lettura accelerometro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ymerdushku 0:f043a4a4ec8d 1 #include "mbed.h"
ymerdushku 0:f043a4a4ec8d 2 #include <I2C.h>
ymerdushku 1:68e3916ad434 3
ymerdushku 2:6b07b1425f3e 4 #define LSM6DS0_ADDRESS_WRITE (0xD6) // Register_write
ymerdushku 2:6b07b1425f3e 5 #define LSM6DS0_ADDRESS_READ (0xD7) // Register_read
ymerdushku 1:68e3916ad434 6 #define POWER_ON_ACC (0x20)
ymerdushku 2:6b07b1425f3e 7 #define READ_X_L (0x28)
ymerdushku 2:6b07b1425f3e 8 #define READ_X_H (0x29)
ymerdushku 2:6b07b1425f3e 9 #define READ_Y_L (0x2A)
ymerdushku 2:6b07b1425f3e 10 #define READ_Y_H (0x2B)
ymerdushku 2:6b07b1425f3e 11 #define READ_Z_L (0x2C)
ymerdushku 2:6b07b1425f3e 12 #define READ_Z_H (0x2D)
ymerdushku 2:6b07b1425f3e 13 #define IDENTIFIER (0x0F)
ymerdushku 0:f043a4a4ec8d 14
ymerdushku 0:f043a4a4ec8d 15 I2C i2c(I2C_SDA,I2C_SCL);
ymerdushku 0:f043a4a4ec8d 16 Serial pc(SERIAL_TX, SERIAL_RX);
ymerdushku 2:6b07b1425f3e 17 char readREG_I2C(char REG_ADDR[]);
ymerdushku 2:6b07b1425f3e 18 int setREG_I2C(char REG_ADDR_DATA[]);
ymerdushku 0:f043a4a4ec8d 19
ymerdushku 0:f043a4a4ec8d 20 int main() {
ymerdushku 2:6b07b1425f3e 21 char ident[1];
ymerdushku 2:6b07b1425f3e 22 char data_write[2];
ymerdushku 2:6b07b1425f3e 23 char ADDR[1];
ymerdushku 2:6b07b1425f3e 24 char X[2];
ymerdushku 2:6b07b1425f3e 25 char Y[2];
ymerdushku 2:6b07b1425f3e 26 char Z[2];
ymerdushku 2:6b07b1425f3e 27
ymerdushku 2:6b07b1425f3e 28 //read WHO_AM_I
ymerdushku 2:6b07b1425f3e 29 ADDR[0]=IDENTIFIER;
ymerdushku 2:6b07b1425f3e 30 ident[0]=readREG_I2C(ADDR);
ymerdushku 1:68e3916ad434 31
ymerdushku 2:6b07b1425f3e 32 //power on accelerometer
ymerdushku 2:6b07b1425f3e 33 data_write[0] = POWER_ON_ACC;
ymerdushku 2:6b07b1425f3e 34 data_write[1] = 0x06; //select f=982Hz
ymerdushku 2:6b07b1425f3e 35 setREG_I2C(data_write);
ymerdushku 1:68e3916ad434 36
ymerdushku 2:6b07b1425f3e 37 //read X
ymerdushku 2:6b07b1425f3e 38 ADDR[0]=READ_X_L;
ymerdushku 2:6b07b1425f3e 39 X[0]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 40 ADDR[0]=READ_X_H;
ymerdushku 2:6b07b1425f3e 41 X[1]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 42 pc.printf("%c",X);
ymerdushku 2:6b07b1425f3e 43
ymerdushku 2:6b07b1425f3e 44 //read Y
ymerdushku 2:6b07b1425f3e 45 ADDR[0]=READ_Y_L;
ymerdushku 2:6b07b1425f3e 46 Y[0]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 47 ADDR[0]=READ_Y_H;
ymerdushku 2:6b07b1425f3e 48 Y[1]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 49 pc.printf("%c",Y);
ymerdushku 2:6b07b1425f3e 50
ymerdushku 2:6b07b1425f3e 51 //read Z
ymerdushku 2:6b07b1425f3e 52 ADDR[0]=READ_Z_L;
ymerdushku 2:6b07b1425f3e 53 Z[0]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 54 ADDR[0]=READ_Z_H;
ymerdushku 2:6b07b1425f3e 55 Z[1]=readREG_I2C(ADDR);
ymerdushku 2:6b07b1425f3e 56 pc.printf("%c",Z);
ymerdushku 0:f043a4a4ec8d 57 }
ymerdushku 1:68e3916ad434 58
ymerdushku 0:f043a4a4ec8d 59
ymerdushku 1:68e3916ad434 60
ymerdushku 2:6b07b1425f3e 61 int setREG_I2C(char REG_ADDR_DATA[]) //argument to pass : address register and data to write in
ymerdushku 2:6b07b1425f3e 62 {
ymerdushku 2:6b07b1425f3e 63 if ((i2c.write(LSM6DS0_ADDRESS_WRITE,REG_ADDR_DATA,2,0))==0)//ADDR+SUB+DATA+STOP, return 0 if ack
ymerdushku 2:6b07b1425f3e 64 {
ymerdushku 0:f043a4a4ec8d 65 pc.printf("Error, not ack\n");
ymerdushku 0:f043a4a4ec8d 66 return 0;
ymerdushku 2:6b07b1425f3e 67 }
ymerdushku 2:6b07b1425f3e 68 else
ymerdushku 2:6b07b1425f3e 69 return 1;
ymerdushku 0:f043a4a4ec8d 70 }
ymerdushku 1:68e3916ad434 71
ymerdushku 2:6b07b1425f3e 72 // read register
ymerdushku 2:6b07b1425f3e 73 char readREG_I2C(char REG_ADDR[]) //argument to pass : address register to read
ymerdushku 2:6b07b1425f3e 74 {
ymerdushku 2:6b07b1425f3e 75 char data_read[1];
ymerdushku 2:6b07b1425f3e 76
ymerdushku 2:6b07b1425f3e 77 i2c.write(LSM6DS0_ADDRESS_WRITE,REG_ADDR,1,1); //ADDR+SUB, return 0 if ack
ymerdushku 2:6b07b1425f3e 78 i2c.read(LSM6DS0_ADDRESS_READ,data_read,1,0); //ADDR+data+STOP, return 0 if ack
ymerdushku 2:6b07b1425f3e 79
ymerdushku 0:f043a4a4ec8d 80 return data_read[0];
ymerdushku 0:f043a4a4ec8d 81 }