Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
Jacinta
Date:
Sat May 14 17:01:22 2016 +0000
Revision:
3:1f17245afc88
Parent:
2:0b8065489409
Child:
4:597291e88109
Child:
7:ed4a10ebe720
....

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 3:1f17245afc88 6 #include "main.h"
Jacinta 0:1eaebb55408a 7
Jacinta 2:0b8065489409 8 Mail<log_data, QUEUESIZE> ExpansionBoard::mail_box;
Jacinta 0:1eaebb55408a 9
Jacinta 2:0b8065489409 10 //This is the producer
Jacinta 2:0b8065489409 11 void ExpansionBoard::sampleData() {
Jacinta 2:0b8065489409 12 printf("about to alloc\n");
Jacinta 2:0b8065489409 13 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 2:0b8065489409 14
Jacinta 2:0b8065489409 15 if (log_d == NULL) {
Jacinta 2:0b8065489409 16 mail_box.get();
Jacinta 2:0b8065489409 17 printf("Out of memory, last sample deleted\n");
Jacinta 2:0b8065489409 18 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 2:0b8065489409 19 printf("allocated after out of memory");
Jacinta 2:0b8065489409 20 }
Jacinta 2:0b8065489409 21
Jacinta 2:0b8065489409 22 printf("Not null, reading values\n");
Jacinta 2:0b8065489409 23 //Store read data in a sample
Jacinta 2:0b8065489409 24 float value;
Jacinta 2:0b8065489409 25 log_d->date = time(NULL);
Jacinta 2:0b8065489409 26 temp_sensor->GetTemperature(&value);
Jacinta 2:0b8065489409 27 log_d->tempCelsius = value;
Jacinta 2:0b8065489409 28 humidity_sensor->GetHumidity(&value);
Jacinta 2:0b8065489409 29 log_d->humidity = value;
Jacinta 2:0b8065489409 30 pressure_sensor->GetPressure(&value);
Jacinta 2:0b8065489409 31 log_d->pressure = value;
Jacinta 2:0b8065489409 32 printf("All values STORED\n");
Jacinta 2:0b8065489409 33 //Send pointer to sample to the queue
Jacinta 2:0b8065489409 34 osStatus stat = mail_box.put(log_d);
Jacinta 2:0b8065489409 35 printf("MAIL_BOX.PUT run\n");
Jacinta 2:0b8065489409 36 // Check for resource error
Jacinta 2:0b8065489409 37 if (stat == osErrorResource) {
Jacinta 2:0b8065489409 38 printf("mail_box->put() Error %4Xh\n", stat);
Jacinta 2:0b8065489409 39 //Error, free up memory block taken
Jacinta 2:0b8065489409 40 mail_box.free(log_d);
Jacinta 2:0b8065489409 41 }
Jacinta 2:0b8065489409 42 }
Jacinta 2:0b8065489409 43
Jacinta 3:1f17245afc88 44 void ExpansionBoard::getData(const void*){
Jacinta 3:1f17245afc88 45 main m;
Jacinta 3:1f17245afc88 46 vector<log_data> v = m.v;
Jacinta 2:0b8065489409 47 while(true){
Jacinta 2:0b8065489409 48 //Block on queue if no data is available
Jacinta 2:0b8065489409 49 osEvent event = mail_box.get();
Jacinta 2:0b8065489409 50 printf("MAIL_BOX.GET\n");
Jacinta 2:0b8065489409 51
Jacinta 2:0b8065489409 52 if (event.status == osEventMail) {
Jacinta 2:0b8065489409 53 // Successful, store log_data
Jacinta 2:0b8065489409 54 log_data* temp = (log_data*) event.value.p;
Jacinta 2:0b8065489409 55 v.push_back(*temp);
Jacinta 2:0b8065489409 56 mail_box.free(temp);
Jacinta 2:0b8065489409 57 printf("GET value stored and freed up mail_box\n");
Jacinta 2:0b8065489409 58 }
Jacinta 2:0b8065489409 59 }
Jacinta 2:0b8065489409 60 }
Jacinta 2:0b8065489409 61
Jacinta 2:0b8065489409 62 // Helper function for printing floats & doubles
Jacinta 2:0b8065489409 63 char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits) {
Jacinta 2:0b8065489409 64 int intPart, fractPart, len, i=1;
Jacinta 0:1eaebb55408a 65 char *ptr;
Jacinta 0:1eaebb55408a 66 for (; decimalDigits!=0; i*=10, decimalDigits--);
Jacinta 0:1eaebb55408a 67 intPart = (int)v;
Jacinta 0:1eaebb55408a 68 fractPart = (int)((v-(double)(int)v)*i);
Jacinta 0:1eaebb55408a 69 sprintf(str, "%i.", intPart);
Jacinta 0:1eaebb55408a 70 len = strlen(str);
Jacinta 0:1eaebb55408a 71 ptr = &str[len];
Jacinta 0:1eaebb55408a 72 for (i/=10; i>1; i/=10, ptr++) {
Jacinta 0:1eaebb55408a 73 if(fractPart >= i) break;
Jacinta 0:1eaebb55408a 74 *ptr = '0';
Jacinta 0:1eaebb55408a 75 }
Jacinta 0:1eaebb55408a 76 sprintf(ptr, "%i", fractPart);
Jacinta 0:1eaebb55408a 77 return str;
Jacinta 0:1eaebb55408a 78 }
Jacinta 0:1eaebb55408a 79
Jacinta 2:0b8065489409 80 ExpansionBoard::ExpansionBoard(): T(15.0f)
Jacinta 0:1eaebb55408a 81 {
Jacinta 2:0b8065489409 82 /* Retrieve the composing elements of the expansion board */
Jacinta 2:0b8065489409 83 uint8_t id;
Jacinta 2:0b8065489409 84 printf("Initialising expansion board...\n\r");
Jacinta 0:1eaebb55408a 85 humidity_sensor->ReadID(&id);
Jacinta 0:1eaebb55408a 86 printf("HTS221 humidity & temperature = 0x%X\r\n", id);
Jacinta 0:1eaebb55408a 87 pressure_sensor->ReadID(&id);
Jacinta 0:1eaebb55408a 88 printf("LPS25H pressure & temperature = 0x%X\r\n", id);
Jacinta 0:1eaebb55408a 89 magnetometer->ReadID(&id);
Jacinta 0:1eaebb55408a 90 printf("LIS3MDL magnetometer = 0x%X\r\n", id);
Jacinta 0:1eaebb55408a 91 gyroscope->ReadID(&id);
Jacinta 2:0b8065489409 92 printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n\n", id);
Jacinta 2:0b8065489409 93 }