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@4:420dc2851775, 2017-01-10 (annotated)
- 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?
User | Revision | Line number | New 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 |