Santhosh Kumar / Mbed 2 deprecated Gyro_Data_Acquisition1

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
sathoshkumar
Date:
Mon May 06 18:54:21 2019 +0000
Revision:
3:6f6d19961276
Parent:
2:bcd10a2e7371
Child:
4:3e6560c38374
Second ISR configured for Gyro sensor

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 0:9c4f0abc2b43 9
sathoshkumar 0:9c4f0abc2b43 10 InterruptIn mybutton(USER_BUTTON);
sathoshkumar 0:9c4f0abc2b43 11 DigitalOut myled(LED1);
sathoshkumar 0:9c4f0abc2b43 12
sathoshkumar 0:9c4f0abc2b43 13 volatile int mems_event = 0;
sathoshkumar 3:6f6d19961276 14 volatile int mems_event1 = 0;
sathoshkumar 0:9c4f0abc2b43 15 volatile int step_count_reset_request = 0;
sathoshkumar 0:9c4f0abc2b43 16 uint32_t previous_tick = 0;
sathoshkumar 0:9c4f0abc2b43 17 uint32_t current_tick = 0;
sathoshkumar 0:9c4f0abc2b43 18 uint16_t step_count = 0;
sathoshkumar 0:9c4f0abc2b43 19
sathoshkumar 0:9c4f0abc2b43 20 /* User button callback. */
sathoshkumar 0:9c4f0abc2b43 21 void pressed_cb() {
sathoshkumar 0:9c4f0abc2b43 22 step_count_reset_request = 1;
sathoshkumar 0:9c4f0abc2b43 23 }
sathoshkumar 0:9c4f0abc2b43 24
sathoshkumar 0:9c4f0abc2b43 25 /* Interrupt 1 callback. */
sathoshkumar 0:9c4f0abc2b43 26 void int1_cb() {
sathoshkumar 0:9c4f0abc2b43 27 mems_event = 1;
sathoshkumar 0:9c4f0abc2b43 28 }
sathoshkumar 0:9c4f0abc2b43 29
sathoshkumar 3:6f6d19961276 30 /* Interrupt 1 callback. */
sathoshkumar 3:6f6d19961276 31 void int2_cb() {
sathoshkumar 3:6f6d19961276 32 mems_event1 = 1;
sathoshkumar 3:6f6d19961276 33 }
sathoshkumar 3:6f6d19961276 34
sathoshkumar 0:9c4f0abc2b43 35 /* Print the orientation. */
sathoshkumar 0:9c4f0abc2b43 36 void send_orientation() {
sathoshkumar 0:9c4f0abc2b43 37 uint8_t xl = 0;
sathoshkumar 0:9c4f0abc2b43 38 uint8_t xh = 0;
sathoshkumar 0:9c4f0abc2b43 39 uint8_t yl = 0;
sathoshkumar 0:9c4f0abc2b43 40 uint8_t yh = 0;
sathoshkumar 0:9c4f0abc2b43 41 uint8_t zl = 0;
sathoshkumar 0:9c4f0abc2b43 42 uint8_t zh = 0;
sathoshkumar 0:9c4f0abc2b43 43
sathoshkumar 0:9c4f0abc2b43 44 acc_gyro->get_6d_orientation_xl(&xl);
sathoshkumar 0:9c4f0abc2b43 45 acc_gyro->get_6d_orientation_xh(&xh);
sathoshkumar 0:9c4f0abc2b43 46 acc_gyro->get_6d_orientation_yl(&yl);
sathoshkumar 0:9c4f0abc2b43 47 acc_gyro->get_6d_orientation_yh(&yh);
sathoshkumar 0:9c4f0abc2b43 48 acc_gyro->get_6d_orientation_zl(&zl);
sathoshkumar 0:9c4f0abc2b43 49 acc_gyro->get_6d_orientation_zh(&zh);
sathoshkumar 0:9c4f0abc2b43 50
sathoshkumar 0:9c4f0abc2b43 51 if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 1 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 52 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 53 "\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 |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 60 }
sathoshkumar 0:9c4f0abc2b43 61
sathoshkumar 0:9c4f0abc2b43 62 else if ( xl == 1 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 63 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 64 "\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 |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 71 }
sathoshkumar 0:9c4f0abc2b43 72
sathoshkumar 0:9c4f0abc2b43 73 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 1 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 74 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 75 "\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 |________________| \r\n" );
sathoshkumar 1:cdade8f307b7 82
sathoshkumar 1:cdade8f307b7 83
sathoshkumar 1:cdade8f307b7 84
sathoshkumar 0:9c4f0abc2b43 85 }
sathoshkumar 0:9c4f0abc2b43 86
sathoshkumar 0:9c4f0abc2b43 87 else if ( xl == 0 && yl == 1 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 88 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 89 "\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 |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 96 }
sathoshkumar 0:9c4f0abc2b43 97
sathoshkumar 0:9c4f0abc2b43 98 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 1 ) {
sathoshkumar 0:9c4f0abc2b43 99 printf( "\r\n __*_____________ " \
sathoshkumar 0:9c4f0abc2b43 100 "\r\n |________________| \r\n" );
sathoshkumar 0:9c4f0abc2b43 101 }
sathoshkumar 0:9c4f0abc2b43 102
sathoshkumar 0:9c4f0abc2b43 103 else if ( xl == 0 && yl == 0 && zl == 1 && xh == 0 && yh == 0 && zh == 0 ) {
sathoshkumar 0:9c4f0abc2b43 104 printf( "\r\n ________________ " \
sathoshkumar 0:9c4f0abc2b43 105 "\r\n |________________| " \
sathoshkumar 0:9c4f0abc2b43 106 "\r\n * \r\n" );
sathoshkumar 0:9c4f0abc2b43 107 }
sathoshkumar 0:9c4f0abc2b43 108
sathoshkumar 0:9c4f0abc2b43 109 else {
sathoshkumar 0:9c4f0abc2b43 110 printf( "None of the 6D orientation axes is set in LSM6DSL - accelerometer.\r\n" );
sathoshkumar 0:9c4f0abc2b43 111 }
sathoshkumar 0:9c4f0abc2b43 112 }
sathoshkumar 0:9c4f0abc2b43 113
sathoshkumar 0:9c4f0abc2b43 114 int main() {
sathoshkumar 0:9c4f0abc2b43 115 /* Attach callback to User button press */
sathoshkumar 0:9c4f0abc2b43 116 mybutton.fall(&pressed_cb);
sathoshkumar 0:9c4f0abc2b43 117
sathoshkumar 0:9c4f0abc2b43 118 /* Attach callback to LSM6DSL INT1 */
sathoshkumar 0:9c4f0abc2b43 119 acc_gyro->attach_int1_irq(&int1_cb);
sathoshkumar 3:6f6d19961276 120
sathoshkumar 3:6f6d19961276 121 acc_gyro->enable_int1_irq();
sathoshkumar 3:6f6d19961276 122
sathoshkumar 3:6f6d19961276 123 /* Attach callback to LSM6DSL INT1 */
sathoshkumar 3:6f6d19961276 124 acc_gyro->attach_int2_irq(&int2_cb);
sathoshkumar 3:6f6d19961276 125
sathoshkumar 3:6f6d19961276 126
sathoshkumar 3:6f6d19961276 127 acc_gyro->enable_int2_irq();
sathoshkumar 0:9c4f0abc2b43 128
sathoshkumar 0:9c4f0abc2b43 129 /* Enable LSM6DSL accelerometer */
sathoshkumar 0:9c4f0abc2b43 130 acc_gyro->enable_x();
sathoshkumar 0:9c4f0abc2b43 131 /* Enable 6D Orientation. */
sathoshkumar 0:9c4f0abc2b43 132 acc_gyro->enable_6d_orientation();
sathoshkumar 0:9c4f0abc2b43 133
sathoshkumar 0:9c4f0abc2b43 134 /* Enable Free Fall Detection. */
sathoshkumar 3:6f6d19961276 135 acc_gyro->enable_free_fall_detection(LSM6DSL_INT2_PIN);
sathoshkumar 0:9c4f0abc2b43 136
sathoshkumar 0:9c4f0abc2b43 137 /* Enable Pedometer. */
sathoshkumar 0:9c4f0abc2b43 138 acc_gyro->enable_pedometer();
sathoshkumar 0:9c4f0abc2b43 139
sathoshkumar 0:9c4f0abc2b43 140 /* Enable Tilt Detection. */
sathoshkumar 0:9c4f0abc2b43 141 acc_gyro->enable_tilt_detection();
sathoshkumar 0:9c4f0abc2b43 142
sathoshkumar 0:9c4f0abc2b43 143 previous_tick = clock();
sathoshkumar 0:9c4f0abc2b43 144
sathoshkumar 0:9c4f0abc2b43 145 printf("\r\n--- Starting new run ---\r\n");
sathoshkumar 0:9c4f0abc2b43 146
sathoshkumar 0:9c4f0abc2b43 147 while(1) {
sathoshkumar 0:9c4f0abc2b43 148
sathoshkumar 0:9c4f0abc2b43 149 if (mems_event)
sathoshkumar 0:9c4f0abc2b43 150 {
sathoshkumar 0:9c4f0abc2b43 151 mems_event = 0;
sathoshkumar 0:9c4f0abc2b43 152 LSM6DSL_Event_Status_t status;
sathoshkumar 0:9c4f0abc2b43 153 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 154 if (status.D6DOrientationStatus) {
sathoshkumar 0:9c4f0abc2b43 155 /* Send 6D Orientation */
sathoshkumar 0:9c4f0abc2b43 156 send_orientation();
sathoshkumar 0:9c4f0abc2b43 157
sathoshkumar 0:9c4f0abc2b43 158 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 159 // myled = 1;
sathoshkumar 2:bcd10a2e7371 160 //wait(0.2);
sathoshkumar 2:bcd10a2e7371 161 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 162
sathoshkumar 0:9c4f0abc2b43 163
sathoshkumar 0:9c4f0abc2b43 164 }
sathoshkumar 0:9c4f0abc2b43 165
sathoshkumar 0:9c4f0abc2b43 166
sathoshkumar 0:9c4f0abc2b43 167
sathoshkumar 2:bcd10a2e7371 168 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 169 if (status.StepStatus) {
sathoshkumar 0:9c4f0abc2b43 170 /* New step detected, so print the step counter */
sathoshkumar 0:9c4f0abc2b43 171 acc_gyro->get_step_counter(&step_count);
sathoshkumar 0:9c4f0abc2b43 172 printf("Step counter: %d\r\n", step_count);
sathoshkumar 0:9c4f0abc2b43 173
sathoshkumar 0:9c4f0abc2b43 174 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 175 //myled = 1;
sathoshkumar 2:bcd10a2e7371 176 //wait(0.1);
sathoshkumar 2:bcd10a2e7371 177 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 178 }
sathoshkumar 2:bcd10a2e7371 179 acc_gyro->get_event_status(&status);
sathoshkumar 0:9c4f0abc2b43 180 if (status.TiltStatus) {
sathoshkumar 0:9c4f0abc2b43 181 /* Led blinking. */
sathoshkumar 2:bcd10a2e7371 182 //myled = 1;
sathoshkumar 2:bcd10a2e7371 183 //wait(0.2);
sathoshkumar 2:bcd10a2e7371 184 // myled = 0;
sathoshkumar 0:9c4f0abc2b43 185
sathoshkumar 0:9c4f0abc2b43 186 /* Output data. */
sathoshkumar 0:9c4f0abc2b43 187 printf("Tilt Detected!\r\n");
sathoshkumar 0:9c4f0abc2b43 188 }
sathoshkumar 0:9c4f0abc2b43 189 }
sathoshkumar 0:9c4f0abc2b43 190
sathoshkumar 0:9c4f0abc2b43 191 if(step_count_reset_request) {
sathoshkumar 0:9c4f0abc2b43 192 step_count_reset_request = 0;
sathoshkumar 0:9c4f0abc2b43 193 acc_gyro->reset_step_counter();
sathoshkumar 0:9c4f0abc2b43 194 }
sathoshkumar 0:9c4f0abc2b43 195
sathoshkumar 3:6f6d19961276 196
sathoshkumar 3:6f6d19961276 197 if (mems_event1)
sathoshkumar 3:6f6d19961276 198 {
sathoshkumar 3:6f6d19961276 199 mems_event1 = 0;
sathoshkumar 3:6f6d19961276 200 LSM6DSL_Event_Status_t status;
sathoshkumar 3:6f6d19961276 201
sathoshkumar 3:6f6d19961276 202 acc_gyro->get_event_status(&status);
sathoshkumar 3:6f6d19961276 203 if (status.FreeFallStatus) {
sathoshkumar 3:6f6d19961276 204 /* Led blinking. */
sathoshkumar 3:6f6d19961276 205 myled = 1;
sathoshkumar 3:6f6d19961276 206 wait(0.2);
sathoshkumar 3:6f6d19961276 207 myled = 0;
sathoshkumar 3:6f6d19961276 208
sathoshkumar 3:6f6d19961276 209 /* Output data. */
sathoshkumar 3:6f6d19961276 210 printf("Free Fall Detected!\r\n");
sathoshkumar 3:6f6d19961276 211 }
sathoshkumar 3:6f6d19961276 212
sathoshkumar 3:6f6d19961276 213 }
sathoshkumar 3:6f6d19961276 214
sathoshkumar 3:6f6d19961276 215
sathoshkumar 0:9c4f0abc2b43 216 }
sathoshkumar 0:9c4f0abc2b43 217 }