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@4:bb94144b323f, 2017-01-24 (annotated)
- Committer:
- aeg25
- Date:
- Tue Jan 24 12:17:13 2017 +0000
- Revision:
- 4:bb94144b323f
- Parent:
- 3:54f935a7d9c1
k?di
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lapi | 0:e3e4af4648ab | 1 | #include "mbed.h" |
lapi | 0:e3e4af4648ab | 2 | #include "x_nucleo_iks01a1.h" |
aeg25 | 2:7909e4c21d53 | 3 | #include <iostream> |
aeg25 | 2:7909e4c21d53 | 4 | #include <string> |
aeg25 | 2:7909e4c21d53 | 5 | #include <sstream> |
aeg25 | 2:7909e4c21d53 | 6 | using namespace std; |
aeg25 | 2:7909e4c21d53 | 7 | DigitalOut led1(LED1); |
aeg25 | 2:7909e4c21d53 | 8 | int cinput; |
lapi | 0:e3e4af4648ab | 9 | |
aeg25 | 2:7909e4c21d53 | 10 | static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); |
aeg25 | 2:7909e4c21d53 | 11 | static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); |
aeg25 | 2:7909e4c21d53 | 12 | static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); |
aeg25 | 2:7909e4c21d53 | 13 | static MagneticSensor *magnetometer = mems_expansion_board->magnetometer; |
lapi | 0:e3e4af4648ab | 14 | // main() runs in its own thread in the OS |
lapi | 0:e3e4af4648ab | 15 | // (note the calls to Thread::wait below for delays) |
aeg25 | 2:7909e4c21d53 | 16 | |
aeg25 | 2:7909e4c21d53 | 17 | |
aeg25 | 2:7909e4c21d53 | 18 | |
aeg25 | 2:7909e4c21d53 | 19 | |
lapi | 0:e3e4af4648ab | 20 | int main() { |
aeg25 | 4:bb94144b323f | 21 | |
aeg25 | 4:bb94144b323f | 22 | char buffer2[32]; |
aeg25 | 2:7909e4c21d53 | 23 | int32_t axes[3]; |
lapi | 0:e3e4af4648ab | 24 | Serial pc(USBTX, USBRX); |
lapi | 0:e3e4af4648ab | 25 | DevI2C i2c(D14, D15); |
lapi | 0:e3e4af4648ab | 26 | HTS221 htsensor(i2c); |
lapi | 0:e3e4af4648ab | 27 | LPS25H barosensor(i2c); |
lapi | 0:e3e4af4648ab | 28 | |
lapi | 0:e3e4af4648ab | 29 | uint8_t sensor_id; |
lapi | 0:e3e4af4648ab | 30 | int status = htsensor.ReadID(&sensor_id); |
lapi | 0:e3e4af4648ab | 31 | if (status || sensor_id != I_AM_HTS221) { |
lapi | 0:e3e4af4648ab | 32 | pc.printf("No HT sensor (status = %d id = %02x?\n", status, sensor_id); |
lapi | 0:e3e4af4648ab | 33 | } |
lapi | 0:e3e4af4648ab | 34 | HUM_TEMP_InitTypeDef htInitState = { |
lapi | 0:e3e4af4648ab | 35 | .OutputDataRate = HTS221_ODR_7Hz, // This is the only one used by the init |
lapi | 0:e3e4af4648ab | 36 | }; |
lapi | 0:e3e4af4648ab | 37 | status = htsensor.Init(&htInitState); |
lapi | 0:e3e4af4648ab | 38 | if (status) { |
lapi | 0:e3e4af4648ab | 39 | pc.printf("HT init fails!\n"); |
lapi | 0:e3e4af4648ab | 40 | } |
lapi | 0:e3e4af4648ab | 41 | |
lapi | 0:e3e4af4648ab | 42 | status = barosensor.ReadID(&sensor_id); |
lapi | 0:e3e4af4648ab | 43 | if (status || sensor_id != I_AM_LPS25H) { |
lapi | 0:e3e4af4648ab | 44 | pc.printf("No Barosensor (status = %d id = %02x?\n", status, sensor_id); |
lapi | 0:e3e4af4648ab | 45 | } |
lapi | 0:e3e4af4648ab | 46 | |
lapi | 0:e3e4af4648ab | 47 | PRESSURE_InitTypeDef baroInitState = { |
lapi | 0:e3e4af4648ab | 48 | // These are used in the initialization |
lapi | 0:e3e4af4648ab | 49 | .OutputDataRate = LPS25H_ODR_7Hz, |
lapi | 0:e3e4af4648ab | 50 | .DiffEnable = LPS25H_DIFF_DISABLE, |
lapi | 0:e3e4af4648ab | 51 | .BlockDataUpdate = LPS25H_BDU_CONT, |
lapi | 0:e3e4af4648ab | 52 | .SPIMode = LPS25H_SPI_SIM_4W |
lapi | 0:e3e4af4648ab | 53 | }; |
lapi | 0:e3e4af4648ab | 54 | status = barosensor.Init(&baroInitState); |
lapi | 0:e3e4af4648ab | 55 | if (status) { |
lapi | 0:e3e4af4648ab | 56 | pc.printf("Baro init fails!\n"); |
lapi | 0:e3e4af4648ab | 57 | } |
lapi | 0:e3e4af4648ab | 58 | |
aeg25 | 2:7909e4c21d53 | 59 | |
lapi | 0:e3e4af4648ab | 60 | Thread::wait(5000); |
aeg25 | 2:7909e4c21d53 | 61 | pc.printf("Connecting...\n\r"); |
aeg25 | 4:bb94144b323f | 62 | led1 = !led1; |
lapi | 0:e3e4af4648ab | 63 | float temperature = 0.0; |
lapi | 0:e3e4af4648ab | 64 | status = htsensor.GetTemperature(&temperature); |
lapi | 0:e3e4af4648ab | 65 | float humidity = 0.0; |
lapi | 0:e3e4af4648ab | 66 | status |= htsensor.GetHumidity(&humidity); |
lapi | 0:e3e4af4648ab | 67 | float pressure = 0.0; |
lapi | 0:e3e4af4648ab | 68 | status |= barosensor.GetPressure(&pressure); |
lapi | 0:e3e4af4648ab | 69 | float temperatureB = 0.0; |
lapi | 0:e3e4af4648ab | 70 | status |= barosensor.GetTemperature(&temperatureB); |
aeg25 | 2:7909e4c21d53 | 71 | pc.printf("Status = %d T = %.1f C RH = %.1f%% | T = %.1f C P = %.1f mbar\n\r", |
lapi | 0:e3e4af4648ab | 72 | status, temperature, humidity, temperatureB, pressure); |
aeg25 | 2:7909e4c21d53 | 73 | printf("---\r\n"); |
aeg25 | 2:7909e4c21d53 | 74 | |
aeg25 | 2:7909e4c21d53 | 75 | magnetometer->Get_M_Axes(axes); |
aeg25 | 2:7909e4c21d53 | 76 | printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 2:7909e4c21d53 | 77 | |
aeg25 | 2:7909e4c21d53 | 78 | accelerometer->Get_X_Axes(axes); |
aeg25 | 2:7909e4c21d53 | 79 | printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 2:7909e4c21d53 | 80 | |
aeg25 | 2:7909e4c21d53 | 81 | gyroscope->Get_G_Axes(axes); |
aeg25 | 2:7909e4c21d53 | 82 | printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 2:7909e4c21d53 | 83 | |
aeg25 | 2:7909e4c21d53 | 84 | printf("Starting again.."); |
aeg25 | 4:bb94144b323f | 85 | |
aeg25 | 4:bb94144b323f | 86 | while (true) { |
aeg25 | 4:bb94144b323f | 87 | |
aeg25 | 2:7909e4c21d53 | 88 | printf("Enter sensor name(1 for temperature, 2 for humidity, 3 for pressure ): \r\n"); |
aeg25 | 4:bb94144b323f | 89 | |
aeg25 | 2:7909e4c21d53 | 90 | Thread::wait(1500); |
lapi | 0:e3e4af4648ab | 91 | // pc.printf("IP address %s\n", wifiIf.get_ip_address()); |
aeg25 | 2:7909e4c21d53 | 92 | |
aeg25 | 2:7909e4c21d53 | 93 | |
aeg25 | 2:7909e4c21d53 | 94 | printf("Enter 1 for heat, humidity and pressure \n\r "); |
aeg25 | 4:bb94144b323f | 95 | printf("Enter 2 for acceleration, gyroscope, magnitude \n\r "); |
aeg25 | 2:7909e4c21d53 | 96 | |
aeg25 | 3:54f935a7d9c1 | 97 | scanf("%i", &cinput); |
aeg25 | 3:54f935a7d9c1 | 98 | if((cinput==1)){ |
aeg25 | 4:bb94144b323f | 99 | printf("[Temperature] %f\n\r",temperature); |
aeg25 | 4:bb94144b323f | 100 | printf("[Humidity] %f\n\r",humidity); |
aeg25 | 4:bb94144b323f | 101 | printf("[Pressure] %f\n\r",pressure); |
aeg25 | 2:7909e4c21d53 | 102 | } |
aeg25 | 4:bb94144b323f | 103 | if((cinput==2)){ |
aeg25 | 4:bb94144b323f | 104 | magnetometer->Get_M_Axes(axes); |
aeg25 | 4:bb94144b323f | 105 | printf("[Magnetism] [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 4:bb94144b323f | 106 | |
aeg25 | 4:bb94144b323f | 107 | accelerometer->Get_X_Axes(axes); |
aeg25 | 4:bb94144b323f | 108 | printf("[Acceleration] [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 4:bb94144b323f | 109 | |
aeg25 | 4:bb94144b323f | 110 | gyroscope->Get_G_Axes(axes); |
aeg25 | 4:bb94144b323f | 111 | printf("[Gyroscope] [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
aeg25 | 4:bb94144b323f | 112 | } |
aeg25 | 2:7909e4c21d53 | 113 | |
lapi | 0:e3e4af4648ab | 114 | } |
lapi | 0:e3e4af4648ab | 115 | } |
lapi | 0:e3e4af4648ab | 116 |