v3 soft

Dependencies:   LPS25H hts221

Fork of SOFT253_Assignment_V3 by Panagiotis Mitseas

Committer:
akovaci
Date:
Sun May 14 13:18:58 2017 +0000
Revision:
43:d7cb544ad771
Parent:
42:ac413d9fb994
Delete

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];
Mpoumtsakalaka 40:4ea91e49d60c 20 char input1[20];
akovaci 42:ac413d9fb994 21 char input2[20];
akovaci 42:ac413d9fb994 22 char stringToCompare1[20];
Mpoumtsakalaka 39:f43b008adc9d 23 char stringToCompare2[20];
akovaci 36:7426f37f0c96 24 float tempArray[N];
akovaci 36:7426f37f0c96 25 float humArray[N];
akovaci 36:7426f37f0c96 26 float pressArray[N];
noutram 35:af125862c33e 27 uint32_t seconds = 0, minutes=0, hours=0;
akovaci 37:b62b3aa19645 28
akovaci 43:d7cb544ad771 29 int counters = 0;
akovaci 37:b62b3aa19645 30
martinsimpson 32:260a288be58f 31
noutram 35:af125862c33e 32 LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR);
noutram 35:af125862c33e 33 HTS221 humidity(I2C_SDA, I2C_SCL);
noutram 35:af125862c33e 34
noutram 35:af125862c33e 35
akovaci 36:7426f37f0c96 36 void adcISR();
akovaci 37:b62b3aa19645 37 void thread1 (void const *args );
akovaci 37:b62b3aa19645 38 void threadcomun (void const *args);
akovaci 37:b62b3aa19645 39
akovaci 37:b62b3aa19645 40 Thread* t1;
akovaci 37:b62b3aa19645 41 Thread* t2;
akovaci 37:b62b3aa19645 42
akovaci 37:b62b3aa19645 43
akovaci 36:7426f37f0c96 44
akovaci 36:7426f37f0c96 45
akovaci 36:7426f37f0c96 46 typedef struct {
akovaci 36:7426f37f0c96 47
akovaci 36:7426f37f0c96 48 float tempVal ;
akovaci 36:7426f37f0c96 49 float humVal;
akovaci 36:7426f37f0c96 50 float pressVal;
akovaci 43:d7cb544ad771 51 }message_t;
martinsimpson 32:260a288be58f 52
akovaci 36:7426f37f0c96 53 Mail<message_t, 10> mail_box;
akovaci 36:7426f37f0c96 54
akovaci 36:7426f37f0c96 55 void adcISR()
akovaci 36:7426f37f0c96 56 {
akovaci 42:ac413d9fb994 57
akovaci 36:7426f37f0c96 58 message_t *message = mail_box.alloc();
akovaci 36:7426f37f0c96 59 message->tempVal = tempCelsius;
akovaci 36:7426f37f0c96 60 message->humVal = humi;
akovaci 36:7426f37f0c96 61 message->pressVal = barometer.pressure();
akovaci 36:7426f37f0c96 62 myled=1;
akovaci 43:d7cb544ad771 63 if (counters < 10)
akovaci 43:d7cb544ad771 64 {
akovaci 43:d7cb544ad771 65 counters= counters + 1;
akovaci 43:d7cb544ad771 66 }
akovaci 43:d7cb544ad771 67 else
akovaci 43:d7cb544ad771 68 {
akovaci 43:d7cb544ad771 69 counters =10;
akovaci 43:d7cb544ad771 70 }
akovaci 43:d7cb544ad771 71
akovaci 43:d7cb544ad771 72
akovaci 43:d7cb544ad771 73
akovaci 43:d7cb544ad771 74
akovaci 36:7426f37f0c96 75 mail_box.put(message);
akovaci 36:7426f37f0c96 76 //Thread::wait(1000);
akovaci 36:7426f37f0c96 77
akovaci 36:7426f37f0c96 78 }
akovaci 37:b62b3aa19645 79 void thread1 (void const *args )
akovaci 36:7426f37f0c96 80 {
akovaci 36:7426f37f0c96 81
akovaci 36:7426f37f0c96 82 pc.baud(115200);
akovaci 37:b62b3aa19645 83 //pc.printf("Temperature,Humidity,Pressure\n\n");
akovaci 36:7426f37f0c96 84 while(1)
akovaci 36:7426f37f0c96 85 {
akovaci 38:8b6a6927b4f2 86
akovaci 36:7426f37f0c96 87 osEvent evt = mail_box.get();
akovaci 36:7426f37f0c96 88 if (evt.status == osEventMail)
akovaci 36:7426f37f0c96 89 {
akovaci 36:7426f37f0c96 90 for (unsigned int n=(N-1); n>0; n--)
akovaci 36:7426f37f0c96 91 {
akovaci 36:7426f37f0c96 92 tempArray[n]= tempArray[n-1];
akovaci 36:7426f37f0c96 93 humArray[n]= humArray[n-1];
akovaci 36:7426f37f0c96 94 pressArray[n]= pressArray[n-1];
akovaci 36:7426f37f0c96 95 }
akovaci 36:7426f37f0c96 96 message_t *message = (message_t*)evt.value.p;
akovaci 36:7426f37f0c96 97 tempArray[0]= message->tempVal;
akovaci 36:7426f37f0c96 98 humArray[0] = message->humVal;
akovaci 36:7426f37f0c96 99 pressArray[0]= message->pressVal;
akovaci 37:b62b3aa19645 100
akovaci 36:7426f37f0c96 101
akovaci 36:7426f37f0c96 102 // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]);
akovaci 36:7426f37f0c96 103
akovaci 36:7426f37f0c96 104 mail_box.free(message);
akovaci 36:7426f37f0c96 105 }
akovaci 36:7426f37f0c96 106 }
akovaci 36:7426f37f0c96 107 }
akovaci 37:b62b3aa19645 108
akovaci 37:b62b3aa19645 109 void threadcomun (void const *args)
akovaci 37:b62b3aa19645 110 {
Mpoumtsakalaka 39:f43b008adc9d 111 int res;
Mpoumtsakalaka 39:f43b008adc9d 112 int res2;
akovaci 37:b62b3aa19645 113 pc.baud(115200);
akovaci 37:b62b3aa19645 114 pc.printf("Temperature,Humidity,Pressure\n\n");
akovaci 38:8b6a6927b4f2 115 //while(cmd==NULL){cmd=getchar();}
Mpoumtsakalaka 39:f43b008adc9d 116 while(1)
Mpoumtsakalaka 39:f43b008adc9d 117 {
Mpoumtsakalaka 39:f43b008adc9d 118 scanf("%s%s",&cmd,&cmd2);
Mpoumtsakalaka 39:f43b008adc9d 119 //READ ALL------------------------------------------
akovaci 42:ac413d9fb994 120 //INPUT 2
akovaci 38:8b6a6927b4f2 121
akovaci 42:ac413d9fb994 122 strcpy (input1,cmd); //INPUT 1
akovaci 42:ac413d9fb994 123 pc.printf("you entered: %s\n\r ",input1);
akovaci 42:ac413d9fb994 124 strcpy (input2,cmd2);
akovaci 42:ac413d9fb994 125 strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1
akovaci 42:ac413d9fb994 126 strcpy (stringToCompare2,input2); //STRING TO COMPARE 2
akovaci 42:ac413d9fb994 127 res = strncmp(input1,stringToCompare1,20);
akovaci 42:ac413d9fb994 128 res2 = strncmp(input2,stringToCompare2,20);
akovaci 42:ac413d9fb994 129 int val = atoi(input2);
akovaci 42:ac413d9fb994 130 if (val <=10 && val >=1)
akovaci 42:ac413d9fb994 131 {
akovaci 42:ac413d9fb994 132 if (res==0 && res2==0)
akovaci 43:d7cb544ad771 133 {
akovaci 43:d7cb544ad771 134 for (unsigned int n=0; n<val; n++)
akovaci 43:d7cb544ad771 135 {
akovaci 43:d7cb544ad771 136 pc.printf("the element of %d is %4.2f\n\r ",n,tempArray[n]);
akovaci 43:d7cb544ad771 137 }
akovaci 42:ac413d9fb994 138 }
akovaci 42:ac413d9fb994 139 }
akovaci 43:d7cb544ad771 140 else
akovaci 43:d7cb544ad771 141 {
akovaci 43:d7cb544ad771 142 scanf("%s%s",&cmd,&cmd2);
akovaci 43:d7cb544ad771 143 strcpy (input1,cmd);
akovaci 43:d7cb544ad771 144 strcpy (input2,cmd2);
akovaci 43:d7cb544ad771 145
akovaci 43:d7cb544ad771 146 strcpy (stringToCompare1,"DELETE");
akovaci 43:d7cb544ad771 147 strcpy (stringToCompare2,input2);
akovaci 43:d7cb544ad771 148 res = strncmp(input1,stringToCompare1,20);
akovaci 43:d7cb544ad771 149 res2 = strncmp(input2,stringToCompare2,20);
akovaci 43:d7cb544ad771 150 int vals = atoi(input2);
akovaci 43:d7cb544ad771 151 int startDel=(counters - vals);
akovaci 43:d7cb544ad771 152 if(res==0 && res2==0)
akovaci 43:d7cb544ad771 153 {
akovaci 43:d7cb544ad771 154 for (unsigned int n=startDel; n<counters; n++)
akovaci 43:d7cb544ad771 155 {
akovaci 43:d7cb544ad771 156 tempArray[n]=0.00;
akovaci 43:d7cb544ad771 157 // pc.printf("%d number of Elements deleted\n",val);
akovaci 43:d7cb544ad771 158
akovaci 43:d7cb544ad771 159 }//END FOR LOOP
akovaci 43:d7cb544ad771 160
akovaci 43:d7cb544ad771 161 //counter = counter - numberOfElements;
akovaci 43:d7cb544ad771 162 pc.printf("number of Elements deleted");
akovaci 43:d7cb544ad771 163 }
akovaci 43:d7cb544ad771 164
akovaci 42:ac413d9fb994 165
akovaci 42:ac413d9fb994 166 else //1
akovaci 42:ac413d9fb994 167 {
akovaci 42:ac413d9fb994 168 strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1
akovaci 42:ac413d9fb994 169 strcpy (stringToCompare2,"ALL"); //STRING TO COMPARE 2
akovaci 42:ac413d9fb994 170 res = strncmp(input1,stringToCompare1,20);
akovaci 42:ac413d9fb994 171 res2 = strncmp(input2,stringToCompare2,20);
akovaci 42:ac413d9fb994 172
akovaci 42:ac413d9fb994 173 if (res==0 && res2==0)
akovaci 42:ac413d9fb994 174 {
akovaci 42:ac413d9fb994 175 for (unsigned int n=0; n<N; n++)
akovaci 42:ac413d9fb994 176 {
akovaci 42:ac413d9fb994 177 pc.printf("the element of %d is %4.2f\n\r ",n,tempArray[n]);
akovaci 43:d7cb544ad771 178
akovaci 42:ac413d9fb994 179 }
akovaci 43:d7cb544ad771 180 pc.printf("the Counter: %d\n",counters);
akovaci 42:ac413d9fb994 181 }
akovaci 42:ac413d9fb994 182 else //2
akovaci 42:ac413d9fb994 183 {
akovaci 42:ac413d9fb994 184 strcpy (stringToCompare1,"DELETE");
akovaci 42:ac413d9fb994 185 strcpy (stringToCompare2,"ALL");
akovaci 42:ac413d9fb994 186 res = strncmp(input1,stringToCompare1,20);
akovaci 42:ac413d9fb994 187 res2 = strncmp(input2,stringToCompare2,20);
Mpoumtsakalaka 39:f43b008adc9d 188
akovaci 42:ac413d9fb994 189 if(res==0 && res2==0)
akovaci 42:ac413d9fb994 190 {
akovaci 42:ac413d9fb994 191 //Delete every element.
akovaci 43:d7cb544ad771 192 memset(tempArray, 0, sizeof tempArray);
akovaci 43:d7cb544ad771 193 pc.printf("%d Elements deleted\n",N);
akovaci 43:d7cb544ad771 194 counters=0;
akovaci 42:ac413d9fb994 195 }
akovaci 43:d7cb544ad771 196
akovaci 43:d7cb544ad771 197
akovaci 43:d7cb544ad771 198 }
akovaci 43:d7cb544ad771 199
akovaci 42:ac413d9fb994 200 }//else 2
akovaci 42:ac413d9fb994 201 }//else1
akovaci 42:ac413d9fb994 202 }//while
akovaci 42:ac413d9fb994 203 }
akovaci 37:b62b3aa19645 204
akovaci 42:ac413d9fb994 205
akovaci 36:7426f37f0c96 206 char answer;
akovaci 36:7426f37f0c96 207 int main(void)
akovaci 36:7426f37f0c96 208 {
akovaci 36:7426f37f0c96 209
akovaci 36:7426f37f0c96 210 puts("Loading... \n\n");
akovaci 37:b62b3aa19645 211 t1 = new Thread(thread1);
akovaci 37:b62b3aa19645 212 t2 = new Thread(threadcomun);
akovaci 37:b62b3aa19645 213
akovaci 37:b62b3aa19645 214
akovaci 37:b62b3aa19645 215 // Thread thread(thread1);
akovaci 37:b62b3aa19645 216 //threadcomun();
akovaci 37:b62b3aa19645 217
akovaci 37:b62b3aa19645 218 //Thread thread(threadcomun);
akovaci 42:ac413d9fb994 219 t.attach(&adcISR,15); // timer of measurements
akovaci 36:7426f37f0c96 220
akovaci 36:7426f37f0c96 221 while(1)
noutram 35:af125862c33e 222 {
akovaci 36:7426f37f0c96 223 humidity.init();
akovaci 36:7426f37f0c96 224 humidity.calib();
akovaci 36:7426f37f0c96 225 humidity.ReadTempHumi(&tempCelsius, &humi);
akovaci 36:7426f37f0c96 226 barometer.get();
akovaci 36:7426f37f0c96 227 barometer.pressure();
akovaci 36:7426f37f0c96 228 barometer.temperature();
akovaci 36:7426f37f0c96 229 sleep();
akovaci 36:7426f37f0c96 230 Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds!
akovaci 36:7426f37f0c96 231 myled = 0; // LED is OFF
akovaci 36:7426f37f0c96 232 Thread::wait(100); // 100 ms
FairyMental 34:62aae7d507e2 233 }
akovaci 36:7426f37f0c96 234
noutram 35:af125862c33e 235 }
noutram 35:af125862c33e 236
noutram 35:af125862c33e 237
noutram 35:af125862c33e 238
akovaci 36:7426f37f0c96 239
noutram 35:af125862c33e 240
akovaci 36:7426f37f0c96 241
noutram 35:af125862c33e 242
akovaci 36:7426f37f0c96 243
akovaci 36:7426f37f0c96 244
akovaci 36:7426f37f0c96 245
akovaci 36:7426f37f0c96 246