Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- ymerdushku
- Date:
- 2017-01-10
- Revision:
- 4:420dc2851775
- Parent:
- 2:6b07b1425f3e
- Child:
- 5:653dac107d67
File content as of revision 4:420dc2851775:
#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() { int cnt=0; 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]); //parte aggiuntiva -> i valori di accelerazione sono X[0],Y[0],Z[0] parti basse //X[1],Y[1],Z[1] parti alte char x_acceleration[2]; char y_acceleration[2]; char z_acceleration[2]; char x_velocity[2]; char y_velocity[2]; char z_velocity[2]; char x_position[2]; char y_position[2]; char z_position[2]; char x_pos[2]; char y_pos[2]; char z_pos[2]; if(cnt==0) //variabile int cnt da definire e settare uguale a zero ad inizio codice { x_acceleration[0]=0; y_acceleration[0]=0; z_acceleration[0]=0; x_velocity[0]=0; y_velocity[0]=0; z_velocity[0]=0; x_position[0]=0; y_position[0]=0; z_position[0]=0; } else { x_acceleration[0]=x_acceleration[1]; y_acceleration[0]=y_acceleration[1]; z_acceleration[0]=z_acceleration[1]; x_velocity[0]=x_velocity[1]; y_velocity[0]=y_velocity[1]; z_velocity[0]=z_velocity[1]; x_position[0]=x_position[1]; y_position[0]=y_position[1]; z_position[0]=z_position[1]; } cnt++; //unione delle parti da 8 bit in variabili da 16 bit x_acceleration[1]=(X[1]<<8)|X[0]; y_acceleration[1]=(Y[1]<<8)|Y[0]; z_acceleration[1]=(Z[1]<<8)|Z[0]; //first integration x_velocity[1] = x_velocity[0] + (x_acceleration[1] - x_acceleration[0])/2; y_velocity[1] = y_velocity[0] + (y_acceleration[1] - y_acceleration[0])/2; z_velocity[1] = z_velocity[0] + (z_acceleration[1] - z_acceleration[0])/2; //second integration x_position[1] = x_position[0] + x_velocity[0] + (x_velocity[1] - x_velocity[0])/2; y_position[1] = y_position[0] + y_velocity[0] + (y_velocity[1] - y_velocity[0])/2; z_position[1] = z_position[0] + z_velocity[0] + (z_velocity[1] - z_velocity[0])/2; //divisione in parti da 8 bit rispettivamente alte e basse x_pos[1]=x_position[1] >> 8; x_pos[0]=x_position[0] & 0xFF; y_pos[1]=y_position[1] >> 8; y_pos[0]=y_position[0] & 0xFF; z_pos[1]=z_position[1] >> 8; z_pos[0]=z_position[0] & 0xFF; //inviare sulla linea sequenza di byte di start int start=0xFF; pc.printf("%d",start); pc.printf("%d",start); start=0x00; pc.printf("%d",start); pc.printf("%d",start); pc.printf("%c",x_pos[1]); pc.printf("%c",x_pos[0]); pc.printf("%c",y_pos[1]); pc.printf("%c",y_pos[0]); pc.printf("%c",z_pos[1]); pc.printf("%c",z_pos[0]); int stop=0x00; pc.printf("%d",stop); pc.printf("%d",stop); start=0xFF; pc.printf("%d",stop); pc.printf("%d",stop); //inviare sulla linea sequenza di byte di stop }