my coursework

Dependencies:   CheckRTC LPS25H hts221

Fork of ELEC350-extended-referral1 by satbir panesar

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