Nicholas Outram / Mbed OS satbir2

Dependencies:   CheckRTC LPS25H hts221

Fork of ELEC350-extended-referral2 by satbir panesar

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "hts221.h"
00004 #include "LPS25H.h"
00005 #include <sstream>
00006 #define READALL_OFF 1
00007 #define SETTIME_OFF 2
00008 #define SETT_OFF    4
00009 #define READ_OFF    7
00010 #define ALL_OFF     9
00011 
00012 
00013 
00014 DigitalOut myled(LED1);
00015 I2C i2c2(I2C_SDA, I2C_SCL);
00016 Serial pc(USBTX, USBRX);
00017 float tempCelsius = 25.50;
00018 float humi = 55;
00019 int humiMax = 100;
00020 char buffer_str=0;
00021 uint32_t seconds = 0, minutes=0, hours=0;
00022 Ticker t;
00023 volatile static unsigned short sample16 = 0;
00024 void doSample1Hz();
00025 int count = 0;
00026 char *buf;
00027 size_t sz;
00028 typedef struct {
00029     float temp;
00030     float press;
00031     float humid;
00032 } measurement;
00033 measurement buffer [120];
00034 
00035 LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
00036 HTS221 humidity(I2C_SDA, I2C_SCL);
00037 
00038 void function1();
00039 
00040 
00041 Thread t1;
00042 Thread tSample;
00043 
00044 osThreadId idMain;
00045 osThreadId id1;
00046 osThreadId id2;
00047 osThreadId id3;
00048 osThreadId id4;
00049 
00050 Ticker ticker;
00051 
00052 void function1()
00053 {//begin function
00054     while (true) {//begin while true
00055         char buffer [128];
00056         scanf("%127s", buffer);
00057         string buffer_str(buffer);
00058         char date [32];
00059         strftime(date, 32, "%Y/%m/%d %a", localtime(&seconds));
00060         char time [32];
00061         strftime(time, 32, "%H:%M:%S %p", localtime(&seconds));
00062 
00063         if(buffer_str=="READALL") {//begin if buffer readall
00064             humidity.ReadTempHumi(&tempCelsius, &humi); // reads temperature and humity levels
00065             barometer.get(); // gets barometer readings
00066             // displays all the variables of time, date, temperature, humidity and all the barometric readings to the serial
00067             printf("%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, barometer.pressure(), barometer.temperature());
00068             myled = 1; // LED is ON
00069             Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
00070             myled = 0; // LED is OFF
00071             t1.signal_set(READALL_OFF);
00072         }//end if buffer readall
00073         Thread::wait(200);
00074 
00075         //Thread::signal_wait(READALL_OFF);
00076         
00077         if(buffer_str=="SETTIME") {// begin if buffer settime
00078             set_time(1508268288);
00079             printf("time and date updated to %s %s\n\r", time, date);
00080             myled = 1;
00081             Thread::wait(200);
00082             myled = 0;
00083             t1.signal_set(SETTIME_OFF);
00084         }//end if buffer settime
00085         Thread::wait(200);
00086 
00087 
00088         //Thread::signal_wait(SETTIME_OFF);
00089         
00090         if(buffer_str=="SETT") // begin if buffer sett
00091         {
00092             for (count = 0; count < 5; count++) {
00093                 float temp = barometer.temperature();
00094                 float pressure = barometer.pressure();
00095                 
00096                 sz = snprintf(NULL, 0,"%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, pressure, temp);
00097                 buf = (char *)malloc(sz + 1);
00098                 snprintf(buf, sz + 1, "%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, pressure, temp);
00099                 printf("%s\n\r",buf);
00100                 free(buf);
00101                 printf("written to memory\n\r");
00102                 myled = 1;
00103                 Thread::wait(200);
00104                 myled = 0;
00105                 t1.signal_set(SETT_OFF);
00106             } //end if buffer sett
00107             Thread::wait(200);
00108          }   
00109         
00110 
00111         //Thread::signal_wait(SETT_OFF);
00112 
00113         if(buffer_str=="READ") { //begin if buffer read
00114             printf("%s\n\r", buf);
00115             myled = 1;
00116             Thread::wait(200);
00117             myled = 0;
00118             osSignalSet(idMain, ALL_OFF);
00119         }//end if buffer read
00120         Thread::wait(200);
00121     }//end while true
00122 }//end function
00123 
00124     void getSampleThread() {
00125         while (true) {
00126             Thread::signal_wait(99);
00127            //Get samples   
00128            
00129            //Put in buffer 
00130         }
00131     }
00132 
00133     void getSample() {
00134         tSample.signal_set(99);      
00135     }
00136 
00137     int main() 
00138     {
00139         pc.baud(9600); //sets baud rate to 9600
00140         ticker.attach(getSample, 15);
00141         tSample.start(getSampleThread);
00142         
00143         time_t seconds = time(NULL);
00144         idMain = osThreadGetId();
00145         t1.start(function1);
00146         id1 = t1.gettid();
00147         humidity.init();
00148         humidity.calib();
00149         printf("Type SETTIME to set time and date [enter] \n\r");
00150         printf("Type SETT to start sampling [ENTER]\n\r");
00151         printf("Type DELETEALL to delete sensor data [enter]\n\r");
00152         printf("Type READALL [enter]\n\r");
00153         printf("Type READ to read sensor data in memory [ENTER]\n\r");
00154 
00155 
00156         while(1) {
00157             char buffer [128];
00158             scanf("%127s", buffer);
00159             string buffer_str(buffer);
00160             osSignalWait(ALL_OFF,osWaitForever);
00161 
00162         }
00163 }
00164