soft253

Dependencies:   LPS25H hts221

Fork of SOFT253_Assignment by lucas kovaci

main.cpp

Committer:
akovaci
Date:
2017-05-12
Revision:
36:7426f37f0c96
Parent:
35:af125862c33e
Child:
37:b62b3aa19645

File content as of revision 36:7426f37f0c96:

#include "mbed.h"
#include "rtos.h"
#include "hts221.h"
#include "LPS25H.h"
Serial pc(USBTX, USBRX);


#define N 10
DigitalOut myled(D7);
Ticker t;
I2C i2c2(I2C_SDA, I2C_SCL);

float tempCelsius = 25.50;
float humi = 55;
int humiMax = 100; 
char cmd=0;
float tempArray[N];
float humArray[N];
float pressArray[N];
uint32_t seconds = 0, minutes=0, hours=0; 
static float nextTEMPsample, nextHUMsample, nextPRESSsample;

static int indexOfOldest = (N-1);

LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
HTS221 humidity(I2C_SDA, I2C_SCL);


void adcISR();



typedef struct {
      
      float tempVal ;
      float humVal;
      float pressVal;
    }message_t;
    
Mail<message_t, 10> mail_box;

void adcISR()
{
       message_t *message = mail_box.alloc();
       message->tempVal = tempCelsius;
       message->humVal = humi;
       message->pressVal = barometer.pressure();
       myled=1;
       mail_box.put(message);
       //Thread::wait(1000);
       
}
void thread1 (void const* arg)
{
         
         pc.baud(115200);
         pc.printf("Temperature,Humidity,Pressure\n\n");
   while(1) 
   {  
        
         osEvent evt = mail_box.get();
        if (evt.status == osEventMail) 
        { 
            for (unsigned int n=(N-1); n>0; n--) 
           { 
             tempArray[n]= tempArray[n-1];
             humArray[n]= humArray[n-1];
             pressArray[n]= pressArray[n-1];
           }
             message_t *message = (message_t*)evt.value.p;
             tempArray[0]= message->tempVal;
             humArray[0] = message->humVal;
             pressArray[0]= message->pressVal;
             for (unsigned int n=0; n<N; n++)
              {
                 pc.printf("the element of %d is %4.2f\n\r ",n,tempArray[n]);
                 wait(1.0);
              }
            
            // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]);
             
             mail_box.free(message); 
       }
    }    
}
 char answer;
int main(void)
  { 
  
    puts("Loading... \n\n");
    Thread thread(thread1);
    t.attach(&adcISR,15);
    
    while(1) 
    {
       
      
           
       humidity.init();
       humidity.calib();
       humidity.ReadTempHumi(&tempCelsius, &humi);
       barometer.get();
       barometer.pressure();
       barometer.temperature();
       sleep();
       Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds! 
       myled = 0; // LED is OFF
       Thread::wait(100); // 100 ms
        
       
      
     
    }
      
  }