trabalho
Dependencies: X_NUCLEO_IKS01A1 mbed-rtos mbed
Fork of HelloWorld_IKS01A1 by
expansionBoard.cpp@29:f96590e6058d, 2016-05-09 (annotated)
- Committer:
- Jacinta
- Date:
- Mon May 09 01:42:41 2016 +0000
- Revision:
- 29:f96590e6058d
- Parent:
- 28:840000670c88
- Child:
- 30:673e342f1932
Still can't figure the problem with "ticker.attach", however fixed some other errors that showed when I commented out ticker.attach. Apart from this, the remaining errors are related with "t", which is a variable of type thread being used for time...
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 | 28:840000670c88 | 3 | #include "mailBox.cpp" |
stwykd | 19:d442ff60498c | 4 | |
stwykd | 27:0bbc1d575986 | 5 | using namespace std; |
stwykd | 27:0bbc1d575986 | 6 | |
Jacinta | 29:f96590e6058d | 7 | |
stwykd | 19:d442ff60498c | 8 | /* Instantiate the expansion board */ |
stwykd | 19:d442ff60498c | 9 | static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); |
stwykd | 19:d442ff60498c | 10 | |
stwykd | 19:d442ff60498c | 11 | static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); |
stwykd | 19:d442ff60498c | 12 | static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); |
stwykd | 19:d442ff60498c | 13 | static MagneticSensor *magnetometer = mems_expansion_board->magnetometer; |
stwykd | 19:d442ff60498c | 14 | static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor; |
stwykd | 19:d442ff60498c | 15 | static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor; |
stwykd | 19:d442ff60498c | 16 | static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor; |
stwykd | 19:d442ff60498c | 17 | static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor; |
stwykd | 19:d442ff60498c | 18 | |
stwykd | 25:55c0dc5b32b3 | 19 | static Ticker ticker; |
stwykd | 25:55c0dc5b32b3 | 20 | void readData(); |
stwykd | 25:55c0dc5b32b3 | 21 | |
Jacinta | 29:f96590e6058d | 22 | |
stwykd | 23:61e09468bf3d | 23 | class ExpansionBoard { |
Jacinta | 29:f96590e6058d | 24 | public: |
Jacinta | 29:f96590e6058d | 25 | float T; |
Jacinta | 29:f96590e6058d | 26 | |
stwykd | 25:55c0dc5b32b3 | 27 | private: |
stwykd | 25:55c0dc5b32b3 | 28 | /* Helper function for printing floats & doubles */ |
stwykd | 25:55c0dc5b32b3 | 29 | static char *printDouble(char* str, double v, int decimalDigits=2) { |
stwykd | 25:55c0dc5b32b3 | 30 | int i = 1; |
stwykd | 25:55c0dc5b32b3 | 31 | int intPart, fractPart; |
stwykd | 25:55c0dc5b32b3 | 32 | int len; |
stwykd | 25:55c0dc5b32b3 | 33 | char *ptr; |
stwykd | 25:55c0dc5b32b3 | 34 | /* prepare decimal digits multiplicator */ |
stwykd | 25:55c0dc5b32b3 | 35 | for (; decimalDigits!=0; i*=10, decimalDigits--); |
stwykd | 25:55c0dc5b32b3 | 36 | /* calculate integer & fractinal parts */ |
stwykd | 25:55c0dc5b32b3 | 37 | intPart = (int)v; |
stwykd | 25:55c0dc5b32b3 | 38 | fractPart = (int)((v-(double)(int)v)*i); |
stwykd | 25:55c0dc5b32b3 | 39 | /* fill in integer part */ |
stwykd | 25:55c0dc5b32b3 | 40 | sprintf(str, "%i.", intPart); |
stwykd | 25:55c0dc5b32b3 | 41 | /* prepare fill in of fractional part */ |
stwykd | 25:55c0dc5b32b3 | 42 | len = strlen(str); |
stwykd | 25:55c0dc5b32b3 | 43 | ptr = &str[len]; |
stwykd | 25:55c0dc5b32b3 | 44 | /* fill in leading fractional zeros */ |
stwykd | 25:55c0dc5b32b3 | 45 | for (i/=10; i>1; i/=10, ptr++) { |
stwykd | 25:55c0dc5b32b3 | 46 | if(fractPart >= i) break; |
stwykd | 25:55c0dc5b32b3 | 47 | *ptr = '0'; } |
stwykd | 25:55c0dc5b32b3 | 48 | /* fill in (rest of) fractional part */ |
stwykd | 25:55c0dc5b32b3 | 49 | sprintf(ptr, "%i", fractPart); |
stwykd | 25:55c0dc5b32b3 | 50 | return str; |
stwykd | 25:55c0dc5b32b3 | 51 | } |
stwykd | 25:55c0dc5b32b3 | 52 | |
stwykd | 28:840000670c88 | 53 | //This is the producer |
stwykd | 25:55c0dc5b32b3 | 54 | void readData() { |
stwykd | 25:55c0dc5b32b3 | 55 | float value1, value2; |
stwykd | 25:55c0dc5b32b3 | 56 | char buffer1[32], buffer2[32]; |
stwykd | 25:55c0dc5b32b3 | 57 | int32_t axes[3]; |
stwykd | 28:840000670c88 | 58 | |
stwykd | 28:840000670c88 | 59 | log_data* log_d = mail_box.alloc(); |
stwykd | 28:840000670c88 | 60 | //TODO Too small!? |
stwykd | 28:840000670c88 | 61 | log_d->id = rand() % 255; |
stwykd | 28:840000670c88 | 62 | |
stwykd | 28:840000670c88 | 63 | //TODO Out of memory, specs say to delete oldest sample |
stwykd | 28:840000670c88 | 64 | if (log_d == NULL) return; |
stwykd | 28:840000670c88 | 65 | |
stwykd | 25:55c0dc5b32b3 | 66 | temp_sensor1->GetTemperature(&value1); |
stwykd | 25:55c0dc5b32b3 | 67 | humidity_sensor->GetHumidity(&value2); |
stwykd | 25:55c0dc5b32b3 | 68 | printf("HTS221: [temp] %7s°C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); |
stwykd | 28:840000670c88 | 69 | log_d->tempCelsius = value1; |
stwykd | 28:840000670c88 | 70 | log_d->humidity = value2; |
stwykd | 27:0bbc1d575986 | 71 | |
stwykd | 25:55c0dc5b32b3 | 72 | temp_sensor2->GetFahrenheit(&value1); |
stwykd | 25:55c0dc5b32b3 | 73 | pressure_sensor->GetPressure(&value2); |
stwykd | 25:55c0dc5b32b3 | 74 | printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2)); |
stwykd | 28:840000670c88 | 75 | log_d->tempFarenheit = value1; |
stwykd | 28:840000670c88 | 76 | log_d->pressure = value2; |
stwykd | 25:55c0dc5b32b3 | 77 | printf("---\r\n"); |
stwykd | 25:55c0dc5b32b3 | 78 | |
stwykd | 25:55c0dc5b32b3 | 79 | magnetometer->Get_M_Axes(axes); |
stwykd | 25:55c0dc5b32b3 | 80 | printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 28:840000670c88 | 81 | memcpy(&log_d->magnetometer, &axes, sizeof(axes)); |
stwykd | 27:0bbc1d575986 | 82 | |
stwykd | 25:55c0dc5b32b3 | 83 | accelerometer->Get_X_Axes(axes); |
stwykd | 25:55c0dc5b32b3 | 84 | printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 28:840000670c88 | 85 | memcpy(&log_d->accelerometer, &axes, sizeof(axes)); |
stwykd | 27:0bbc1d575986 | 86 | |
stwykd | 25:55c0dc5b32b3 | 87 | gyroscope->Get_G_Axes(axes); |
stwykd | 25:55c0dc5b32b3 | 88 | printf("LSM6DS0 [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
stwykd | 28:840000670c88 | 89 | memcpy (&log_d->accelerometer, &axes, sizeof(axes)); |
stwykd | 27:0bbc1d575986 | 90 | |
stwykd | 27:0bbc1d575986 | 91 | //TODO Not sure about this one, maybe use time() |
stwykd | 28:840000670c88 | 92 | //log_d->date = asctime(localtime()); |
stwykd | 28:840000670c88 | 93 | |
stwykd | 28:840000670c88 | 94 | //Send pointer to the queue |
stwykd | 28:840000670c88 | 95 | osStatus stat = mail_box.put(log_d); |
stwykd | 28:840000670c88 | 96 | |
stwykd | 28:840000670c88 | 97 | // Check for resource error |
stwykd | 28:840000670c88 | 98 | if (stat == osErrorResource) { |
stwykd | 28:840000670c88 | 99 | printf("mail_box->put() Error %4Xh", stat); |
stwykd | 28:840000670c88 | 100 | //Error, free up memory block |
stwykd | 28:840000670c88 | 101 | mail_box.free(log_d); |
stwykd | 28:840000670c88 | 102 | return; |
stwykd | 28:840000670c88 | 103 | } |
stwykd | 25:55c0dc5b32b3 | 104 | } |
stwykd | 25:55c0dc5b32b3 | 105 | |
stwykd | 25:55c0dc5b32b3 | 106 | public: |
stwykd | 25:55c0dc5b32b3 | 107 | ExpansionBoard() { |
stwykd | 25:55c0dc5b32b3 | 108 | /* Retrieve the composing elements of the expansion board */ |
stwykd | 19:d442ff60498c | 109 | uint8_t id; |
stwykd | 19:d442ff60498c | 110 | humidity_sensor->ReadID(&id); |
stwykd | 19:d442ff60498c | 111 | printf("HTS221 humidity & temperature = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 112 | pressure_sensor->ReadID(&id); |
stwykd | 19:d442ff60498c | 113 | printf("LPS25H pressure & temperature = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 114 | magnetometer->ReadID(&id); |
stwykd | 19:d442ff60498c | 115 | printf("LIS3MDL magnetometer = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 116 | gyroscope->ReadID(&id); |
stwykd | 19:d442ff60498c | 117 | printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id); |
stwykd | 19:d442ff60498c | 118 | } |
stwykd | 25:55c0dc5b32b3 | 119 | void startSampling() { |
stwykd | 25:55c0dc5b32b3 | 120 | //TODO For now it just spits out the data |
stwykd | 25:55c0dc5b32b3 | 121 | //but data must be passed to the FIFO |
stwykd | 25:55c0dc5b32b3 | 122 | ticker.attach(readData, T); |
stwykd | 19:d442ff60498c | 123 | } |
stwykd | 25:55c0dc5b32b3 | 124 | void stopSampling() { ticker.detach(); } |
stwykd | 19:d442ff60498c | 125 | }; |