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