Sistemi_digitali_integrati / Mbed 2 deprecated Sensor

Dependencies:   mbed

Committer:
ymerdushku
Date:
Tue Jan 10 15:31:01 2017 +0000
Revision:
4:420dc2851775
Parent:
2:6b07b1425f3e
Child:
5:653dac107d67
sensor con split

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 4:420dc2851775 3 #include <string.h>
ymerdushku 4:420dc2851775 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 4:420dc2851775 18 char readREG_I2C(char REG_ADDR[1]);
ymerdushku 4:420dc2851775 19 void setREG_I2C(char REG_ADDR_DATA[2]);
ymerdushku 0:f043a4a4ec8d 20
ymerdushku 0:f043a4a4ec8d 21 int main() {
ymerdushku 4:420dc2851775 22 int cnt=0;
ymerdushku 4:420dc2851775 23 char X_value[2];
ymerdushku 2:6b07b1425f3e 24 char ident[1];
ymerdushku 2:6b07b1425f3e 25 char data_write[2];
ymerdushku 2:6b07b1425f3e 26 char ADDR[1];
ymerdushku 4:420dc2851775 27 char ADDR_X[1];
ymerdushku 4:420dc2851775 28 char ADDR_Y[1];
ymerdushku 4:420dc2851775 29 char ADDR_Z[1];
ymerdushku 2:6b07b1425f3e 30 char X[2];
ymerdushku 2:6b07b1425f3e 31 char Y[2];
ymerdushku 2:6b07b1425f3e 32 char Z[2];
ymerdushku 2:6b07b1425f3e 33
ymerdushku 2:6b07b1425f3e 34 //read WHO_AM_I
ymerdushku 4:420dc2851775 35 //ADDR[0]=0x0F;
ymerdushku 4:420dc2851775 36 //ident[0]=readREG_I2C(ADDR);
ymerdushku 4:420dc2851775 37 //pc.printf("%c",ident[0]);
ymerdushku 4:420dc2851775 38
ymerdushku 2:6b07b1425f3e 39 //power on accelerometer
ymerdushku 2:6b07b1425f3e 40 data_write[0] = POWER_ON_ACC;
ymerdushku 4:420dc2851775 41 data_write[1] = 0b01100000; //select f=982Hz
ymerdushku 2:6b07b1425f3e 42 setREG_I2C(data_write);
ymerdushku 4:420dc2851775 43
ymerdushku 1:68e3916ad434 44
ymerdushku 2:6b07b1425f3e 45 //read X
ymerdushku 4:420dc2851775 46 ADDR_X[0]=READ_X_L;
ymerdushku 4:420dc2851775 47 X[1]=readREG_I2C(ADDR_X);
ymerdushku 4:420dc2851775 48 pc.printf("%c",X[1]);
ymerdushku 4:420dc2851775 49 ADDR_X[0]=READ_X_H;
ymerdushku 4:420dc2851775 50 X[0]=readREG_I2C(ADDR_X);
ymerdushku 4:420dc2851775 51 pc.printf("%c",X[0]);
ymerdushku 4:420dc2851775 52
ymerdushku 2:6b07b1425f3e 53 //read Y
ymerdushku 4:420dc2851775 54 ADDR_Y[0]=READ_Y_L;
ymerdushku 4:420dc2851775 55 Y[1]=readREG_I2C(ADDR_Y);
ymerdushku 4:420dc2851775 56 pc.printf("%c",Y[1]);
ymerdushku 4:420dc2851775 57 ADDR_Y[0]=READ_Y_H;
ymerdushku 4:420dc2851775 58 Y[0]=readREG_I2C(ADDR_Y);
ymerdushku 4:420dc2851775 59 pc.printf("%c",Y[0]);
ymerdushku 2:6b07b1425f3e 60
ymerdushku 2:6b07b1425f3e 61 //read Z
ymerdushku 4:420dc2851775 62 ADDR_Z[0]=READ_Z_H;
ymerdushku 4:420dc2851775 63 Z[1]=readREG_I2C(ADDR_Z);
ymerdushku 4:420dc2851775 64 pc.printf("%c",Z[1]);
ymerdushku 4:420dc2851775 65 ADDR_Z[0]=READ_Z_L;
ymerdushku 4:420dc2851775 66 Z[0]=readREG_I2C(ADDR_Z);
ymerdushku 4:420dc2851775 67 pc.printf("%c",Z[0]);
ymerdushku 4:420dc2851775 68
ymerdushku 4:420dc2851775 69 //parte aggiuntiva -> i valori di accelerazione sono X[0],Y[0],Z[0] parti basse
ymerdushku 4:420dc2851775 70 //X[1],Y[1],Z[1] parti alte
ymerdushku 4:420dc2851775 71
ymerdushku 4:420dc2851775 72 char x_acceleration[2];
ymerdushku 4:420dc2851775 73 char y_acceleration[2];
ymerdushku 4:420dc2851775 74 char z_acceleration[2];
ymerdushku 4:420dc2851775 75 char x_velocity[2];
ymerdushku 4:420dc2851775 76 char y_velocity[2];
ymerdushku 4:420dc2851775 77 char z_velocity[2];
ymerdushku 4:420dc2851775 78 char x_position[2];
ymerdushku 4:420dc2851775 79 char y_position[2];
ymerdushku 4:420dc2851775 80 char z_position[2];
ymerdushku 4:420dc2851775 81 char x_pos[2];
ymerdushku 4:420dc2851775 82 char y_pos[2];
ymerdushku 4:420dc2851775 83 char z_pos[2];
ymerdushku 4:420dc2851775 84
ymerdushku 4:420dc2851775 85
ymerdushku 4:420dc2851775 86 if(cnt==0) //variabile int cnt da definire e settare uguale a zero ad inizio codice
ymerdushku 4:420dc2851775 87 {
ymerdushku 4:420dc2851775 88 x_acceleration[0]=0;
ymerdushku 4:420dc2851775 89 y_acceleration[0]=0;
ymerdushku 4:420dc2851775 90 z_acceleration[0]=0;
ymerdushku 4:420dc2851775 91
ymerdushku 4:420dc2851775 92 x_velocity[0]=0;
ymerdushku 4:420dc2851775 93 y_velocity[0]=0;
ymerdushku 4:420dc2851775 94 z_velocity[0]=0;
ymerdushku 4:420dc2851775 95
ymerdushku 4:420dc2851775 96 x_position[0]=0;
ymerdushku 4:420dc2851775 97 y_position[0]=0;
ymerdushku 4:420dc2851775 98 z_position[0]=0;
ymerdushku 0:f043a4a4ec8d 99 }
ymerdushku 4:420dc2851775 100 else
ymerdushku 4:420dc2851775 101 {
ymerdushku 4:420dc2851775 102 x_acceleration[0]=x_acceleration[1];
ymerdushku 4:420dc2851775 103 y_acceleration[0]=y_acceleration[1];
ymerdushku 4:420dc2851775 104 z_acceleration[0]=z_acceleration[1];
ymerdushku 4:420dc2851775 105
ymerdushku 4:420dc2851775 106 x_velocity[0]=x_velocity[1];
ymerdushku 4:420dc2851775 107 y_velocity[0]=y_velocity[1];
ymerdushku 4:420dc2851775 108 z_velocity[0]=z_velocity[1];
ymerdushku 4:420dc2851775 109
ymerdushku 4:420dc2851775 110 x_position[0]=x_position[1];
ymerdushku 4:420dc2851775 111 y_position[0]=y_position[1];
ymerdushku 4:420dc2851775 112 z_position[0]=z_position[1];
ymerdushku 4:420dc2851775 113 }
ymerdushku 0:f043a4a4ec8d 114
ymerdushku 4:420dc2851775 115 cnt++;
ymerdushku 4:420dc2851775 116 //unione delle parti da 8 bit in variabili da 16 bit
ymerdushku 4:420dc2851775 117 x_acceleration[1]=(X[1]<<8)|X[0];
ymerdushku 4:420dc2851775 118 y_acceleration[1]=(Y[1]<<8)|Y[0];
ymerdushku 4:420dc2851775 119 z_acceleration[1]=(Z[1]<<8)|Z[0];
ymerdushku 4:420dc2851775 120
ymerdushku 4:420dc2851775 121 //first integration
ymerdushku 4:420dc2851775 122
ymerdushku 4:420dc2851775 123 x_velocity[1] = x_velocity[0] + (x_acceleration[1] - x_acceleration[0])/2;
ymerdushku 4:420dc2851775 124 y_velocity[1] = y_velocity[0] + (y_acceleration[1] - y_acceleration[0])/2;
ymerdushku 4:420dc2851775 125 z_velocity[1] = z_velocity[0] + (z_acceleration[1] - z_acceleration[0])/2;
ymerdushku 4:420dc2851775 126
ymerdushku 4:420dc2851775 127 //second integration
ymerdushku 4:420dc2851775 128
ymerdushku 4:420dc2851775 129 x_position[1] = x_position[0] + x_velocity[0] + (x_velocity[1] - x_velocity[0])/2;
ymerdushku 4:420dc2851775 130 y_position[1] = y_position[0] + y_velocity[0] + (y_velocity[1] - y_velocity[0])/2;
ymerdushku 4:420dc2851775 131 z_position[1] = z_position[0] + z_velocity[0] + (z_velocity[1] - z_velocity[0])/2;
ymerdushku 4:420dc2851775 132
ymerdushku 4:420dc2851775 133 //divisione in parti da 8 bit rispettivamente alte e basse
ymerdushku 4:420dc2851775 134
ymerdushku 4:420dc2851775 135 x_pos[1]=x_position[1] >> 8;
ymerdushku 4:420dc2851775 136 x_pos[0]=x_position[0] & 0xFF;
ymerdushku 4:420dc2851775 137
ymerdushku 4:420dc2851775 138 y_pos[1]=y_position[1] >> 8;
ymerdushku 4:420dc2851775 139 y_pos[0]=y_position[0] & 0xFF;
ymerdushku 4:420dc2851775 140
ymerdushku 4:420dc2851775 141 z_pos[1]=z_position[1] >> 8;
ymerdushku 4:420dc2851775 142 z_pos[0]=z_position[0] & 0xFF;
ymerdushku 4:420dc2851775 143
ymerdushku 4:420dc2851775 144
ymerdushku 4:420dc2851775 145
ymerdushku 4:420dc2851775 146 //inviare sulla linea sequenza di byte di start
ymerdushku 4:420dc2851775 147 int start=0xFF;
ymerdushku 4:420dc2851775 148 pc.printf("%d",start);
ymerdushku 4:420dc2851775 149 pc.printf("%d",start);
ymerdushku 4:420dc2851775 150 start=0x00;
ymerdushku 4:420dc2851775 151 pc.printf("%d",start);
ymerdushku 4:420dc2851775 152 pc.printf("%d",start);
ymerdushku 4:420dc2851775 153
ymerdushku 4:420dc2851775 154 pc.printf("%c",x_pos[1]);
ymerdushku 4:420dc2851775 155 pc.printf("%c",x_pos[0]);
ymerdushku 4:420dc2851775 156 pc.printf("%c",y_pos[1]);
ymerdushku 4:420dc2851775 157 pc.printf("%c",y_pos[0]);
ymerdushku 4:420dc2851775 158 pc.printf("%c",z_pos[1]);
ymerdushku 4:420dc2851775 159 pc.printf("%c",z_pos[0]);
ymerdushku 4:420dc2851775 160
ymerdushku 4:420dc2851775 161 int stop=0x00;
ymerdushku 4:420dc2851775 162 pc.printf("%d",stop);
ymerdushku 4:420dc2851775 163 pc.printf("%d",stop);
ymerdushku 4:420dc2851775 164 start=0xFF;
ymerdushku 4:420dc2851775 165 pc.printf("%d",stop);
ymerdushku 4:420dc2851775 166 pc.printf("%d",stop);
ymerdushku 4:420dc2851775 167 //inviare sulla linea sequenza di byte di stop
ymerdushku 4:420dc2851775 168
ymerdushku 0:f043a4a4ec8d 169 }
ymerdushku 4:420dc2851775 170