SOFT253 ASSIGNMENT

Dependencies:   LPS25H hts221

Fork of SOFT253_Assignment_V4 by lucas kovaci

Committer:
akovaci
Date:
Mon May 15 00:27:39 2017 +0000
Revision:
44:5bb7e0a2387a
Parent:
43:d7cb544ad771
Child:
45:4ed55fd0f06f
V4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akovaci 43:d7cb544ad771 1
Jonathan Austin 0:2757d7abb7d9 2 #include "mbed.h"
martinsimpson 32:260a288be58f 3 #include "rtos.h"
noutram 35:af125862c33e 4 #include "hts221.h"
martinsimpson 32:260a288be58f 5 #include "LPS25H.h"
akovaci 37:b62b3aa19645 6
akovaci 36:7426f37f0c96 7 Serial pc(USBTX, USBRX);
martinsimpson 32:260a288be58f 8
akovaci 42:ac413d9fb994 9
akovaci 36:7426f37f0c96 10 #define N 10
akovaci 36:7426f37f0c96 11 DigitalOut myled(D7);
akovaci 36:7426f37f0c96 12 Ticker t;
martinsimpson 32:260a288be58f 13 I2C i2c2(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 14
noutram 35:af125862c33e 15 float tempCelsius = 25.50;
noutram 35:af125862c33e 16 float humi = 55;
akovaci 38:8b6a6927b4f2 17 int humiMax = 100;
akovaci 38:8b6a6927b4f2 18 char cmd[20];
akovaci 38:8b6a6927b4f2 19 char cmd2[20];
akovaci 44:5bb7e0a2387a 20 char cmdSet[20];
akovaci 44:5bb7e0a2387a 21 char cmdSet2[20];
Mpoumtsakalaka 40:4ea91e49d60c 22 char input1[20];
akovaci 42:ac413d9fb994 23 char input2[20];
akovaci 44:5bb7e0a2387a 24 char inputSet1[20];
akovaci 44:5bb7e0a2387a 25 char inputSet2[20];
akovaci 42:ac413d9fb994 26 char stringToCompare1[20];
Mpoumtsakalaka 39:f43b008adc9d 27 char stringToCompare2[20];
akovaci 44:5bb7e0a2387a 28 char stringToCompareSet1[20];
akovaci 44:5bb7e0a2387a 29 char stringToCompareSet2[20];
akovaci 36:7426f37f0c96 30 float tempArray[N];
akovaci 36:7426f37f0c96 31 float humArray[N];
akovaci 36:7426f37f0c96 32 float pressArray[N];
akovaci 44:5bb7e0a2387a 33 int sampleSpeed = 15;
noutram 35:af125862c33e 34 uint32_t seconds = 0, minutes=0, hours=0;
akovaci 37:b62b3aa19645 35
akovaci 43:d7cb544ad771 36 int counters = 0;
akovaci 44:5bb7e0a2387a 37 int res;
akovaci 44:5bb7e0a2387a 38 int res2;
martinsimpson 32:260a288be58f 39
noutram 35:af125862c33e 40 LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
noutram 35:af125862c33e 41 HTS221 humidity(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 42
noutram 35:af125862c33e 43
akovaci 36:7426f37f0c96 44 void adcISR();
akovaci 37:b62b3aa19645 45 void thread1 (void const *args );
akovaci 37:b62b3aa19645 46 void threadcomun (void const *args);
akovaci 37:b62b3aa19645 47
akovaci 37:b62b3aa19645 48 Thread* t1;
akovaci 37:b62b3aa19645 49 Thread* t2;
akovaci 44:5bb7e0a2387a 50 Thread* t3;
akovaci 44:5bb7e0a2387a 51 Thread* t4;
akovaci 37:b62b3aa19645 52
akovaci 36:7426f37f0c96 53
akovaci 36:7426f37f0c96 54
akovaci 36:7426f37f0c96 55 typedef struct {
akovaci 36:7426f37f0c96 56
akovaci 36:7426f37f0c96 57 float tempVal ;
akovaci 36:7426f37f0c96 58 float humVal;
akovaci 36:7426f37f0c96 59 float pressVal;
akovaci 43:d7cb544ad771 60 }message_t;
martinsimpson 32:260a288be58f 61
akovaci 44:5bb7e0a2387a 62 Mail<message_t, 16> mail_box;
akovaci 36:7426f37f0c96 63
akovaci 36:7426f37f0c96 64 void adcISR()
akovaci 36:7426f37f0c96 65 {
akovaci 42:ac413d9fb994 66
akovaci 36:7426f37f0c96 67 message_t *message = mail_box.alloc();
akovaci 36:7426f37f0c96 68 message->tempVal = tempCelsius;
akovaci 36:7426f37f0c96 69 message->humVal = humi;
akovaci 36:7426f37f0c96 70 message->pressVal = barometer.pressure();
akovaci 36:7426f37f0c96 71 myled=1;
akovaci 43:d7cb544ad771 72 if (counters < 10)
akovaci 43:d7cb544ad771 73 {
akovaci 43:d7cb544ad771 74 counters= counters + 1;
akovaci 43:d7cb544ad771 75 }
akovaci 43:d7cb544ad771 76 else
akovaci 43:d7cb544ad771 77 {
akovaci 44:5bb7e0a2387a 78 counters =10;
akovaci 44:5bb7e0a2387a 79 }
akovaci 43:d7cb544ad771 80
akovaci 43:d7cb544ad771 81
akovaci 43:d7cb544ad771 82
akovaci 43:d7cb544ad771 83
akovaci 36:7426f37f0c96 84 mail_box.put(message);
akovaci 36:7426f37f0c96 85 //Thread::wait(1000);
akovaci 36:7426f37f0c96 86
akovaci 36:7426f37f0c96 87 }
akovaci 37:b62b3aa19645 88 void thread1 (void const *args )
akovaci 36:7426f37f0c96 89 {
akovaci 36:7426f37f0c96 90
akovaci 36:7426f37f0c96 91 pc.baud(115200);
akovaci 37:b62b3aa19645 92 //pc.printf("Temperature,Humidity,Pressure\n\n");
akovaci 36:7426f37f0c96 93 while(1)
akovaci 36:7426f37f0c96 94 {
akovaci 38:8b6a6927b4f2 95
akovaci 36:7426f37f0c96 96 osEvent evt = mail_box.get();
akovaci 36:7426f37f0c96 97 if (evt.status == osEventMail)
akovaci 36:7426f37f0c96 98 {
akovaci 36:7426f37f0c96 99 for (unsigned int n=(N-1); n>0; n--)
akovaci 36:7426f37f0c96 100 {
akovaci 36:7426f37f0c96 101 tempArray[n]= tempArray[n-1];
akovaci 36:7426f37f0c96 102 humArray[n]= humArray[n-1];
akovaci 36:7426f37f0c96 103 pressArray[n]= pressArray[n-1];
akovaci 36:7426f37f0c96 104 }
akovaci 36:7426f37f0c96 105 message_t *message = (message_t*)evt.value.p;
akovaci 36:7426f37f0c96 106 tempArray[0]= message->tempVal;
akovaci 36:7426f37f0c96 107 humArray[0] = message->humVal;
akovaci 36:7426f37f0c96 108 pressArray[0]= message->pressVal;
akovaci 37:b62b3aa19645 109
akovaci 36:7426f37f0c96 110
akovaci 36:7426f37f0c96 111 // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]);
akovaci 36:7426f37f0c96 112
akovaci 36:7426f37f0c96 113 mail_box.free(message);
akovaci 36:7426f37f0c96 114 }
akovaci 36:7426f37f0c96 115 }
akovaci 36:7426f37f0c96 116 }
akovaci 37:b62b3aa19645 117
akovaci 44:5bb7e0a2387a 118 void threadReadComun (void const *args)
akovaci 37:b62b3aa19645 119 {
akovaci 44:5bb7e0a2387a 120
akovaci 37:b62b3aa19645 121 pc.baud(115200);
akovaci 44:5bb7e0a2387a 122 pc.printf("Temperature,Humidity,Pressure\n");
akovaci 38:8b6a6927b4f2 123 //while(cmd==NULL){cmd=getchar();}
Mpoumtsakalaka 39:f43b008adc9d 124 while(1)
Mpoumtsakalaka 39:f43b008adc9d 125 {
akovaci 44:5bb7e0a2387a 126 scanf("%s%s",cmd,cmd2);
Mpoumtsakalaka 39:f43b008adc9d 127 //READ ALL------------------------------------------
akovaci 42:ac413d9fb994 128 //INPUT 2
akovaci 38:8b6a6927b4f2 129
akovaci 42:ac413d9fb994 130 strcpy (input1,cmd); //INPUT 1
akovaci 44:5bb7e0a2387a 131 pc.printf("you entered: %s\n\r",input1);
akovaci 42:ac413d9fb994 132 strcpy (input2,cmd2);
akovaci 42:ac413d9fb994 133 strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1
akovaci 42:ac413d9fb994 134 strcpy (stringToCompare2,input2); //STRING TO COMPARE 2
akovaci 42:ac413d9fb994 135 res = strncmp(input1,stringToCompare1,20);
akovaci 42:ac413d9fb994 136 res2 = strncmp(input2,stringToCompare2,20);
akovaci 42:ac413d9fb994 137 int val = atoi(input2);
akovaci 42:ac413d9fb994 138 if (val <=10 && val >=1)
akovaci 42:ac413d9fb994 139 {
akovaci 42:ac413d9fb994 140 if (res==0 && res2==0)
akovaci 43:d7cb544ad771 141 {
akovaci 44:5bb7e0a2387a 142 for (unsigned int n=0; n<val; n++)
akovaci 43:d7cb544ad771 143 {
akovaci 44:5bb7e0a2387a 144 pc.printf("the element of %d is %4.2f\n\r",n,tempArray[n]);
akovaci 43:d7cb544ad771 145 }
akovaci 44:5bb7e0a2387a 146
akovaci 44:5bb7e0a2387a 147
akovaci 42:ac413d9fb994 148 }
akovaci 42:ac413d9fb994 149 }
akovaci 44:5bb7e0a2387a 150 else //2
akovaci 44:5bb7e0a2387a 151 {
akovaci 44:5bb7e0a2387a 152 strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1
akovaci 44:5bb7e0a2387a 153 strcpy (stringToCompare2,"ALL"); //STRING TO COMPARE 2
akovaci 44:5bb7e0a2387a 154 res = strncmp(input1,stringToCompare1,20);
akovaci 44:5bb7e0a2387a 155 res2 = strncmp(input2,stringToCompare2,20);
akovaci 44:5bb7e0a2387a 156 if (res==0 && res2==0)
akovaci 44:5bb7e0a2387a 157 {
akovaci 44:5bb7e0a2387a 158 for (unsigned int n=0; n<N; n++)
akovaci 44:5bb7e0a2387a 159 pc.printf("the element of %d is %4.2f\n\r",n,tempArray[n]);
akovaci 44:5bb7e0a2387a 160 pc.printf("the Counter: %d\n",counters);
akovaci 44:5bb7e0a2387a 161 }
akovaci 44:5bb7e0a2387a 162
akovaci 44:5bb7e0a2387a 163
akovaci 44:5bb7e0a2387a 164 }
akovaci 44:5bb7e0a2387a 165
akovaci 44:5bb7e0a2387a 166
akovaci 44:5bb7e0a2387a 167
akovaci 42:ac413d9fb994 168 }//while
akovaci 42:ac413d9fb994 169 }
akovaci 37:b62b3aa19645 170
akovaci 42:ac413d9fb994 171
akovaci 36:7426f37f0c96 172 char answer;
akovaci 44:5bb7e0a2387a 173 void threadDeleteComun (void const *args)
akovaci 44:5bb7e0a2387a 174 {
akovaci 44:5bb7e0a2387a 175
akovaci 44:5bb7e0a2387a 176 pc.baud(115200);
akovaci 44:5bb7e0a2387a 177
akovaci 44:5bb7e0a2387a 178
akovaci 44:5bb7e0a2387a 179 while(1)
akovaci 44:5bb7e0a2387a 180 {
akovaci 44:5bb7e0a2387a 181 scanf("%s%s",cmd,cmd2);
akovaci 44:5bb7e0a2387a 182 //READ ALL------------------------------------------
akovaci 44:5bb7e0a2387a 183 //INPUT 2
akovaci 44:5bb7e0a2387a 184
akovaci 44:5bb7e0a2387a 185 strcpy (input1,cmd); //INPUT 1
akovaci 44:5bb7e0a2387a 186 pc.printf("you entered: %s\n\r",input1);
akovaci 44:5bb7e0a2387a 187 strcpy (input2,cmd2);
akovaci 44:5bb7e0a2387a 188 strcpy (stringToCompare1,"DELETE"); //STRING TO COMPARE 1
akovaci 44:5bb7e0a2387a 189 strcpy (stringToCompare2,input2); //STRING TO COMPARE 2
akovaci 44:5bb7e0a2387a 190 res = strncmp(input1,stringToCompare1,20);
akovaci 44:5bb7e0a2387a 191 res2 = strncmp(input2,stringToCompare2,20);
akovaci 44:5bb7e0a2387a 192 int val = atoi(input2);
akovaci 44:5bb7e0a2387a 193 int startDel=(counters - val);
akovaci 44:5bb7e0a2387a 194 if (val <=10 && val >=1)
akovaci 44:5bb7e0a2387a 195 {
akovaci 44:5bb7e0a2387a 196 if(res==0 && res2==0)
akovaci 44:5bb7e0a2387a 197 {
akovaci 44:5bb7e0a2387a 198 for (unsigned int n=startDel; n<counters; n++)
akovaci 44:5bb7e0a2387a 199 {
akovaci 44:5bb7e0a2387a 200 tempArray[n]=0.00;
akovaci 44:5bb7e0a2387a 201
akovaci 44:5bb7e0a2387a 202 }
akovaci 44:5bb7e0a2387a 203 pc.printf("Deleted %d records\n",val);
akovaci 44:5bb7e0a2387a 204 counters=counters - val;
akovaci 44:5bb7e0a2387a 205 }
akovaci 44:5bb7e0a2387a 206 }
akovaci 44:5bb7e0a2387a 207
akovaci 44:5bb7e0a2387a 208 else
akovaci 44:5bb7e0a2387a 209 {
akovaci 44:5bb7e0a2387a 210 strcpy (stringToCompare1,"DELETE");
akovaci 44:5bb7e0a2387a 211 strcpy (stringToCompare2,"ALL");
akovaci 44:5bb7e0a2387a 212 res = strncmp(input1,stringToCompare1,20);
akovaci 44:5bb7e0a2387a 213 res2 = strncmp(input2,stringToCompare2,20);
akovaci 44:5bb7e0a2387a 214 if(res==0 && res2==0)
akovaci 44:5bb7e0a2387a 215 {
akovaci 44:5bb7e0a2387a 216 //Delete every element.
akovaci 44:5bb7e0a2387a 217 memset(tempArray, 0, sizeof tempArray);
akovaci 44:5bb7e0a2387a 218 pc.printf("%d Elements deleted\n",N);
akovaci 44:5bb7e0a2387a 219 counters=0;
akovaci 44:5bb7e0a2387a 220 }
akovaci 44:5bb7e0a2387a 221
akovaci 44:5bb7e0a2387a 222
akovaci 44:5bb7e0a2387a 223 }//else 2
akovaci 44:5bb7e0a2387a 224
akovaci 44:5bb7e0a2387a 225 }//while
akovaci 44:5bb7e0a2387a 226 }
akovaci 44:5bb7e0a2387a 227 void threadSetTComun (void const *args)
akovaci 44:5bb7e0a2387a 228 {
akovaci 44:5bb7e0a2387a 229
akovaci 44:5bb7e0a2387a 230 pc.baud(115200);
akovaci 44:5bb7e0a2387a 231
akovaci 44:5bb7e0a2387a 232 //while(cmd==NULL){cmd=getchar();}
akovaci 44:5bb7e0a2387a 233 while(1)
akovaci 44:5bb7e0a2387a 234 {
akovaci 44:5bb7e0a2387a 235 scanf("%s%s",cmdSet,cmdSet2);
akovaci 44:5bb7e0a2387a 236 //READ ALL------------------------------------------
akovaci 44:5bb7e0a2387a 237 //INPUT 2
akovaci 44:5bb7e0a2387a 238
akovaci 44:5bb7e0a2387a 239 strcpy (inputSet1,cmdSet); //INPUT 1
akovaci 44:5bb7e0a2387a 240 pc.printf("you entered: %s\n\r",inputSet1);
akovaci 44:5bb7e0a2387a 241 strcpy (inputSet2,cmdSet2);
akovaci 44:5bb7e0a2387a 242 strcpy (stringToCompareSet1,"SETT"); //STRING TO COMPARE 1
akovaci 44:5bb7e0a2387a 243 strcpy (stringToCompareSet2,inputSet2); //STRING TO COMPARE 2
akovaci 44:5bb7e0a2387a 244 res = strncmp(inputSet1,stringToCompareSet1,20);
akovaci 44:5bb7e0a2387a 245 res2 = strncmp(inputSet2,stringToCompareSet2,20);
akovaci 44:5bb7e0a2387a 246 int inputSpeed = atoi(inputSet2);
akovaci 44:5bb7e0a2387a 247
akovaci 44:5bb7e0a2387a 248
akovaci 44:5bb7e0a2387a 249 if (inputSpeed <=60 && inputSpeed >=0.1)
akovaci 44:5bb7e0a2387a 250 {
akovaci 44:5bb7e0a2387a 251 if (res==0 && res2==0)
akovaci 44:5bb7e0a2387a 252 {
akovaci 44:5bb7e0a2387a 253 pc.printf("CURRENT SPEED %d \n",inputSpeed);
akovaci 44:5bb7e0a2387a 254 sampleSpeed = inputSpeed;
akovaci 44:5bb7e0a2387a 255 pc.printf("T UPDATED TO %d %d\n",sampleSpeed,inputSpeed);
akovaci 44:5bb7e0a2387a 256
akovaci 44:5bb7e0a2387a 257
akovaci 44:5bb7e0a2387a 258 }
akovaci 44:5bb7e0a2387a 259 }
akovaci 44:5bb7e0a2387a 260 }
akovaci 44:5bb7e0a2387a 261
akovaci 44:5bb7e0a2387a 262 }
akovaci 44:5bb7e0a2387a 263
akovaci 44:5bb7e0a2387a 264
akovaci 36:7426f37f0c96 265 int main(void)
akovaci 36:7426f37f0c96 266 {
akovaci 36:7426f37f0c96 267
akovaci 36:7426f37f0c96 268 puts("Loading... \n\n");
akovaci 44:5bb7e0a2387a 269
akovaci 37:b62b3aa19645 270 t1 = new Thread(thread1);
akovaci 44:5bb7e0a2387a 271 t2 = new Thread(threadReadComun);
akovaci 44:5bb7e0a2387a 272 t3 = new Thread( threadDeleteComun);
akovaci 44:5bb7e0a2387a 273 t4 = new Thread( threadSetTComun);
akovaci 37:b62b3aa19645 274
akovaci 37:b62b3aa19645 275 // Thread thread(thread1);
akovaci 37:b62b3aa19645 276 //threadcomun();
akovaci 37:b62b3aa19645 277
akovaci 37:b62b3aa19645 278 //Thread thread(threadcomun);
akovaci 44:5bb7e0a2387a 279 t.attach(&adcISR,sampleSpeed); // timer of measurements
akovaci 36:7426f37f0c96 280
akovaci 36:7426f37f0c96 281 while(1)
noutram 35:af125862c33e 282 {
akovaci 36:7426f37f0c96 283 humidity.init();
akovaci 36:7426f37f0c96 284 humidity.calib();
akovaci 36:7426f37f0c96 285 humidity.ReadTempHumi(&tempCelsius, &humi);
akovaci 36:7426f37f0c96 286 barometer.get();
akovaci 36:7426f37f0c96 287 barometer.pressure();
akovaci 36:7426f37f0c96 288 barometer.temperature();
akovaci 36:7426f37f0c96 289 sleep();
akovaci 36:7426f37f0c96 290 Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
akovaci 36:7426f37f0c96 291 myled = 0; // LED is OFF
akovaci 36:7426f37f0c96 292 Thread::wait(100); // 100 ms
FairyMental 34:62aae7d507e2 293 }
akovaci 36:7426f37f0c96 294
noutram 35:af125862c33e 295 }
noutram 35:af125862c33e 296
noutram 35:af125862c33e 297
noutram 35:af125862c33e 298
akovaci 36:7426f37f0c96 299
noutram 35:af125862c33e 300
akovaci 36:7426f37f0c96 301
noutram 35:af125862c33e 302
akovaci 36:7426f37f0c96 303
akovaci 36:7426f37f0c96 304
akovaci 36:7426f37f0c96 305
akovaci 36:7426f37f0c96 306