3rd Repo, trying to figure this out.

Dependencies:   LPS25H hts221

Fork of SOFT253_Template_Weather_OS_54 by Stage-1 Students SoCEM

main.cpp

Committer:
FairyMental
Date:
2017-04-05
Revision:
35:484e384f9bf1
Parent:
34:09ed07f2acba
Child:
36:19d3f752f9c3

File content as of revision 35:484e384f9bf1:

#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;
Thread *t2;
int count= 0;
//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() {

    while(1)
    {
    //Read sample - make a copy
    float temperature = 0 , humidity = 0,pressure = 0;
    
  
    
    //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
    measurer.ReadTempHumi(&temperature,&humidity);
    barometer.get();
    pressure = barometer.pressure();
    
    //
    //  Initializing object with count variable and sending it through mail works perfectly fine, output si correct!
    //  But if I read the temperature / humidity / pressure using a ticker, I get 168 degrees :( .
    //  while I read from main thread, i get the correct values, which made me doubt the struct / mailbox, debugged it at my best practice but I couldn't get it sorted.
    
    measure->temperature = temperature; // you can test the mailbox by assigning the count variable to measure->temperature, and see the expected value.
    count++;
    measure->humidity = humidity;
    count++;
    measure->pressure = pressure;
    count++;
   // 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;
    }
    Thread::wait(5000);
    }
}
 
//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: %fC |  %f% % |  %f \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); 
    t2 = new Thread();
    t2->start(adcISR);
    
    printf("Main Thread\n");
    while(1) 
    {
        Thread::wait(3000);
        printf("MainThreadActive \r\n");
        float temp,humi;
        measurer.ReadTempHumi(&temp, &humi);
        barometer.get();
        printf("Main ThreaD: %fC %f %f \r\n", temp, humi,barometer.pressure());

      }
}