Application testing co-operation of X-NUCLEO boards IKS01A1 (sensors) and IDW01M1 (wifi)
Dependencies: X_NUCLEO_IDW01M1v2-lapi-1 X_NUCLEO_IKS01A1-lapi-1
Fork of x-nucleo-iks01a1-test by
main.cpp
- Committer:
- aeg25
- Date:
- 2017-01-24
- Revision:
- 4:bb94144b323f
- Parent:
- 3:54f935a7d9c1
File content as of revision 4:bb94144b323f:
#include "mbed.h" #include "x_nucleo_iks01a1.h" #include <iostream> #include <string> #include <sstream> using namespace std; DigitalOut led1(LED1); int cinput; static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); static MagneticSensor *magnetometer = mems_expansion_board->magnetometer; // main() runs in its own thread in the OS // (note the calls to Thread::wait below for delays) int main() { char buffer2[32]; int32_t axes[3]; Serial pc(USBTX, USBRX); DevI2C i2c(D14, D15); HTS221 htsensor(i2c); LPS25H barosensor(i2c); uint8_t sensor_id; int status = htsensor.ReadID(&sensor_id); if (status || sensor_id != I_AM_HTS221) { pc.printf("No HT sensor (status = %d id = %02x?\n", status, sensor_id); } HUM_TEMP_InitTypeDef htInitState = { .OutputDataRate = HTS221_ODR_7Hz, // This is the only one used by the init }; status = htsensor.Init(&htInitState); if (status) { pc.printf("HT init fails!\n"); } status = barosensor.ReadID(&sensor_id); if (status || sensor_id != I_AM_LPS25H) { pc.printf("No Barosensor (status = %d id = %02x?\n", status, sensor_id); } PRESSURE_InitTypeDef baroInitState = { // These are used in the initialization .OutputDataRate = LPS25H_ODR_7Hz, .DiffEnable = LPS25H_DIFF_DISABLE, .BlockDataUpdate = LPS25H_BDU_CONT, .SPIMode = LPS25H_SPI_SIM_4W }; status = barosensor.Init(&baroInitState); if (status) { pc.printf("Baro init fails!\n"); } Thread::wait(5000); pc.printf("Connecting...\n\r"); led1 = !led1; float temperature = 0.0; status = htsensor.GetTemperature(&temperature); float humidity = 0.0; status |= htsensor.GetHumidity(&humidity); float pressure = 0.0; status |= barosensor.GetPressure(&pressure); float temperatureB = 0.0; status |= barosensor.GetTemperature(&temperatureB); pc.printf("Status = %d T = %.1f C RH = %.1f%% | T = %.1f C P = %.1f mbar\n\r", status, temperature, humidity, temperatureB, pressure); printf("---\r\n"); magnetometer->Get_M_Axes(axes); printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); accelerometer->Get_X_Axes(axes); printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); gyroscope->Get_G_Axes(axes); printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); printf("Starting again.."); while (true) { printf("Enter sensor name(1 for temperature, 2 for humidity, 3 for pressure ): \r\n"); Thread::wait(1500); // pc.printf("IP address %s\n", wifiIf.get_ip_address()); printf("Enter 1 for heat, humidity and pressure \n\r "); printf("Enter 2 for acceleration, gyroscope, magnitude \n\r "); scanf("%i", &cinput); if((cinput==1)){ printf("[Temperature] %f\n\r",temperature); printf("[Humidity] %f\n\r",humidity); printf("[Pressure] %f\n\r",pressure); } if((cinput==2)){ magnetometer->Get_M_Axes(axes); printf("[Magnetism] [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); accelerometer->Get_X_Axes(axes); printf("[Acceleration] [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); gyroscope->Get_G_Axes(axes); printf("[Gyroscope] [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); } } }