trabalho

Dependencies:   X_NUCLEO_IKS01A1 mbed-rtos mbed

Fork of HelloWorld_IKS01A1 by ST

Committer:
stwykd
Date:
Sat May 07 17:13:53 2016 +0000
Revision:
19:d442ff60498c
Child:
20:3e1e0f78defa
Move Nick's code into a separate class to clean main and add user input handler

Who changed what in which revision?

UserRevisionLine numberNew 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
stwykd 19:d442ff60498c 18 void readIDs(){
stwykd 19:d442ff60498c 19 uint8_t id;
stwykd 19:d442ff60498c 20 humidity_sensor->ReadID(&id);
stwykd 19:d442ff60498c 21 printf("HTS221 humidity & temperature = 0x%X\r\n", id);
stwykd 19:d442ff60498c 22 pressure_sensor->ReadID(&id);
stwykd 19:d442ff60498c 23 printf("LPS25H pressure & temperature = 0x%X\r\n", id);
stwykd 19:d442ff60498c 24 magnetometer->ReadID(&id);
stwykd 19:d442ff60498c 25 printf("LIS3MDL magnetometer = 0x%X\r\n", id);
stwykd 19:d442ff60498c 26 gyroscope->ReadID(&id);
stwykd 19:d442ff60498c 27 printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id);
stwykd 19:d442ff60498c 28 wait(3);
stwykd 19:d442ff60498c 29 }
stwykd 19:d442ff60498c 30
stwykd 19:d442ff60498c 31 /* Helper function for printing floats & doubles */
stwykd 19:d442ff60498c 32 static char *printDouble(char* str, double v, int decimalDigits=2)
stwykd 19:d442ff60498c 33 {
stwykd 19:d442ff60498c 34 int i = 1;
stwykd 19:d442ff60498c 35 int intPart, fractPart;
stwykd 19:d442ff60498c 36 int len;
stwykd 19:d442ff60498c 37 char *ptr;
stwykd 19:d442ff60498c 38
stwykd 19:d442ff60498c 39 /* prepare decimal digits multiplicator */
stwykd 19:d442ff60498c 40 for (; decimalDigits!=0; i*=10, decimalDigits--);
stwykd 19:d442ff60498c 41
stwykd 19:d442ff60498c 42 /* calculate integer & fractinal parts */
stwykd 19:d442ff60498c 43 intPart = (int)v;
stwykd 19:d442ff60498c 44 fractPart = (int)((v-(double)(int)v)*i);
stwykd 19:d442ff60498c 45
stwykd 19:d442ff60498c 46 /* fill in integer part */
stwykd 19:d442ff60498c 47 sprintf(str, "%i.", intPart);
stwykd 19:d442ff60498c 48
stwykd 19:d442ff60498c 49 /* prepare fill in of fractional part */
stwykd 19:d442ff60498c 50 len = strlen(str);
stwykd 19:d442ff60498c 51 ptr = &str[len];
stwykd 19:d442ff60498c 52
stwykd 19:d442ff60498c 53 /* fill in leading fractional zeros */
stwykd 19:d442ff60498c 54 for (i/=10; i>1; i/=10, ptr++) {
stwykd 19:d442ff60498c 55 if(fractPart >= i) break;
stwykd 19:d442ff60498c 56 *ptr = '0';
stwykd 19:d442ff60498c 57 }
stwykd 19:d442ff60498c 58
stwykd 19:d442ff60498c 59 /* fill in (rest of) fractional part */
stwykd 19:d442ff60498c 60 sprintf(ptr, "%i", fractPart);
stwykd 19:d442ff60498c 61
stwykd 19:d442ff60498c 62 return str;
stwykd 19:d442ff60498c 63 }
stwykd 19:d442ff60498c 64
stwykd 19:d442ff60498c 65 void readData(){
stwykd 19:d442ff60498c 66 float value1, value2;
stwykd 19:d442ff60498c 67 char buffer1[32], buffer2[32];
stwykd 19:d442ff60498c 68 int32_t axes[3];
stwykd 19:d442ff60498c 69
stwykd 19:d442ff60498c 70 temp_sensor1->GetTemperature(&value1);
stwykd 19:d442ff60498c 71 humidity_sensor->GetHumidity(&value2);
stwykd 19:d442ff60498c 72 printf("HTS221: [temp] %7s°C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
stwykd 19:d442ff60498c 73
stwykd 19:d442ff60498c 74 temp_sensor2->GetFahrenheit(&value1);
stwykd 19:d442ff60498c 75 pressure_sensor->GetPressure(&value2);
stwykd 19:d442ff60498c 76 printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
stwykd 19:d442ff60498c 77
stwykd 19:d442ff60498c 78 printf("---\r\n");
stwykd 19:d442ff60498c 79
stwykd 19:d442ff60498c 80 magnetometer->Get_M_Axes(axes);
stwykd 19:d442ff60498c 81 printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
stwykd 19:d442ff60498c 82
stwykd 19:d442ff60498c 83 accelerometer->Get_X_Axes(axes);
stwykd 19:d442ff60498c 84 printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
stwykd 19:d442ff60498c 85
stwykd 19:d442ff60498c 86 gyroscope->Get_G_Axes(axes);
stwykd 19:d442ff60498c 87 printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]);
stwykd 19:d442ff60498c 88 }
stwykd 19:d442ff60498c 89 };