Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

Dependencies:   mbed

Committer:
ymerdushku
Date:
Thu Dec 15 18:03:07 2016 +0000
Revision:
3:7ee105ee13be
Parent:
2:6b07b1425f3e
VERSIONE FUNZIONA

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