Santhosh Kumar / Mbed 2 deprecated Gyro_Data_Acquisition1

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
sathoshkumar
Date:
Wed May 08 19:35:06 2019 +0000
Revision:
5:6769e8b30d03
Parent:
4:3e6560c38374
Tilt sensor implementation with angle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sathoshkumar 0:9c4f0abc2b43 1 #include "mbed.h"
sathoshkumar 0:9c4f0abc2b43 2 #include "XNucleoIKS01A2.h"
sathoshkumar 0:9c4f0abc2b43 3
sathoshkumar 0:9c4f0abc2b43 4 /* Instantiate the expansion board */
sathoshkumar 0:9c4f0abc2b43 5 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
sathoshkumar 0:9c4f0abc2b43 6
sathoshkumar 0:9c4f0abc2b43 7 /* Retrieve the composing elements of the expansion board */
sathoshkumar 0:9c4f0abc2b43 8 static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro;
sathoshkumar 4:3e6560c38374 9 static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer;
sathoshkumar 0:9c4f0abc2b43 10
sathoshkumar 0:9c4f0abc2b43 11 InterruptIn mybutton(USER_BUTTON);
sathoshkumar 0:9c4f0abc2b43 12 DigitalOut myled(LED1);
sathoshkumar 0:9c4f0abc2b43 13
sathoshkumar 0:9c4f0abc2b43 14 volatile int mems_event = 0;
sathoshkumar 3:6f6d19961276 15 volatile int mems_event1 = 0;
sathoshkumar 0:9c4f0abc2b43 16 volatile int step_count_reset_request = 0;
sathoshkumar 0:9c4f0abc2b43 17 uint32_t previous_tick = 0;
sathoshkumar 0:9c4f0abc2b43 18 uint32_t current_tick = 0;
sathoshkumar 0:9c4f0abc2b43 19 uint16_t step_count = 0;
sathoshkumar 0:9c4f0abc2b43 20
sathoshkumar 0:9c4f0abc2b43 21 /* User button callback. */
sathoshkumar 0:9c4f0abc2b43 22 void pressed_cb() {
sathoshkumar 0:9c4f0abc2b43 23 step_count_reset_request = 1;
sathoshkumar 0:9c4f0abc2b43 24 }
sathoshkumar 0:9c4f0abc2b43 25
sathoshkumar 0:9c4f0abc2b43 26 /* Interrupt 1 callback. */
sathoshkumar 0:9c4f0abc2b43 27 void int1_cb() {
sathoshkumar 0:9c4f0abc2b43 28 mems_event = 1;
sathoshkumar 0:9c4f0abc2b43 29 }
sathoshkumar 0:9c4f0abc2b43 30
sathoshkumar 3:6f6d19961276 31 /* Interrupt 1 callback. */
sathoshkumar 3:6f6d19961276 32 void int2_cb() {
sathoshkumar 3:6f6d19961276 33 mems_event1 = 1;
sathoshkumar 3:6f6d19961276 34 }
sathoshkumar 3:6f6d19961276 35
sathoshkumar 0:9c4f0abc2b43 36 /* Print the orientation. */
sathoshkumar 0:9c4f0abc2b43 37 void send_orientation() {
sathoshkumar 0:9c4f0abc2b43 38 uint8_t xl = 0;
sathoshkumar 0:9c4f0abc2b43 39 uint8_t xh = 0;
sathoshkumar 0:9c4f0abc2b43 40 uint8_t yl = 0;
sathoshkumar 0:9c4f0abc2b43 41 uint8_t yh = 0;
sathoshkumar 0:9c4f0abc2b43 42 uint8_t zl = 0;
sathoshkumar 0:9c4f0abc2b43 43 uint8_t zh = 0;
sathoshkumar 0:9c4f0abc2b43 44
sathoshkumar 0:9c4f0abc2b43 45 acc_gyro->get_6d_orientation_xl(&xl);
sathoshkumar 0:9c4f0abc2b43 46 acc_gyro->get_6d_orientation_xh(&xh);
sathoshkumar 0:9c4f0abc2b43 47 acc_gyro->get_6d_orientation_yl(&yl);
sathoshkumar 0:9c4f0abc2b43 48 acc_gyro->get_6d_orientation_yh(&yh);
sathoshkumar 0:9c4f0abc2b43 49 acc_gyro->get_6d_orientation_zl(&zl);
sathoshkumar 0:9c4f0abc2b43 50 acc_gyro->get_6d_orientation_zh(&zh);
sathoshkumar 0:9c4f0abc2b43 51
sathoshkumar 0:9c4f0abc2b43 52 if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 1 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 53 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 54 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 55 "\r\n | * | " \
sathoshkumar 0:9c4f0abc2b43 56 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 57 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 58 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 59 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 60 "\r\n |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 61 }
sathoshkumar 0:9c4f0abc2b43 62
sathoshkumar 0:9c4f0abc2b43 63 else if ( xl == 1 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 64 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 65 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 66 "\r\n | * | " \
sathoshkumar 0:9c4f0abc2b43 67 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 68 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 69 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 70 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 71 "\r\n |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 72 }
sathoshkumar 0:9c4f0abc2b43 73
sathoshkumar 0:9c4f0abc2b43 74 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 1 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 75 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 76 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 77 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 78 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 79 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 80 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 81 "\r\n | * | " \
sathoshkumar 0:9c4f0abc2b43 82 "\r\n |________________| \r\n" );
sathoshkumar 1:cdade8f307b7 83
sathoshkumar 1:cdade8f307b7 84
sathoshkumar 1:cdade8f307b7 85
sathoshkumar 0:9c4f0abc2b43 86 }
sathoshkumar 0:9c4f0abc2b43 87
sathoshkumar 0:9c4f0abc2b43 88 else if ( xl == 0 && yl == 1 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 89 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 90 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 91 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 92 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 93 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 94 "\r\n | | " \
sathoshkumar 0:9c4f0abc2b43 95 "\r\n | * | " \
sathoshkumar 0:9c4f0abc2b43 96 "\r\n |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 97 }
sathoshkumar 0:9c4f0abc2b43 98
sathoshkumar 0:9c4f0abc2b43 99 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 1 ) {
sathoshkumar 0:9c4f0abc2b43 100 printf( "\r\n __*_____________ " \
sathoshkumar 0:9c4f0abc2b43 101 "\r\n |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 102 }
sathoshkumar 0:9c4f0abc2b43 103
sathoshkumar 0:9c4f0abc2b43 104 else if ( xl == 0 && yl == 0 && zl == 1 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 105 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 106 "\r\n |________________| " \
sathoshkumar 0:9c4f0abc2b43 107 "\r\n * \r\n" );
sathoshkumar 0:9c4f0abc2b43 108 }
sathoshkumar 0:9c4f0abc2b43 109
sathoshkumar 0:9c4f0abc2b43 110 else {
sathoshkumar 0:9c4f0abc2b43 111 printf( "None of the 6D orientation axes is set in LSM6DSL - accelerometer.\r\n" );
sathoshkumar 0:9c4f0abc2b43 112 }
sathoshkumar 0:9c4f0abc2b43 113 }
sathoshkumar 0:9c4f0abc2b43 114
sathoshkumar 0:9c4f0abc2b43 115 int main() {
sathoshkumar 4:3e6560c38374 116 uint8_t id;
sathoshkumar 4:3e6560c38374 117 int32_t axes[3];
sathoshkumar 0:9c4f0abc2b43 118 /* Attach callback to User button press */
sathoshkumar 0:9c4f0abc2b43 119 mybutton.fall(&pressed_cb);
sathoshkumar 0:9c4f0abc2b43 120
sathoshkumar 0:9c4f0abc2b43 121 /* Attach callback to LSM6DSL INT1 */
sathoshkumar 0:9c4f0abc2b43 122 acc_gyro->attach_int1_irq(&int1_cb);
sathoshkumar 3:6f6d19961276 123
sathoshkumar 3:6f6d19961276 124 acc_gyro->enable_int1_irq();
sathoshkumar 3:6f6d19961276 125
sathoshkumar 3:6f6d19961276 126 /* Attach callback to LSM6DSL INT1 */
sathoshkumar 3:6f6d19961276 127 acc_gyro->attach_int2_irq(&int2_cb);
sathoshkumar 3:6f6d19961276 128
sathoshkumar 3:6f6d19961276 129
sathoshkumar 3:6f6d19961276 130 acc_gyro->enable_int2_irq();
sathoshkumar 0:9c4f0abc2b43 131
sathoshkumar 0:9c4f0abc2b43 132 /* Enable LSM6DSL accelerometer */
sathoshkumar 0:9c4f0abc2b43 133 acc_gyro->enable_x();
sathoshkumar 0:9c4f0abc2b43 134 /* Enable 6D Orientation. */
sathoshkumar 0:9c4f0abc2b43 135 acc_gyro->enable_6d_orientation();
sathoshkumar 0:9c4f0abc2b43 136
sathoshkumar 0:9c4f0abc2b43 137 /* Enable Free Fall Detection. */
sathoshkumar 3:6f6d19961276 138 acc_gyro->enable_free_fall_detection(LSM6DSL_INT2_PIN);
sathoshkumar 0:9c4f0abc2b43 139
sathoshkumar 0:9c4f0abc2b43 140 /* Enable Pedometer. */
sathoshkumar 0:9c4f0abc2b43 141 acc_gyro->enable_pedometer();
sathoshkumar 0:9c4f0abc2b43 142
sathoshkumar 0:9c4f0abc2b43 143 /* Enable Tilt Detection. */
sathoshkumar 0:9c4f0abc2b43 144 acc_gyro->enable_tilt_detection();
sathoshkumar 0:9c4f0abc2b43 145
sathoshkumar 4:3e6560c38374 146 magnetometer->enable();
sathoshkumar 4:3e6560c38374 147
sathoshkumar 0:9c4f0abc2b43 148 previous_tick = clock();
sathoshkumar 0:9c4f0abc2b43 149
sathoshkumar 0:9c4f0abc2b43 150 printf("\r\n--- Starting new run ---\r\n");
sathoshkumar 4:3e6560c38374 151
sathoshkumar 4:3e6560c38374 152 magnetometer->read_id(&id);
sathoshkumar 4:3e6560c38374 153 printf("LSM303AGR magnetometer = 0x%X\r\n", id);
sathoshkumar 0:9c4f0abc2b43 154
sathoshkumar 0:9c4f0abc2b43 155 while(1) {
sathoshkumar 0:9c4f0abc2b43 156
sathoshkumar 0:9c4f0abc2b43 157 if (mems_event)
sathoshkumar 0:9c4f0abc2b43 158 {
sathoshkumar 0:9c4f0abc2b43 159 mems_event = 0;
sathoshkumar 0:9c4f0abc2b43 160 LSM6DSL_Event_Status_t status;
sathoshkumar 0:9c4f0abc2b43 161 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 162 if (status.D6DOrientationStatus) {
sathoshkumar 0:9c4f0abc2b43 163 /* Send 6D Orientation */
sathoshkumar 0:9c4f0abc2b43 164 send_orientation();
sathoshkumar 0:9c4f0abc2b43 165
sathoshkumar 0:9c4f0abc2b43 166 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 167 // myled = 1;
sathoshkumar 2:bcd10a2e7371 168 //wait(0.2);
sathoshkumar 2:bcd10a2e7371 169 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 170
sathoshkumar 0:9c4f0abc2b43 171
sathoshkumar 0:9c4f0abc2b43 172 }
sathoshkumar 0:9c4f0abc2b43 173
sathoshkumar 0:9c4f0abc2b43 174
sathoshkumar 0:9c4f0abc2b43 175
sathoshkumar 2:bcd10a2e7371 176 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 177 if (status.StepStatus) {
sathoshkumar 0:9c4f0abc2b43 178 /* New step detected, so print the step counter */
sathoshkumar 0:9c4f0abc2b43 179 acc_gyro->get_step_counter(&step_count);
sathoshkumar 0:9c4f0abc2b43 180 printf("Step counter: %d\r\n", step_count);
sathoshkumar 0:9c4f0abc2b43 181
sathoshkumar 0:9c4f0abc2b43 182 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 183 //myled = 1;
sathoshkumar 2:bcd10a2e7371 184 //wait(0.1);
sathoshkumar 2:bcd10a2e7371 185 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 186 }
sathoshkumar 2:bcd10a2e7371 187 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 188 if (status.TiltStatus) {
sathoshkumar 0:9c4f0abc2b43 189 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 190 //myled = 1;
sathoshkumar 2:bcd10a2e7371 191 //wait(0.2);
sathoshkumar 2:bcd10a2e7371 192 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 193
sathoshkumar 0:9c4f0abc2b43 194 /* Output data. */
sathoshkumar 0:9c4f0abc2b43 195 printf("Tilt Detected!\r\n");
sathoshkumar 0:9c4f0abc2b43 196 }
sathoshkumar 0:9c4f0abc2b43 197 }
sathoshkumar 0:9c4f0abc2b43 198
sathoshkumar 0:9c4f0abc2b43 199 if(step_count_reset_request) {
sathoshkumar 0:9c4f0abc2b43 200 step_count_reset_request = 0;
sathoshkumar 0:9c4f0abc2b43 201 acc_gyro->reset_step_counter();
sathoshkumar 0:9c4f0abc2b43 202 }
sathoshkumar 0:9c4f0abc2b43 203
sathoshkumar 3:6f6d19961276 204
sathoshkumar 3:6f6d19961276 205 if (mems_event1)
sathoshkumar 3:6f6d19961276 206 {
sathoshkumar 3:6f6d19961276 207 mems_event1 = 0;
sathoshkumar 3:6f6d19961276 208 LSM6DSL_Event_Status_t status;
sathoshkumar 3:6f6d19961276 209
sathoshkumar 3:6f6d19961276 210 acc_gyro->get_event_status(&status);
sathoshkumar 3:6f6d19961276 211 if (status.FreeFallStatus) {
sathoshkumar 3:6f6d19961276 212 /* Led blinking. */
sathoshkumar 3:6f6d19961276 213 myled = 1;
sathoshkumar 3:6f6d19961276 214 wait(0.2);
sathoshkumar 3:6f6d19961276 215 myled = 0;
sathoshkumar 3:6f6d19961276 216
sathoshkumar 3:6f6d19961276 217 /* Output data. */
sathoshkumar 3:6f6d19961276 218 printf("Free Fall Detected!\r\n");
sathoshkumar 3:6f6d19961276 219 }
sathoshkumar 4:3e6560c38374 220
sathoshkumar 4:3e6560c38374 221
sathoshkumar 4:3e6560c38374 222 magnetometer->get_m_axes(axes);
sathoshkumar 4:3e6560c38374 223 printf("LSM303AGR [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
sathoshkumar 4:3e6560c38374 224 /* //Algo 1 - Please fill the values.
sathoshkumar 4:3e6560c38374 225 if((axes[0] > fill_the_value) && (axes[0] < fill_the_value) &&
sathoshkumar 4:3e6560c38374 226 (axes[1] > fill_the_value) && (axes[1] < fill_the_value) &&
sathoshkumar 4:3e6560c38374 227 (axes[2] > fill_the_value) && (axes[2] < fill_the_value))
sathoshkumar 4:3e6560c38374 228 {
sathoshkumar 4:3e6560c38374 229 printf("Board is tilted on the Left side!\r\n");
sathoshkumar 4:3e6560c38374 230 }
sathoshkumar 4:3e6560c38374 231 else
sathoshkumar 4:3e6560c38374 232 {
sathoshkumar 4:3e6560c38374 233 printf("Board is tilted on the Right side\n\r");
sathoshkumar 4:3e6560c38374 234
sathoshkumar 4:3e6560c38374 235 } */
sathoshkumar 4:3e6560c38374 236
sathoshkumar 4:3e6560c38374 237 //Condition for right tilt check
sathoshkumar 5:6769e8b30d03 238 if (axes[1] <= -350)
sathoshkumar 4:3e6560c38374 239 printf("Message: Board is tilted on the Left side\n\r");
sathoshkumar 3:6f6d19961276 240
sathoshkumar 4:3e6560c38374 241 //Condition for right tilt check
sathoshkumar 5:6769e8b30d03 242 if (axes[1] >= -180)
sathoshkumar 4:3e6560c38374 243 printf("Message: Board is tilted on the Right side\n\r");
sathoshkumar 5:6769e8b30d03 244
sathoshkumar 5:6769e8b30d03 245 wait(0.5);
sathoshkumar 4:3e6560c38374 246
sathoshkumar 3:6f6d19961276 247 }
sathoshkumar 3:6f6d19961276 248
sathoshkumar 3:6f6d19961276 249
sathoshkumar 0:9c4f0abc2b43 250 }
sathoshkumar 0:9c4f0abc2b43 251 }