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@32:e4cd87b7064c, 2016-05-18 (annotated)
- Committer:
- Jacinta
- Date:
- Wed May 18 01:28:46 2016 +0000
- Revision:
- 32:e4cd87b7064c
- Parent:
- 31:8bbdfea60151
- Child:
- 33:2ee6fbdad7b4
....
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 | 31:8bbdfea60151 | 7 | // Queue |
| nlsantos | 28:256ca0a52c76 | 8 | |
| nlsantos | 29:464097268aaf | 9 | Queue<log_data, QUEUESIZE> ExpansionBoard::queue; |
| Jacinta | 31:8bbdfea60151 | 10 | std::vector<log_data> ExpansionBoard::v; |
| Jacinta | 7:ed4a10ebe720 | 11 | int * ExpansionBoard::n; |
| Jacinta | 21:849e5636076e | 12 | bool ExpansionBoard::flag; |
| Jacinta | 0:1eaebb55408a | 13 | |
| Jacinta | 2:0b8065489409 | 14 | //This is the producer |
| Jacinta | 21:849e5636076e | 15 | void ExpansionBoard::sampleData() |
| Jacinta | 21:849e5636076e | 16 | { |
| Jacinta | 24:c924342f7c76 | 17 | if(flag) printf("\nAbout to alloc\n"); |
| Jacinta | 31:8bbdfea60151 | 18 | log_data *log_d; |
| Jacinta | 31:8bbdfea60151 | 19 | /* |
| Jacinta | 2:0b8065489409 | 20 | if (log_d == NULL) { |
| nlsantos | 27:1216b002cbf3 | 21 | mail_box.get(5000); |
| Jacinta | 24:c924342f7c76 | 22 | if(flag) printf("Out of memory, last sample deleted\n"); |
| nlsantos | 27:1216b002cbf3 | 23 | log_data* log_d = (log_data*)mail_box.alloc(5000); |
| Jacinta | 24:c924342f7c76 | 24 | if(flag) printf("Allocated after out of memory\n"); |
| Jacinta | 2:0b8065489409 | 25 | } |
| Jacinta | 31:8bbdfea60151 | 26 | */ |
| Jacinta | 31:8bbdfea60151 | 27 | |
| Jacinta | 31:8bbdfea60151 | 28 | if(v.size() >= 4){ |
| Jacinta | 32:e4cd87b7064c | 29 | printf("Vector size: %d", v.size()); |
| Jacinta | 31:8bbdfea60151 | 30 | osEvent evt = queue.get(); |
| Jacinta | 31:8bbdfea60151 | 31 | if(evt.status == osEventMessage){ |
| Jacinta | 31:8bbdfea60151 | 32 | log_data *message = (log_data*)evt.value.p; |
| Jacinta | 31:8bbdfea60151 | 33 | printf("Pressure: %f", message->pressure); |
| Jacinta | 31:8bbdfea60151 | 34 | printf("Temperature: %f", message->tempCelsius); |
| Jacinta | 31:8bbdfea60151 | 35 | } |
| Jacinta | 31:8bbdfea60151 | 36 | } |
| Jacinta | 31:8bbdfea60151 | 37 | |
| Jacinta | 21:849e5636076e | 38 | |
| Jacinta | 24:c924342f7c76 | 39 | if(flag) printf("Not null, reading values\n"); |
| Jacinta | 2:0b8065489409 | 40 | //Store read data in a sample |
| Jacinta | 2:0b8065489409 | 41 | float value; |
| Jacinta | 2:0b8065489409 | 42 | log_d->date = time(NULL); |
| Jacinta | 2:0b8065489409 | 43 | temp_sensor->GetTemperature(&value); |
| Jacinta | 2:0b8065489409 | 44 | log_d->tempCelsius = value; |
| Jacinta | 2:0b8065489409 | 45 | humidity_sensor->GetHumidity(&value); |
| Jacinta | 2:0b8065489409 | 46 | log_d->humidity = value; |
| Jacinta | 2:0b8065489409 | 47 | pressure_sensor->GetPressure(&value); |
| Jacinta | 2:0b8065489409 | 48 | log_d->pressure = value; |
| Jacinta | 24:c924342f7c76 | 49 | if(flag) printf("All values STORED\n"); |
| Jacinta | 2:0b8065489409 | 50 | //Send pointer to sample to the queue |
| Jacinta | 31:8bbdfea60151 | 51 | queue.put(log_d); |
| Jacinta | 31:8bbdfea60151 | 52 | |
| Jacinta | 31:8bbdfea60151 | 53 | v.push_back(*log_d); |
| Jacinta | 32:e4cd87b7064c | 54 | printf("After vector"); |
| Jacinta | 31:8bbdfea60151 | 55 | |
| Jacinta | 31:8bbdfea60151 | 56 | /* |
| nlsantos | 28:256ca0a52c76 | 57 | if(flag) printf("Log added to maibox\n"); |
| Jacinta | 2:0b8065489409 | 58 | // Check for resource error |
| Jacinta | 2:0b8065489409 | 59 | if (stat == osErrorResource) { |
| Jacinta | 24:c924342f7c76 | 60 | if(flag) printf("mail_box->put() Error %4Xh\n", stat); |
| Jacinta | 2:0b8065489409 | 61 | //Error, free up memory block taken |
| Jacinta | 2:0b8065489409 | 62 | mail_box.free(log_d); |
| Jacinta | 2:0b8065489409 | 63 | } |
| Jacinta | 31:8bbdfea60151 | 64 | */ |
| Jacinta | 2:0b8065489409 | 65 | } |
| Jacinta | 2:0b8065489409 | 66 | |
| nlsantos | 25:2197b8bb930c | 67 | // This is the consumer |
| Jacinta | 24:c924342f7c76 | 68 | /* |
| Jacinta | 21:849e5636076e | 69 | void ExpansionBoard::getData(const void*) |
| Jacinta | 21:849e5636076e | 70 | { |
| Jacinta | 7:ed4a10ebe720 | 71 | |
| Jacinta | 21:849e5636076e | 72 | while(true) { |
| Jacinta | 2:0b8065489409 | 73 | //Block on queue if no data is available |
| Jacinta | 2:0b8065489409 | 74 | osEvent event = mail_box.get(); |
| Jacinta | 21:849e5636076e | 75 | if(flag) { |
| Jacinta | 21:849e5636076e | 76 | printf("MAIL_BOX.GET\n"); |
| Jacinta | 21:849e5636076e | 77 | } |
| Jacinta | 21:849e5636076e | 78 | |
| Jacinta | 2:0b8065489409 | 79 | if (event.status == osEventMail) { |
| Jacinta | 2:0b8065489409 | 80 | // Successful, store log_data |
| Jacinta | 2:0b8065489409 | 81 | log_data* temp = (log_data*) event.value.p; |
| Jacinta | 7:ed4a10ebe720 | 82 | v->push_back(*temp); |
| Jacinta | 2:0b8065489409 | 83 | mail_box.free(temp); |
| Jacinta | 21:849e5636076e | 84 | if(flag) { |
| Jacinta | 21:849e5636076e | 85 | printf("GET value stored and freed up mail_box\n"); |
| Jacinta | 21:849e5636076e | 86 | } |
| Jacinta | 2:0b8065489409 | 87 | } |
| Jacinta | 2:0b8065489409 | 88 | } |
| Jacinta | 2:0b8065489409 | 89 | } |
| Jacinta | 24:c924342f7c76 | 90 | */ |
| Jacinta | 2:0b8065489409 | 91 | |
| Jacinta | 2:0b8065489409 | 92 | // Helper function for printing floats & doubles |
| Jacinta | 21:849e5636076e | 93 | char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits) |
| Jacinta | 21:849e5636076e | 94 | { |
| Jacinta | 2:0b8065489409 | 95 | int intPart, fractPart, len, i=1; |
| Jacinta | 0:1eaebb55408a | 96 | char *ptr; |
| Jacinta | 0:1eaebb55408a | 97 | for (; decimalDigits!=0; i*=10, decimalDigits--); |
| Jacinta | 0:1eaebb55408a | 98 | intPart = (int)v; |
| Jacinta | 0:1eaebb55408a | 99 | fractPart = (int)((v-(double)(int)v)*i); |
| Jacinta | 0:1eaebb55408a | 100 | sprintf(str, "%i.", intPart); |
| Jacinta | 0:1eaebb55408a | 101 | len = strlen(str); |
| Jacinta | 0:1eaebb55408a | 102 | ptr = &str[len]; |
| Jacinta | 0:1eaebb55408a | 103 | for (i/=10; i>1; i/=10, ptr++) { |
| Jacinta | 0:1eaebb55408a | 104 | if(fractPart >= i) break; |
| Jacinta | 0:1eaebb55408a | 105 | *ptr = '0'; |
| Jacinta | 0:1eaebb55408a | 106 | } |
| Jacinta | 0:1eaebb55408a | 107 | sprintf(ptr, "%i", fractPart); |
| Jacinta | 0:1eaebb55408a | 108 | return str; |
| Jacinta | 0:1eaebb55408a | 109 | } |
| Jacinta | 0:1eaebb55408a | 110 | |
| nlsantos | 25:2197b8bb930c | 111 | // Constructor for the class |
| Jacinta | 31:8bbdfea60151 | 112 | ExpansionBoard::ExpansionBoard(int num, bool lFlag): T(15.0f) |
| Jacinta | 21:849e5636076e | 113 | { |
| Jacinta | 7:ed4a10ebe720 | 114 | n = # |
| Jacinta | 20:014a808b3ea2 | 115 | flag = &lFlag; |
| Jacinta | 21:849e5636076e | 116 | |
| Jacinta | 21:849e5636076e | 117 | /* Retrieve the composing elements of the expansion board */ |
| Jacinta | 20:014a808b3ea2 | 118 | printf("Initialising expansion board...\n\r"); |
| Jacinta | 2:0b8065489409 | 119 | } |
