
trabalho
Dependencies: X_NUCLEO_IKS01A1 mbed-rtos mbed
Fork of HelloWorld_IKS01A1 by
expansionBoard.cpp@22:e36f91afc0aa, 2016-05-07 (annotated)
- Committer:
- stwykd
- Date:
- Sat May 07 17:56:22 2016 +0000
- Revision:
- 22:e36f91afc0aa
- Parent:
- 20:3e1e0f78defa
- Child:
- 23:61e09468bf3d
Create welcome message
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stwykd | 19:d442ff60498c | 1 | #include "mbed.h" |
stwykd | 19:d442ff60498c | 2 | #include "x_nucleo_iks01a1.h" |
stwykd | 19:d442ff60498c | 3 | |
stwykd | 19:d442ff60498c | 4 | /* Instantiate the expansion board */ |
stwykd | 19:d442ff60498c | 5 | static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); |
stwykd | 19:d442ff60498c | 6 | |
stwykd | 19:d442ff60498c | 7 | static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); |
stwykd | 19:d442ff60498c | 8 | static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); |
stwykd | 19:d442ff60498c | 9 | static MagneticSensor *magnetometer = mems_expansion_board->magnetometer; |
stwykd | 19:d442ff60498c | 10 | static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor; |
stwykd | 19:d442ff60498c | 11 | static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor; |
stwykd | 19:d442ff60498c | 12 | static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor; |
stwykd | 19:d442ff60498c | 13 | static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor; |
stwykd | 19:d442ff60498c | 14 | |
stwykd | 19:d442ff60498c | 15 | class ExansionBoard { |
stwykd | 19:d442ff60498c | 16 | /* Retrieve the composing elements of the expansion board */ |
stwykd | 19:d442ff60498c | 17 | void readIDs(){ |
stwykd | 19:d442ff60498c | 18 | uint8_t id; |
stwykd | 19:d442ff60498c | 19 | humidity_sensor->ReadID(&id); |
stwykd | 19:d442ff60498c | 20 | printf("HTS221 humidity & temperature = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 21 | pressure_sensor->ReadID(&id); |
stwykd | 19:d442ff60498c | 22 | printf("LPS25H pressure & temperature = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 23 | magnetometer->ReadID(&id); |
stwykd | 19:d442ff60498c | 24 | printf("LIS3MDL magnetometer = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 25 | gyroscope->ReadID(&id); |
stwykd | 19:d442ff60498c | 26 | printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 27 | wait(3); |
stwykd | 19:d442ff60498c | 28 | } |
stwykd | 19:d442ff60498c | 29 | |
stwykd | 19:d442ff60498c | 30 | /* Helper function for printing floats & doubles */ |
stwykd | 19:d442ff60498c | 31 | static char *printDouble(char* str, double v, int decimalDigits=2) |
stwykd | 19:d442ff60498c | 32 | { |
stwykd | 19:d442ff60498c | 33 | int i = 1; |
stwykd | 19:d442ff60498c | 34 | int intPart, fractPart; |
stwykd | 19:d442ff60498c | 35 | int len; |
stwykd | 19:d442ff60498c | 36 | char *ptr; |
stwykd | 19:d442ff60498c | 37 | |
stwykd | 19:d442ff60498c | 38 | /* prepare decimal digits multiplicator */ |
stwykd | 19:d442ff60498c | 39 | for (; decimalDigits!=0; i*=10, decimalDigits--); |
stwykd | 19:d442ff60498c | 40 | |
stwykd | 19:d442ff60498c | 41 | /* calculate integer & fractinal parts */ |
stwykd | 19:d442ff60498c | 42 | intPart = (int)v; |
stwykd | 19:d442ff60498c | 43 | fractPart = (int)((v-(double)(int)v)*i); |
stwykd | 19:d442ff60498c | 44 | |
stwykd | 19:d442ff60498c | 45 | /* fill in integer part */ |
stwykd | 19:d442ff60498c | 46 | sprintf(str, "%i.", intPart); |
stwykd | 19:d442ff60498c | 47 | |
stwykd | 19:d442ff60498c | 48 | /* prepare fill in of fractional part */ |
stwykd | 19:d442ff60498c | 49 | len = strlen(str); |
stwykd | 19:d442ff60498c | 50 | ptr = &str[len]; |
stwykd | 19:d442ff60498c | 51 | |
stwykd | 19:d442ff60498c | 52 | /* fill in leading fractional zeros */ |
stwykd | 19:d442ff60498c | 53 | for (i/=10; i>1; i/=10, ptr++) { |
stwykd | 19:d442ff60498c | 54 | if(fractPart >= i) break; |
stwykd | 19:d442ff60498c | 55 | *ptr = '0'; |
stwykd | 19:d442ff60498c | 56 | } |
stwykd | 19:d442ff60498c | 57 | |
stwykd | 19:d442ff60498c | 58 | /* fill in (rest of) fractional part */ |
stwykd | 19:d442ff60498c | 59 | sprintf(ptr, "%i", fractPart); |
stwykd | 19:d442ff60498c | 60 | |
stwykd | 19:d442ff60498c | 61 | return str; |
stwykd | 19:d442ff60498c | 62 | } |
stwykd | 19:d442ff60498c | 63 | |
stwykd | 19:d442ff60498c | 64 | void readData(){ |
stwykd | 19:d442ff60498c | 65 | float value1, value2; |
stwykd | 19:d442ff60498c | 66 | char buffer1[32], buffer2[32]; |
stwykd | 19:d442ff60498c | 67 | int32_t axes[3]; |
stwykd | 19:d442ff60498c | 68 | |
stwykd | 19:d442ff60498c | 69 | temp_sensor1->GetTemperature(&value1); |
stwykd | 19:d442ff60498c | 70 | humidity_sensor->GetHumidity(&value2); |
stwykd | 19:d442ff60498c | 71 | printf("HTS221: [temp] %7s°C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); |
stwykd | 19:d442ff60498c | 72 | |
stwykd | 19:d442ff60498c | 73 | temp_sensor2->GetFahrenheit(&value1); |
stwykd | 19:d442ff60498c | 74 | pressure_sensor->GetPressure(&value2); |
stwykd | 19:d442ff60498c | 75 | printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); |
stwykd | 19:d442ff60498c | 76 | |
stwykd | 19:d442ff60498c | 77 | printf("---\r\n"); |
stwykd | 19:d442ff60498c | 78 | |
stwykd | 19:d442ff60498c | 79 | magnetometer->Get_M_Axes(axes); |
stwykd | 19:d442ff60498c | 80 | printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 19:d442ff60498c | 81 | |
stwykd | 19:d442ff60498c | 82 | accelerometer->Get_X_Axes(axes); |
stwykd | 19:d442ff60498c | 83 | printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 19:d442ff60498c | 84 | |
stwykd | 19:d442ff60498c | 85 | gyroscope->Get_G_Axes(axes); |
stwykd | 19:d442ff60498c | 86 | printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 19:d442ff60498c | 87 | } |
stwykd | 19:d442ff60498c | 88 | }; |