Syggestions

Dependencies:   CheckRTC LPS25H hts221

Fork of ELEC350-extended-referral2 by satbir panesar

Revision:
34:62aae7d507e2
Parent:
33:cffe0ae69aa6
Child:
35:af125862c33e
--- 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