Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
nlsantos
Date:
Wed May 18 03:11:38 2016 +0000
Revision:
34:0d51133891d0
Parent:
33:2ee6fbdad7b4
jkkjl

Who changed what in which revision?

UserRevisionLine numberNew 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 29:464097268aaf 8 Queue<log_data, QUEUESIZE> ExpansionBoard::queue;
nlsantos 34:0d51133891d0 9 std::vector<log_data> v;
Jacinta 7:ed4a10ebe720 10 int * ExpansionBoard::n;
Jacinta 21:849e5636076e 11 bool ExpansionBoard::flag;
Jacinta 0:1eaebb55408a 12
Jacinta 2:0b8065489409 13 //This is the producer
Jacinta 21:849e5636076e 14 void ExpansionBoard::sampleData()
Jacinta 21:849e5636076e 15 {
Jacinta 24:c924342f7c76 16 if(flag) printf("\nAbout to alloc\n");
Jacinta 31:8bbdfea60151 17 log_data *log_d;
nlsantos 33:2ee6fbdad7b4 18
Jacinta 2:0b8065489409 19 if (log_d == NULL) {
nlsantos 33:2ee6fbdad7b4 20 queue.get();
Jacinta 24:c924342f7c76 21 if(flag) printf("Out of memory, last sample deleted\n");
nlsantos 33:2ee6fbdad7b4 22 log_data* log_d;
Jacinta 24:c924342f7c76 23 if(flag) printf("Allocated after out of memory\n");
Jacinta 2:0b8065489409 24 }
Jacinta 31:8bbdfea60151 25
Jacinta 21:849e5636076e 26
Jacinta 24:c924342f7c76 27 if(flag) printf("Not null, reading values\n");
Jacinta 2:0b8065489409 28 //Store read data in a sample
Jacinta 2:0b8065489409 29 float value;
Jacinta 2:0b8065489409 30 log_d->date = time(NULL);
Jacinta 2:0b8065489409 31 temp_sensor->GetTemperature(&value);
Jacinta 2:0b8065489409 32 log_d->tempCelsius = value;
Jacinta 2:0b8065489409 33 humidity_sensor->GetHumidity(&value);
Jacinta 2:0b8065489409 34 log_d->humidity = value;
Jacinta 2:0b8065489409 35 pressure_sensor->GetPressure(&value);
Jacinta 2:0b8065489409 36 log_d->pressure = value;
Jacinta 24:c924342f7c76 37 if(flag) printf("All values STORED\n");
Jacinta 2:0b8065489409 38 //Send pointer to sample to the queue
Jacinta 31:8bbdfea60151 39 queue.put(log_d);
Jacinta 31:8bbdfea60151 40
nlsantos 34:0d51133891d0 41 v.push_back(*log_d);
Jacinta 32:e4cd87b7064c 42 printf("After vector");
Jacinta 31:8bbdfea60151 43
nlsantos 33:2ee6fbdad7b4 44
Jacinta 2:0b8065489409 45 }
Jacinta 2:0b8065489409 46
nlsantos 25:2197b8bb930c 47 // This is the consumer
nlsantos 33:2ee6fbdad7b4 48
Jacinta 21:849e5636076e 49 void ExpansionBoard::getData(const void*)
Jacinta 21:849e5636076e 50 {
Jacinta 7:ed4a10ebe720 51
Jacinta 21:849e5636076e 52 while(true) {
Jacinta 2:0b8065489409 53 //Block on queue if no data is available
nlsantos 33:2ee6fbdad7b4 54 osEvent event = queue.get(2000);
Jacinta 21:849e5636076e 55 if(flag) {
Jacinta 21:849e5636076e 56 printf("MAIL_BOX.GET\n");
Jacinta 21:849e5636076e 57 }
Jacinta 21:849e5636076e 58
Jacinta 2:0b8065489409 59 if (event.status == osEventMail) {
Jacinta 2:0b8065489409 60 // Successful, store log_data
Jacinta 2:0b8065489409 61 log_data* temp = (log_data*) event.value.p;
nlsantos 33:2ee6fbdad7b4 62 v.push_back(*temp);
Jacinta 21:849e5636076e 63 if(flag) {
Jacinta 21:849e5636076e 64 printf("GET value stored and freed up mail_box\n");
Jacinta 21:849e5636076e 65 }
Jacinta 2:0b8065489409 66 }
Jacinta 2:0b8065489409 67 }
Jacinta 2:0b8065489409 68 }
nlsantos 33:2ee6fbdad7b4 69
Jacinta 2:0b8065489409 70
Jacinta 2:0b8065489409 71 // Helper function for printing floats & doubles
Jacinta 21:849e5636076e 72 char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits)
Jacinta 21:849e5636076e 73 {
Jacinta 2:0b8065489409 74 int intPart, fractPart, len, i=1;
Jacinta 0:1eaebb55408a 75 char *ptr;
Jacinta 0:1eaebb55408a 76 for (; decimalDigits!=0; i*=10, decimalDigits--);
Jacinta 0:1eaebb55408a 77 intPart = (int)v;
Jacinta 0:1eaebb55408a 78 fractPart = (int)((v-(double)(int)v)*i);
Jacinta 0:1eaebb55408a 79 sprintf(str, "%i.", intPart);
Jacinta 0:1eaebb55408a 80 len = strlen(str);
Jacinta 0:1eaebb55408a 81 ptr = &str[len];
Jacinta 0:1eaebb55408a 82 for (i/=10; i>1; i/=10, ptr++) {
Jacinta 0:1eaebb55408a 83 if(fractPart >= i) break;
Jacinta 0:1eaebb55408a 84 *ptr = '0';
Jacinta 0:1eaebb55408a 85 }
Jacinta 0:1eaebb55408a 86 sprintf(ptr, "%i", fractPart);
Jacinta 0:1eaebb55408a 87 return str;
Jacinta 0:1eaebb55408a 88 }
Jacinta 0:1eaebb55408a 89
nlsantos 25:2197b8bb930c 90 // Constructor for the class
Jacinta 31:8bbdfea60151 91 ExpansionBoard::ExpansionBoard(int num, bool lFlag): T(15.0f)
Jacinta 21:849e5636076e 92 {
Jacinta 7:ed4a10ebe720 93 n = &num;
Jacinta 20:014a808b3ea2 94 flag = &lFlag;
Jacinta 21:849e5636076e 95
Jacinta 21:849e5636076e 96 /* Retrieve the composing elements of the expansion board */
Jacinta 20:014a808b3ea2 97 printf("Initialising expansion board...\n\r");
Jacinta 2:0b8065489409 98 }