Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

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
      
}