Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed
sensor.cpp@18:40575f8e2245, 2016-05-17 (annotated)
- Committer:
- nlsantos
- Date:
- Tue May 17 15:53:56 2016 +0000
- Revision:
- 18:40575f8e2245
- Parent:
- 17:be3710fe8dd7
dd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jacinta | 0:1eaebb55408a | 1 | #include "mbed.h" |
Jacinta | 0:1eaebb55408a | 2 | #include "x_nucleo_iks01a1.h" |
Jacinta | 2:0b8065489409 | 3 | #include <vector> |
Jacinta | 0:1eaebb55408a | 4 | #include "sensor.h" |
Jacinta | 0:1eaebb55408a | 5 | #include "userMethods.h" |
Jacinta | 0:1eaebb55408a | 6 | |
Jacinta | 2:0b8065489409 | 7 | Mail<log_data, QUEUESIZE> ExpansionBoard::mail_box; |
Jacinta | 7:ed4a10ebe720 | 8 | vector<log_data> * ExpansionBoard::v; |
Jacinta | 7:ed4a10ebe720 | 9 | int * ExpansionBoard::n; |
Jacinta | 0:1eaebb55408a | 10 | |
nlsantos | 18:40575f8e2245 | 11 | |
Jacinta | 2:0b8065489409 | 12 | //This is the producer |
Jacinta | 2:0b8065489409 | 13 | void ExpansionBoard::sampleData() { |
nlsantos | 17:be3710fe8dd7 | 14 | if (flag= true){ |
Jacinta | 2:0b8065489409 | 15 | printf("about to alloc\n"); |
nlsantos | 17:be3710fe8dd7 | 16 | } |
Jacinta | 2:0b8065489409 | 17 | log_data* log_d = (log_data*)mail_box.alloc(); |
Jacinta | 2:0b8065489409 | 18 | |
Jacinta | 2:0b8065489409 | 19 | if (log_d == NULL) { |
Jacinta | 2:0b8065489409 | 20 | mail_box.get(); |
nlsantos | 17:be3710fe8dd7 | 21 | if (flag= true) |
Jacinta | 2:0b8065489409 | 22 | printf("Out of memory, last sample deleted\n"); |
nlsantos | 17:be3710fe8dd7 | 23 | |
Jacinta | 2:0b8065489409 | 24 | log_data* log_d = (log_data*)mail_box.alloc(); |
nlsantos | 17:be3710fe8dd7 | 25 | |
nlsantos | 17:be3710fe8dd7 | 26 | if (flag = true) |
Jacinta | 2:0b8065489409 | 27 | printf("allocated after out of memory"); |
Jacinta | 2:0b8065489409 | 28 | } |
Jacinta | 2:0b8065489409 | 29 | |
nlsantos | 17:be3710fe8dd7 | 30 | if (flag = true) |
Jacinta | 2:0b8065489409 | 31 | printf("Not null, reading values\n"); |
Jacinta | 2:0b8065489409 | 32 | //Store read data in a sample |
Jacinta | 2:0b8065489409 | 33 | float value; |
Jacinta | 2:0b8065489409 | 34 | log_d->date = time(NULL); |
Jacinta | 2:0b8065489409 | 35 | temp_sensor->GetTemperature(&value); |
Jacinta | 2:0b8065489409 | 36 | log_d->tempCelsius = value; |
Jacinta | 2:0b8065489409 | 37 | humidity_sensor->GetHumidity(&value); |
Jacinta | 2:0b8065489409 | 38 | log_d->humidity = value; |
Jacinta | 2:0b8065489409 | 39 | pressure_sensor->GetPressure(&value); |
Jacinta | 2:0b8065489409 | 40 | log_d->pressure = value; |
nlsantos | 17:be3710fe8dd7 | 41 | |
nlsantos | 17:be3710fe8dd7 | 42 | if (flag= true) |
Jacinta | 2:0b8065489409 | 43 | printf("All values STORED\n"); |
Jacinta | 2:0b8065489409 | 44 | //Send pointer to sample to the queue |
Jacinta | 2:0b8065489409 | 45 | osStatus stat = mail_box.put(log_d); |
nlsantos | 17:be3710fe8dd7 | 46 | |
nlsantos | 17:be3710fe8dd7 | 47 | if (flag= true) |
Jacinta | 2:0b8065489409 | 48 | printf("MAIL_BOX.PUT run\n"); |
nlsantos | 17:be3710fe8dd7 | 49 | |
Jacinta | 2:0b8065489409 | 50 | // Check for resource error |
Jacinta | 2:0b8065489409 | 51 | if (stat == osErrorResource) { |
nlsantos | 17:be3710fe8dd7 | 52 | |
nlsantos | 17:be3710fe8dd7 | 53 | if (flag= true) |
Jacinta | 2:0b8065489409 | 54 | printf("mail_box->put() Error %4Xh\n", stat); |
Jacinta | 2:0b8065489409 | 55 | //Error, free up memory block taken |
Jacinta | 2:0b8065489409 | 56 | mail_box.free(log_d); |
Jacinta | 2:0b8065489409 | 57 | } |
Jacinta | 2:0b8065489409 | 58 | } |
Jacinta | 2:0b8065489409 | 59 | |
Jacinta | 3:1f17245afc88 | 60 | void ExpansionBoard::getData(const void*){ |
Jacinta | 7:ed4a10ebe720 | 61 | |
Jacinta | 2:0b8065489409 | 62 | while(true){ |
Jacinta | 2:0b8065489409 | 63 | //Block on queue if no data is available |
Jacinta | 2:0b8065489409 | 64 | osEvent event = mail_box.get(); |
nlsantos | 17:be3710fe8dd7 | 65 | if (flag= true) |
Jacinta | 2:0b8065489409 | 66 | printf("MAIL_BOX.GET\n"); |
Jacinta | 2:0b8065489409 | 67 | |
Jacinta | 2:0b8065489409 | 68 | if (event.status == osEventMail) { |
Jacinta | 2:0b8065489409 | 69 | // Successful, store log_data |
Jacinta | 2:0b8065489409 | 70 | log_data* temp = (log_data*) event.value.p; |
Jacinta | 7:ed4a10ebe720 | 71 | v->push_back(*temp); |
Jacinta | 2:0b8065489409 | 72 | mail_box.free(temp); |
nlsantos | 17:be3710fe8dd7 | 73 | if (flag= true) |
Jacinta | 2:0b8065489409 | 74 | printf("GET value stored and freed up mail_box\n"); |
Jacinta | 2:0b8065489409 | 75 | } |
Jacinta | 2:0b8065489409 | 76 | } |
Jacinta | 2:0b8065489409 | 77 | } |
Jacinta | 2:0b8065489409 | 78 | |
Jacinta | 2:0b8065489409 | 79 | // Helper function for printing floats & doubles |
Jacinta | 2:0b8065489409 | 80 | char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits) { |
Jacinta | 2:0b8065489409 | 81 | int intPart, fractPart, len, i=1; |
Jacinta | 0:1eaebb55408a | 82 | char *ptr; |
Jacinta | 0:1eaebb55408a | 83 | for (; decimalDigits!=0; i*=10, decimalDigits--); |
Jacinta | 0:1eaebb55408a | 84 | intPart = (int)v; |
Jacinta | 0:1eaebb55408a | 85 | fractPart = (int)((v-(double)(int)v)*i); |
Jacinta | 0:1eaebb55408a | 86 | sprintf(str, "%i.", intPart); |
Jacinta | 0:1eaebb55408a | 87 | len = strlen(str); |
Jacinta | 0:1eaebb55408a | 88 | ptr = &str[len]; |
Jacinta | 0:1eaebb55408a | 89 | for (i/=10; i>1; i/=10, ptr++) { |
Jacinta | 0:1eaebb55408a | 90 | if(fractPart >= i) break; |
Jacinta | 0:1eaebb55408a | 91 | *ptr = '0'; |
Jacinta | 0:1eaebb55408a | 92 | } |
Jacinta | 0:1eaebb55408a | 93 | sprintf(ptr, "%i", fractPart); |
Jacinta | 0:1eaebb55408a | 94 | return str; |
Jacinta | 0:1eaebb55408a | 95 | } |
Jacinta | 0:1eaebb55408a | 96 | |
nlsantos | 18:40575f8e2245 | 97 | ExpansionBoard::ExpansionBoard(vector<log_data> vector, int num): T(15.0f) { |
Jacinta | 7:ed4a10ebe720 | 98 | v = &vector; |
Jacinta | 7:ed4a10ebe720 | 99 | n = # |
nlsantos | 18:40575f8e2245 | 100 | flag= false; |
Jacinta | 2:0b8065489409 | 101 | /* Retrieve the composing elements of the expansion board */ |
Jacinta | 2:0b8065489409 | 102 | uint8_t id; |
nlsantos | 17:be3710fe8dd7 | 103 | |
nlsantos | 17:be3710fe8dd7 | 104 | if (flag= true) |
Jacinta | 2:0b8065489409 | 105 | printf("Initialising expansion board...\n\r"); |
Jacinta | 13:0295a4b66573 | 106 | |
nlsantos | 17:be3710fe8dd7 | 107 | /* |
Jacinta | 13:0295a4b66573 | 108 | humidity_sensor->ReadID(&id); |
Jacinta | 13:0295a4b66573 | 109 | printf("No error"); //Debug para ver se o erro e na linha anterior ou no id mesmo |
Jacinta | 14:80348de07068 | 110 | printf("HTS221 humidity & temperature = %d\r\n", id); //Testa essa usando %d ao em vez de Hex |
Jacinta | 0:1eaebb55408a | 111 | pressure_sensor->ReadID(&id); |
Jacinta | 13:0295a4b66573 | 112 | printf("LPS25H pressure & temperature = %d\r\n", id); |
Jacinta | 0:1eaebb55408a | 113 | magnetometer->ReadID(&id); |
Jacinta | 13:0295a4b66573 | 114 | printf("LIS3MDL magnetometer = %d\r\n", id); |
Jacinta | 14:80348de07068 | 115 | //printf("LIS3MDL magnetometer = 0x%X\r\n\n", id); Antiga forma |
Jacinta | 0:1eaebb55408a | 116 | gyroscope->ReadID(&id); |
Jacinta | 13:0295a4b66573 | 117 | printf("LSM6DS0 accelerometer & gyroscope = %d\r\n\n", id); |
Jacinta | 13:0295a4b66573 | 118 | //printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n\n", *id); |
nlsantos | 17:be3710fe8dd7 | 119 | */ |
Jacinta | 2:0b8065489409 | 120 | } |