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: CheckRTC LPS25H hts221
Fork of ELEC350-extended-referral2 by
Revision 34:62aae7d507e2, committed 2017-04-05
- Comitter:
- FairyMental
- Date:
- Wed Apr 05 11:00:20 2017 +0000
- Parent:
- 33:cffe0ae69aa6
- Child:
- 35:af125862c33e
- Commit message:
- 1st push of project files.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Mar 29 11:34:00 2017 +0000
+++ b/main.cpp Wed Apr 05 11:00:20 2017 +0000
@@ -1,62 +1,132 @@
#include "mbed.h"
#include "rtos.h"
-#include "hts221.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);
-
-float tempCelsius = 25.50;
-float humi = 55;
-int humiMax = 100;
-char cmd=0;
-uint32_t seconds = 0, minutes=0, hours=0;
-
LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
-HTS221 humidity(I2C_SDA, I2C_SCL);
-
+HTS221 measurer(I2C_SDA, I2C_SCL);
+DigitalIn onBoardSwitch(USER_BUTTON);
+
-int main()
- {
- humidity.init();
- humidity.calib();
- printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r");
- printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r");
- //printf("%#x\n\r",barometer.read_id());
+//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"
- while(1)
+ //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)
{
- cmd=NULL;
- while(cmd==NULL){cmd=getchar();}
- if(cmd=='?'){
- printf("SOFT253 simple Temperature Humidity and Pressure Sensor Monitor\n\r");
- printf("Using the X-NUCLEO-IKS01A1 shield and MBED Libraries\n\r");
+ 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());
+
}
- if(cmd=='A'){
- humidity.ReadTempHumi(&tempCelsius, &humi);
- printf("%4.2fC %3.1f%%", tempCelsius, humi);
- barometer.get();
- printf(" %6.1f %4.1f\r\n", barometer.pressure(), barometer.temperature());
- myled = 1; // LED is ON
- Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
- myled = 0; // LED is OFF
- Thread::wait(100); // 100 ms
- }
- }
- }
-
-
-
-/*#include "mbed.h"
-
-DigitalOut led1(LED1);
-
-// main() runs in its own thread in the OS
-int main() {
- while (true) {
- led1 = !led1;
- wait(0.5);
- }
}
-*/
+
\ No newline at end of file
