Syggestions

Dependencies:   CheckRTC LPS25H hts221

Fork of ELEC350-extended-referral2 by satbir panesar

Committer:
noutram
Date:
Thu Nov 23 11:50:35 2017 +0000
Revision:
47:12f18a4527d8
Parent:
46:794973f66ef6
Suggestions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
martinsimpson 32:260a288be58f 2 #include "rtos.h"
noutram 35:af125862c33e 3 #include "hts221.h"
martinsimpson 32:260a288be58f 4 #include "LPS25H.h"
spanesar 40:426cd176ce80 5 #include <sstream>
spanesar 41:ce3d6fb38d3b 6 #define READALL_OFF 1
spanesar 41:ce3d6fb38d3b 7 #define SETTIME_OFF 2
spanesar 41:ce3d6fb38d3b 8 #define SETT_OFF 4
spanesar 43:a9682b81632b 9 #define READ_OFF 7
spanesar 43:a9682b81632b 10 #define ALL_OFF 9
spanesar 41:ce3d6fb38d3b 11
spanesar 39:504f5dc30a33 12
martinsimpson 32:260a288be58f 13
martinsimpson 32:260a288be58f 14 DigitalOut myled(LED1);
martinsimpson 32:260a288be58f 15 I2C i2c2(I2C_SDA, I2C_SCL);
spanesar 39:504f5dc30a33 16 Serial pc(USBTX, USBRX);
noutram 35:af125862c33e 17 float tempCelsius = 25.50;
noutram 35:af125862c33e 18 float humi = 55;
spanesar 39:504f5dc30a33 19 int humiMax = 100;
spanesar 40:426cd176ce80 20 char buffer_str=0;
spanesar 39:504f5dc30a33 21 uint32_t seconds = 0, minutes=0, hours=0;
spanesar 39:504f5dc30a33 22 Ticker t;
spanesar 39:504f5dc30a33 23 volatile static unsigned short sample16 = 0;
spanesar 39:504f5dc30a33 24 void doSample1Hz();
spanesar 39:504f5dc30a33 25 int count = 0;
spanesar 39:504f5dc30a33 26 char *buf;
spanesar 39:504f5dc30a33 27 size_t sz;
spanesar 46:794973f66ef6 28
noutram 47:12f18a4527d8 29 typedef struct {
noutram 47:12f18a4527d8 30 float temp;
noutram 47:12f18a4527d8 31 float press;
noutram 47:12f18a4527d8 32 float humid;
noutram 47:12f18a4527d8 33 } measurement;
spanesar 46:794973f66ef6 34
noutram 47:12f18a4527d8 35 measurement buffer [120];
martinsimpson 32:260a288be58f 36
noutram 35:af125862c33e 37 LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
noutram 35:af125862c33e 38 HTS221 humidity(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 39
spanesar 40:426cd176ce80 40 void function1();
spanesar 43:a9682b81632b 41
spanesar 39:504f5dc30a33 42
spanesar 40:426cd176ce80 43 Thread t1;
noutram 45:fac0d195fc65 44 Thread tSample;
spanesar 39:504f5dc30a33 45
spanesar 40:426cd176ce80 46 osThreadId idMain;
spanesar 40:426cd176ce80 47 osThreadId id1;
spanesar 41:ce3d6fb38d3b 48 osThreadId id2;
spanesar 41:ce3d6fb38d3b 49 osThreadId id3;
spanesar 41:ce3d6fb38d3b 50 osThreadId id4;
spanesar 41:ce3d6fb38d3b 51
noutram 45:fac0d195fc65 52 Ticker ticker;
noutram 35:af125862c33e 53
spanesar 40:426cd176ce80 54 void function1()
spanesar 46:794973f66ef6 55 {
spanesar 46:794973f66ef6 56 //begin function
spanesar 43:a9682b81632b 57 while (true) {//begin while true
spanesar 43:a9682b81632b 58 char buffer [128];
spanesar 43:a9682b81632b 59 scanf("%127s", buffer);
spanesar 43:a9682b81632b 60 string buffer_str(buffer);
spanesar 43:a9682b81632b 61 char date [32];
spanesar 43:a9682b81632b 62 strftime(date, 32, "%Y/%m/%d %a", localtime(&seconds));
spanesar 43:a9682b81632b 63 char time [32];
spanesar 43:a9682b81632b 64 strftime(time, 32, "%H:%M:%S %p", localtime(&seconds));
spanesar 43:a9682b81632b 65
spanesar 43:a9682b81632b 66 if(buffer_str=="READALL") {//begin if buffer readall
spanesar 46:794973f66ef6 67
spanesar 43:a9682b81632b 68 // displays all the variables of time, date, temperature, humidity and all the barometric readings to the serial
spanesar 43:a9682b81632b 69 printf("%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, barometer.pressure(), barometer.temperature());
spanesar 43:a9682b81632b 70 myled = 1; // LED is ON
spanesar 43:a9682b81632b 71 Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
spanesar 43:a9682b81632b 72 myled = 0; // LED is OFF
spanesar 43:a9682b81632b 73
spanesar 46:794973f66ef6 74 }//end if buffer readall
spanesar 46:794973f66ef6 75
spanesar 46:794973f66ef6 76
spanesar 43:a9682b81632b 77
spanesar 43:a9682b81632b 78
spanesar 46:794973f66ef6 79 if(buffer_str=="SETTIME") {// begin if buffer settime
spanesar 46:794973f66ef6 80 set_time(1508268288); //sets time in UTC
spanesar 46:794973f66ef6 81 printf("time and date updated to %s %s\n\r", time, date); //prints date and time
spanesar 46:794973f66ef6 82 myled = 1; //led on
spanesar 46:794973f66ef6 83 Thread::wait(200); // wait 200ms
spanesar 46:794973f66ef6 84 myled = 0; //led off
spanesar 46:794973f66ef6 85
spanesar 46:794973f66ef6 86 }//end if buffer settime
spanesar 46:794973f66ef6 87
spanesar 46:794973f66ef6 88
spanesar 46:794973f66ef6 89
spanesar 46:794973f66ef6 90 if(buffer_str=="SETT") { // begin if buffer sett
spanesar 43:a9682b81632b 91 for (count = 0; count < 5; count++) {
noutram 45:fac0d195fc65 92 float temp = barometer.temperature();
noutram 45:fac0d195fc65 93 float pressure = barometer.pressure();
spanesar 46:794973f66ef6 94
noutram 45:fac0d195fc65 95 sz = snprintf(NULL, 0,"%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, pressure, temp);
spanesar 43:a9682b81632b 96 buf = (char *)malloc(sz + 1);
noutram 45:fac0d195fc65 97 snprintf(buf, sz + 1, "%s, %s, %4.2fC , %3.1f%%, %6.1f, %4.1f\n\r", time, date, tempCelsius, humi, pressure, temp);
spanesar 43:a9682b81632b 98 printf("%s\n\r",buf);
noutram 45:fac0d195fc65 99 free(buf);
spanesar 43:a9682b81632b 100 printf("written to memory\n\r");
spanesar 43:a9682b81632b 101 myled = 1;
spanesar 43:a9682b81632b 102 Thread::wait(200);
spanesar 43:a9682b81632b 103 myled = 0;
spanesar 46:794973f66ef6 104
spanesar 43:a9682b81632b 105 } //end if buffer sett
spanesar 46:794973f66ef6 106
spanesar 46:794973f66ef6 107 }
spanesar 43:a9682b81632b 108
spanesar 46:794973f66ef6 109
spanesar 46:794973f66ef6 110
spanesar 44:ca34a376a17c 111
spanesar 43:a9682b81632b 112 if(buffer_str=="READ") { //begin if buffer read
spanesar 43:a9682b81632b 113 printf("%s\n\r", buf);
spanesar 43:a9682b81632b 114 myled = 1;
spanesar 43:a9682b81632b 115 Thread::wait(200);
spanesar 43:a9682b81632b 116 myled = 0;
spanesar 46:794973f66ef6 117
spanesar 43:a9682b81632b 118 }//end if buffer read
spanesar 46:794973f66ef6 119
noutram 45:fac0d195fc65 120 }//end while true
noutram 45:fac0d195fc65 121 }//end function
spanesar 43:a9682b81632b 122
spanesar 46:794973f66ef6 123 void getSampleThread()
spanesar 46:794973f66ef6 124 {
spanesar 46:794973f66ef6 125 while (true) {
spanesar 46:794973f66ef6 126 Thread::signal_wait(99);
spanesar 46:794973f66ef6 127 //Get samples
noutram 47:12f18a4527d8 128 measurement m;
noutram 47:12f18a4527d8 129
spanesar 46:794973f66ef6 130
noutram 47:12f18a4527d8 131 float pressure = barometer.pressure();
noutram 47:12f18a4527d8 132 m.pressure = pressure;
spanesar 43:a9682b81632b 133
noutram 47:12f18a4527d8 134 float temp;
noutram 47:12f18a4527d8 135 float humidity;
noutram 47:12f18a4527d8 136 humidity.ReadTempHumi(&temp, &humidity); // reads temperature and humity levels
noutram 47:12f18a4527d8 137 m.humidity = humidity;
noutram 47:12f18a4527d8 138 m.temperature = temp;
noutram 47:12f18a4527d8 139
noutram 47:12f18a4527d8 140 buffer[oldest] = m;
noutram 47:12f18a4527d8 141
noutram 47:12f18a4527d8 142 //update oldest
noutram 47:12f18a4527d8 143 oldest++;
noutram 47:12f18a4527d8 144 //wrap back to zero if at the end
noutram 47:12f18a4527d8 145 //TO DO
noutram 47:12f18a4527d8 146
spanesar 43:a9682b81632b 147
spanesar 43:a9682b81632b 148
spanesar 46:794973f66ef6 149 }
spanesar 46:794973f66ef6 150 }
spanesar 43:a9682b81632b 151
spanesar 46:794973f66ef6 152 void getSample()
spanesar 46:794973f66ef6 153 {
spanesar 46:794973f66ef6 154 tSample.signal_set(99);
spanesar 41:ce3d6fb38d3b 155 }
spanesar 41:ce3d6fb38d3b 156
spanesar 46:794973f66ef6 157 int main()
spanesar 46:794973f66ef6 158 {
spanesar 46:794973f66ef6 159 time_t seconds = time(NULL);
spanesar 46:794973f66ef6 160 pc.baud(9600); //sets baud rate to 9600
spanesar 46:794973f66ef6 161 ticker.attach(getSample, 15);
spanesar 46:794973f66ef6 162 tSample.start(getSampleThread);
spanesar 46:794973f66ef6 163 idMain = osThreadGetId();
spanesar 46:794973f66ef6 164 t1.start(function1);
spanesar 46:794973f66ef6 165 id1 = t1.gettid();
spanesar 46:794973f66ef6 166 humidity.init();
spanesar 46:794973f66ef6 167 humidity.calib();
spanesar 46:794973f66ef6 168 printf("Type SETTIME to set time and date [enter] \n\r");
spanesar 46:794973f66ef6 169 printf("Type SETT to start sampling [ENTER]\n\r");
spanesar 46:794973f66ef6 170 printf("Type DELETEALL to delete sensor data [enter]\n\r");
spanesar 46:794973f66ef6 171 printf("Type READALL [enter]\n\r");
spanesar 46:794973f66ef6 172 printf("Type READ to read sensor data in memory [ENTER]\n\r");
spanesar 46:794973f66ef6 173
spanesar 46:794973f66ef6 174
spanesar 46:794973f66ef6 175 while(1) {
spanesar 46:794973f66ef6 176 char buffer [128];
spanesar 46:794973f66ef6 177 scanf("%127s", buffer);
spanesar 46:794973f66ef6 178 string buffer_str(buffer);
spanesar 46:794973f66ef6 179 osSignalWait(ALL_OFF,osWaitForever);
spanesar 46:794973f66ef6 180
spanesar 46:794973f66ef6 181 }
spanesar 46:794973f66ef6 182 }
spanesar 46:794973f66ef6 183