Sensors sample code , Sample Acc gyro at 200 hz
Dependencies: X_NUCLEO_IKS01A1_Local mbed
Fork of HelloWorld_IKS01A1 by
Diff: main.cpp
- Revision:
- 11:4a99e73b88cc
- Parent:
- 10:211cd9c27d5e
--- a/main.cpp Fri Mar 24 10:14:11 2017 +0000 +++ b/main.cpp Sun May 21 12:54:14 2017 +0000 @@ -4,7 +4,7 @@ * @author AST / EST * @version V0.0.1 * @date 14-August-2015 - * @brief Simple Example application for using the X_NUCLEO_IKS01A1 + * @brief Simple Example application for using the X_NUCLEO_IKS01A1 * MEMS Inertial & Environmental Sensor Nucleo expansion board. ****************************************************************************** * @attention @@ -34,101 +34,68 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** -*/ +*/ /* Includes */ #include "mbed.h" #include "x_nucleo_iks01a1.h" +// define sample frequency +#define SAMPLES_DELAY 5000 /* Instantiate the expansion board */ static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); /* Retrieve the composing elements of the expansion board */ static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); -static MagneticSensor *magnetometer = mems_expansion_board->magnetometer; -static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor; -static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor; -static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor; -static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor; + +// sensor sample rate: x_nucleo_iks01a1.cpp ; lsm6ds0_class.cpp -/* Helper function for printing floats & doubles */ -static char *printDouble(char* str, double v, int decimalDigits=2) -{ - int i = 1; - int intPart, fractPart; - int len; - char *ptr; - /* prepare decimal digits multiplicator */ - for (;decimalDigits!=0; i*=10, decimalDigits--); +// define uart +Serial pc(USBTX, USBRX); - /* calculate integer & fractinal parts */ - intPart = (int)v; - fractPart = (int)((v-(double)(int)v)*i); - - /* fill in integer part */ - sprintf(str, "%i.", intPart); - - /* prepare fill in of fractional part */ - len = strlen(str); - ptr = &str[len]; +// timer object +Timer timer; - /* fill in leading fractional zeros */ - for (i/=10;i>1; i/=10, ptr++) { - if(fractPart >= i) break; - *ptr = '0'; - } +// send data +bool flagData=0; - /* fill in (rest of) fractional part */ - sprintf(ptr, "%i", fractPart); - - return str; -} - +// time stamp +int timeStamp_us=0; +int sampleStamp=0; /* Simple main function */ -int main() { - uint8_t id; - float value1, value2; - char buffer1[32], buffer2[32]; - int32_t axes[3]; - - printf("\r\n--- Starting new run ---\r\n"); +int main() +{ + pc.baud(921600); + timer.start(); + timeStamp_us = timer.read_us(); + uint8_t id; + int32_t Acc_axes[3]; + int32_t Gyro_axes[3]; - humidity_sensor->read_id(&id); - printf("HTS221 humidity & temperature = 0x%X\r\n", id); - pressure_sensor->read_id(&id); - printf("LPS25H pressure & temperature = 0x%X\r\n", id); - magnetometer->read_id(&id); - printf("LIS3MDL magnetometer = 0x%X\r\n", id); - gyroscope->read_id(&id); - printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id); - - wait(3); - - while(1) { - printf("\r\n"); + pc.printf("\r\n--- Starting new run ---\r\n"); + + gyroscope->read_id(&id); + pc.printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id); + + wait(0.5); - temp_sensor1->get_temperature(&value1); - humidity_sensor->get_humidity(&value2); - printf("HTS221: [temp] %7s°C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); - - temp_sensor2->get_fahrenheit(&value1); - pressure_sensor->get_pressure(&value2); - printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); - - printf("---\r\n"); + while(1) { + // get time stamp + timeStamp_us = timer.read_us(); + // sample delay + if ((timeStamp_us-sampleStamp)>SAMPLES_DELAY) { + sampleStamp=timeStamp_us; + // get raw data + accelerometer->get_x_axes(Acc_axes); + gyroscope->get_g_axes(Gyro_axes); + pc.printf("D:%7ld,%7ld,%7ld,%7ld,%7ld,%7ld,%7ld\r\n", sampleStamp, Acc_axes[0], Acc_axes[1], Acc_axes[2], Gyro_axes[0], Gyro_axes[1], Gyro_axes[2]); + //pc.printf("D:%7ld,%7ld,%7ld,%7ld\r\n", sampleStamp, Acc_axes[0], Acc_axes[1], Acc_axes[2]); + // stability delay to finish sending data + //wait_us(10); + }// end get & send samples - magnetometer->get_m_axes(axes); - printf("LIS3MDL [mag/mgauss]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]); - - accelerometer->get_x_axes(axes); - printf("LSM6DS0 [acc/mg]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]); - - gyroscope->get_g_axes(axes); - printf("LSM6DS0 [gyro/mdps]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]); - - wait(1.5); - } -} + }// end loop +}// end main