Example of 6D orientation recognition for LSM6DSL in X-NUCLEO-IKS01A2
Dependencies: X_NUCLEO_IKS01A2 mbed
Fork of 6DOrientation_IKS01A2 by
main.cpp
00001 /** 00002 ****************************************************************************** 00003 * @file main.cpp 00004 * @author CLab 00005 * @version V1.0.0 00006 * @date 2-December-2016 00007 * @brief Simple Example application for using the X_NUCLEO_IKS01A2 00008 * MEMS Inertial & Environmental Sensor Nucleo expansion board. 00009 ****************************************************************************** 00010 * @attention 00011 * 00012 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 00013 * 00014 * Redistribution and use in source and binary forms, with or without modification, 00015 * are permitted provided that the following conditions are met: 00016 * 1. Redistributions of source code must retain the above copyright notice, 00017 * this list of conditions and the following disclaimer. 00018 * 2. Redistributions in binary form must reproduce the above copyright notice, 00019 * this list of conditions and the following disclaimer in the documentation 00020 * and/or other materials provided with the distribution. 00021 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00022 * may be used to endorse or promote products derived from this software 00023 * without specific prior written permission. 00024 * 00025 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00026 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00028 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00029 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00030 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00031 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00032 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00033 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00034 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 ****************************************************************************** 00037 */ 00038 00039 /* Includes */ 00040 #include "mbed.h" 00041 #include "XNucleoIKS01A2.h" 00042 00043 /* Instantiate the expansion board */ 00044 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); 00045 00046 /* Retrieve the composing elements of the expansion board */ 00047 static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; 00048 00049 InterruptIn mybutton(USER_BUTTON); 00050 DigitalOut myled(LED1); 00051 00052 volatile int mems_event = 0; 00053 volatile int send_orientation_request = 0; 00054 00055 /* User button callback. */ 00056 void pressed_cb() { 00057 send_orientation_request = 1; 00058 } 00059 00060 /* Interrupt 1 callback. */ 00061 void int1_cb() { 00062 mems_event = 1; 00063 } 00064 00065 /* Print the orientation. */ 00066 void send_orientation() { 00067 uint8_t xl = 0; 00068 uint8_t xh = 0; 00069 uint8_t yl = 0; 00070 uint8_t yh = 0; 00071 uint8_t zl = 0; 00072 uint8_t zh = 0; 00073 00074 acc_gyro->get_6d_orientation_xl(&xl); 00075 acc_gyro->get_6d_orientation_xh(&xh); 00076 acc_gyro->get_6d_orientation_yl(&yl); 00077 acc_gyro->get_6d_orientation_yh(&yh); 00078 acc_gyro->get_6d_orientation_zl(&zl); 00079 acc_gyro->get_6d_orientation_zh(&zh); 00080 00081 if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 1 && zh == 0 ) { 00082 printf( "\r\n ________________ " \ 00083 "\r\n | | " \ 00084 "\r\n | * | " \ 00085 "\r\n | | " \ 00086 "\r\n | | " \ 00087 "\r\n | | " \ 00088 "\r\n | | " \ 00089 "\r\n |________________| \r\n" ); 00090 } 00091 00092 else if ( xl == 1 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) { 00093 printf( "\r\n ________________ " \ 00094 "\r\n | | " \ 00095 "\r\n | * | " \ 00096 "\r\n | | " \ 00097 "\r\n | | " \ 00098 "\r\n | | " \ 00099 "\r\n | | " \ 00100 "\r\n |________________| \r\n" ); 00101 } 00102 00103 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 1 && yh == 0 && zh == 0 ) { 00104 printf( "\r\n ________________ " \ 00105 "\r\n | | " \ 00106 "\r\n | | " \ 00107 "\r\n | | " \ 00108 "\r\n | | " \ 00109 "\r\n | | " \ 00110 "\r\n | * | " \ 00111 "\r\n |________________| \r\n" ); 00112 } 00113 00114 else if ( xl == 0 && yl == 1 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) { 00115 printf( "\r\n ________________ " \ 00116 "\r\n | | " \ 00117 "\r\n | | " \ 00118 "\r\n | | " \ 00119 "\r\n | | " \ 00120 "\r\n | | " \ 00121 "\r\n | * | " \ 00122 "\r\n |________________| \r\n" ); 00123 } 00124 00125 else if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 1 ) { 00126 printf( "\r\n __*_____________ " \ 00127 "\r\n |________________| \r\n" ); 00128 } 00129 00130 else if ( xl == 0 && yl == 0 && zl == 1 && xh == 0 && yh == 0 && zh == 0 ) { 00131 printf( "\r\n ________________ " \ 00132 "\r\n |________________| " \ 00133 "\r\n * \r\n" ); 00134 } 00135 00136 else { 00137 printf( "None of the 6D orientation axes is set in LSM6DSL - accelerometer.\r\n" ); 00138 } 00139 } 00140 00141 /* Simple main function */ 00142 int main() { 00143 /* Attach callback to User button press */ 00144 mybutton.fall(&pressed_cb); 00145 /* Attach callback to LSM6DSL INT1 */ 00146 acc_gyro->attach_int1_irq(&int1_cb); 00147 00148 /* Enable LSM6DSL accelerometer */ 00149 acc_gyro->enable_x(); 00150 /* Enable 6D Orientation. */ 00151 acc_gyro->enable_6d_orientation(); 00152 00153 printf("\r\n--- Starting new run ---\r\n"); 00154 00155 while(1) { 00156 if (mems_event) { 00157 mems_event = 0; 00158 LSM6DSL_Event_Status_t status; 00159 acc_gyro->get_event_status(&status); 00160 if (status.D6DOrientationStatus) { 00161 /* Send 6D Orientation */ 00162 send_orientation(); 00163 00164 /* Led blinking. */ 00165 myled = 1; 00166 wait(0.2); 00167 myled = 0; 00168 } 00169 } 00170 00171 if(send_orientation_request) { 00172 send_orientation_request = 0; 00173 send_orientation(); 00174 } 00175 } 00176 }
Generated on Wed Jul 13 2022 20:05:37 by 1.7.2