my coursework
Dependencies: CheckRTC LPS25H hts221
Fork of ELEC350-extended-referral1 by
main.cpp
- Committer:
- FairyMental
- Date:
- 2017-04-05
- Revision:
- 34:62aae7d507e2
- Parent:
- 33:cffe0ae69aa6
- Child:
- 35:af125862c33e
File content as of revision 34:62aae7d507e2:
#include "mbed.h"
#include "rtos.h"
#include "string.h"
#include <stdio.h>
#include <ctype.h>
#include "hts221.h"
#include "LPS25H.h"
#define SWITCH1_RELEASE 1
void thread1();
DigitalOut myled(LED1);
I2C i2c2(I2C_SDA, I2C_SCL);
LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
HTS221 measurer(I2C_SDA, I2C_SCL);
DigitalIn onBoardSwitch(USER_BUTTON);
//Threads
Thread *t1;
//Class type
class Measure {
public:
float temperature;
float humidity;
float pressure;
//Constructor
Measure(float f, float h, float p) {
temperature = f;
humidity = h;
pressure = p;
}
};
//Mail queue
Mail<Measure, 16> mail_box;
// Call this on precise intervals
void adcISR() {
//Read sample - make a copy
float temperature = 0 , humidity = 0,pressure = 0;
measurer.ReadTempHumi(&temperature,&humidity);
barometer.get();
pressure = barometer.pressure();
//Allocate a block from the memory pool
Measure *measure = mail_box.alloc();
if (measure == NULL) {
//Out of memory
printf("Out of memory\n\r");
return;
}
//Fill in the data
measure->temperature = temperature;
measure->humidity = humidity;
measure->pressure = pressure;
// printf("%4.2fC %3.1f%% %6.1f \r\n", measure->temperature, measure->humidity,measure->pressure);
//Write to queue
osStatus stat = mail_box.put(measure); //Note we are sending the "pointer"
//Check if succesful
if (stat == osErrorResource) {
printf("queue->put() Error code: %4Xh, Resource not available\r\n", stat);
mail_box.free(measure);
return;
}
}
//Normal priority thread (consumer)
void thread1()
{
while (true) {
//Block on the queue
osEvent evt = mail_box.get();
//Check status
if (evt.status == osEventMail) {
Measure *measure = (Measure*)evt.value.p; //This is the pointer (address)
//Make a copy
printf("Consumer: %4.2fC | %3.1f%% | %6.1f \r\n", measure->temperature, measure->humidity,measure->pressure);
Measure msr(measure->temperature, measure->humidity,measure->pressure);
//We are done with this, so give back the memory to the pool
mail_box.free(measure);
//Echo to the terminal
} else {
printf("ERROR: %x\n\r", evt.status);
}
} //end while
}
// Main thread
int main() {
measurer.init();
measurer.calib();
//Start message
printf("Welcome\n");
//Hook up timer interrupt
Ticker timer;
timer.attach(&adcISR, 5);
//Threads
t1 = new Thread();
t1->start(thread1);
printf("Main Thread\n");
while(1)
{
Thread::wait(3000);
float tempCelsius,humi;
measurer.ReadTempHumi(&tempCelsius, &humi);
barometer.get();
printf("Main ThreaD: %4.2fC %3.1f%% %6.1f \r\n", tempCelsius, humi,barometer.pressure());
}
}
