Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SOFT253_Assignment_V4 by
main.cpp@46:ca411482a095, 2017-05-15 (annotated)
- Committer:
- akovaci
- Date:
- Mon May 15 01:59:16 2017 +0000
- Revision:
- 46:ca411482a095
- Parent:
- 45:4ed55fd0f06f
- Child:
- 47:5f364311bc45
SOFT
Who changed what in which revision?
| User | Revision | Line number | New 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; |
| akovaci | 45:4ed55fd0f06f | 39 | int resSet1; |
| akovaci | 45:4ed55fd0f06f | 40 | int resSet2; |
| martinsimpson | 32:260a288be58f | 41 | |
| noutram | 35:af125862c33e | 42 | LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR); |
| noutram | 35:af125862c33e | 43 | HTS221 humidity(I2C_SDA, I2C_SCL); |
| noutram | 35:af125862c33e | 44 | |
| noutram | 35:af125862c33e | 45 | |
| akovaci | 36:7426f37f0c96 | 46 | void adcISR(); |
| akovaci | 37:b62b3aa19645 | 47 | void thread1 (void const *args ); |
| akovaci | 37:b62b3aa19645 | 48 | void threadcomun (void const *args); |
| akovaci | 37:b62b3aa19645 | 49 | |
| akovaci | 37:b62b3aa19645 | 50 | Thread* t1; |
| akovaci | 37:b62b3aa19645 | 51 | Thread* t2; |
| akovaci | 44:5bb7e0a2387a | 52 | Thread* t3; |
| akovaci | 44:5bb7e0a2387a | 53 | Thread* t4; |
| akovaci | 37:b62b3aa19645 | 54 | |
| akovaci | 36:7426f37f0c96 | 55 | |
| akovaci | 36:7426f37f0c96 | 56 | |
| akovaci | 36:7426f37f0c96 | 57 | typedef struct { |
| akovaci | 36:7426f37f0c96 | 58 | |
| akovaci | 36:7426f37f0c96 | 59 | float tempVal ; |
| akovaci | 36:7426f37f0c96 | 60 | float humVal; |
| akovaci | 36:7426f37f0c96 | 61 | float pressVal; |
| akovaci | 43:d7cb544ad771 | 62 | }message_t; |
| martinsimpson | 32:260a288be58f | 63 | |
| akovaci | 44:5bb7e0a2387a | 64 | Mail<message_t, 16> mail_box; |
| akovaci | 36:7426f37f0c96 | 65 | |
| akovaci | 36:7426f37f0c96 | 66 | void adcISR() |
| akovaci | 36:7426f37f0c96 | 67 | { |
| akovaci | 42:ac413d9fb994 | 68 | |
| akovaci | 36:7426f37f0c96 | 69 | message_t *message = mail_box.alloc(); |
| akovaci | 36:7426f37f0c96 | 70 | message->tempVal = tempCelsius; |
| akovaci | 36:7426f37f0c96 | 71 | message->humVal = humi; |
| akovaci | 36:7426f37f0c96 | 72 | message->pressVal = barometer.pressure(); |
| akovaci | 36:7426f37f0c96 | 73 | myled=1; |
| akovaci | 43:d7cb544ad771 | 74 | if (counters < 10) |
| akovaci | 43:d7cb544ad771 | 75 | { |
| akovaci | 43:d7cb544ad771 | 76 | counters= counters + 1; |
| akovaci | 43:d7cb544ad771 | 77 | } |
| akovaci | 43:d7cb544ad771 | 78 | else |
| akovaci | 43:d7cb544ad771 | 79 | { |
| akovaci | 44:5bb7e0a2387a | 80 | counters =10; |
| akovaci | 44:5bb7e0a2387a | 81 | } |
| akovaci | 43:d7cb544ad771 | 82 | |
| akovaci | 43:d7cb544ad771 | 83 | |
| akovaci | 43:d7cb544ad771 | 84 | |
| akovaci | 43:d7cb544ad771 | 85 | |
| akovaci | 36:7426f37f0c96 | 86 | mail_box.put(message); |
| akovaci | 36:7426f37f0c96 | 87 | //Thread::wait(1000); |
| akovaci | 36:7426f37f0c96 | 88 | |
| akovaci | 36:7426f37f0c96 | 89 | } |
| akovaci | 37:b62b3aa19645 | 90 | void thread1 (void const *args ) |
| akovaci | 36:7426f37f0c96 | 91 | { |
| akovaci | 36:7426f37f0c96 | 92 | |
| akovaci | 36:7426f37f0c96 | 93 | pc.baud(115200); |
| akovaci | 37:b62b3aa19645 | 94 | //pc.printf("Temperature,Humidity,Pressure\n\n"); |
| akovaci | 36:7426f37f0c96 | 95 | while(1) |
| akovaci | 36:7426f37f0c96 | 96 | { |
| akovaci | 38:8b6a6927b4f2 | 97 | |
| akovaci | 36:7426f37f0c96 | 98 | osEvent evt = mail_box.get(); |
| akovaci | 36:7426f37f0c96 | 99 | if (evt.status == osEventMail) |
| akovaci | 36:7426f37f0c96 | 100 | { |
| akovaci | 36:7426f37f0c96 | 101 | for (unsigned int n=(N-1); n>0; n--) |
| akovaci | 36:7426f37f0c96 | 102 | { |
| akovaci | 36:7426f37f0c96 | 103 | tempArray[n]= tempArray[n-1]; |
| akovaci | 36:7426f37f0c96 | 104 | humArray[n]= humArray[n-1]; |
| akovaci | 36:7426f37f0c96 | 105 | pressArray[n]= pressArray[n-1]; |
| akovaci | 36:7426f37f0c96 | 106 | } |
| akovaci | 36:7426f37f0c96 | 107 | message_t *message = (message_t*)evt.value.p; |
| akovaci | 36:7426f37f0c96 | 108 | tempArray[0]= message->tempVal; |
| akovaci | 36:7426f37f0c96 | 109 | humArray[0] = message->humVal; |
| akovaci | 36:7426f37f0c96 | 110 | pressArray[0]= message->pressVal; |
| akovaci | 37:b62b3aa19645 | 111 | |
| akovaci | 36:7426f37f0c96 | 112 | |
| akovaci | 36:7426f37f0c96 | 113 | // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]); |
| akovaci | 36:7426f37f0c96 | 114 | |
| akovaci | 36:7426f37f0c96 | 115 | mail_box.free(message); |
| akovaci | 36:7426f37f0c96 | 116 | } |
| akovaci | 36:7426f37f0c96 | 117 | } |
| akovaci | 36:7426f37f0c96 | 118 | } |
| akovaci | 37:b62b3aa19645 | 119 | |
| akovaci | 46:ca411482a095 | 120 | void threadComun (void const *args) |
| akovaci | 37:b62b3aa19645 | 121 | { |
| akovaci | 44:5bb7e0a2387a | 122 | |
| akovaci | 37:b62b3aa19645 | 123 | pc.baud(115200); |
| akovaci | 44:5bb7e0a2387a | 124 | pc.printf("Temperature,Humidity,Pressure\n"); |
| akovaci | 38:8b6a6927b4f2 | 125 | //while(cmd==NULL){cmd=getchar();} |
| Mpoumtsakalaka | 39:f43b008adc9d | 126 | while(1) |
| Mpoumtsakalaka | 39:f43b008adc9d | 127 | { |
| akovaci | 44:5bb7e0a2387a | 128 | scanf("%s%s",cmd,cmd2); |
| akovaci | 46:ca411482a095 | 129 | strcpy (input1,cmd); //INPUT 1 |
| akovaci | 46:ca411482a095 | 130 | pc.printf("you entered: %s\n\r",input1); |
| akovaci | 46:ca411482a095 | 131 | strcpy (input2,cmd2); |
| akovaci | 46:ca411482a095 | 132 | strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1 |
| akovaci | 46:ca411482a095 | 133 | strcpy (stringToCompare2,input2); //STRING TO COMPARE 2 |
| akovaci | 46:ca411482a095 | 134 | res = strncmp(input1,stringToCompare1,20); |
| akovaci | 46:ca411482a095 | 135 | res2 = strncmp(input2,stringToCompare2,20); |
| akovaci | 46:ca411482a095 | 136 | int val = atoi(input2); |
| akovaci | 46:ca411482a095 | 137 | if (val <=10 && val >=1) |
| akovaci | 46:ca411482a095 | 138 | { |
| akovaci | 46:ca411482a095 | 139 | if (res==0 && res2==0) |
| akovaci | 46:ca411482a095 | 140 | { |
| akovaci | 46:ca411482a095 | 141 | for (unsigned int n=0; n<val; n++) |
| akovaci | 46:ca411482a095 | 142 | { |
| akovaci | 46:ca411482a095 | 143 | pc.printf("the element of %d is %4.2f\n\r",n,tempArray[n]); |
| akovaci | 46:ca411482a095 | 144 | } |
| akovaci | 46:ca411482a095 | 145 | } |
| akovaci | 46:ca411482a095 | 146 | } |
| akovaci | 46:ca411482a095 | 147 | else //1 |
| akovaci | 46:ca411482a095 | 148 | { |
| akovaci | 46:ca411482a095 | 149 | strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1 |
| akovaci | 46:ca411482a095 | 150 | strcpy (stringToCompare2,"ALL"); //STRING TO COMPARE 2 |
| akovaci | 46:ca411482a095 | 151 | res = strncmp(input1,stringToCompare1,20); |
| akovaci | 46:ca411482a095 | 152 | res2 = strncmp(input2,stringToCompare2,20); |
| akovaci | 46:ca411482a095 | 153 | if (res==0 && res2==0) |
| akovaci | 42:ac413d9fb994 | 154 | { |
| akovaci | 46:ca411482a095 | 155 | for (unsigned int n=0; n<N; n++) |
| akovaci | 46:ca411482a095 | 156 | { |
| akovaci | 46:ca411482a095 | 157 | pc.printf("the element of %d is %4.2f\n\r",n,tempArray[n]); |
| akovaci | 42:ac413d9fb994 | 158 | } |
| akovaci | 46:ca411482a095 | 159 | |
| akovaci | 46:ca411482a095 | 160 | } |
| akovaci | 46:ca411482a095 | 161 | else //2 |
| akovaci | 46:ca411482a095 | 162 | { |
| akovaci | 46:ca411482a095 | 163 | strcpy (stringToCompare1,"DELETE"); |
| akovaci | 46:ca411482a095 | 164 | strcpy (stringToCompare2,"ALL"); |
| akovaci | 46:ca411482a095 | 165 | res = strncmp(input1,stringToCompare1,20); |
| akovaci | 46:ca411482a095 | 166 | res2 = strncmp(input2,stringToCompare2,20); |
| akovaci | 46:ca411482a095 | 167 | if(res==0 && res2==0) |
| akovaci | 46:ca411482a095 | 168 | { |
| akovaci | 46:ca411482a095 | 169 | //Delete every element. |
| akovaci | 46:ca411482a095 | 170 | memset(tempArray, 0, sizeof tempArray); |
| akovaci | 46:ca411482a095 | 171 | pc.printf("%d Elements deleted\n",N); |
| akovaci | 46:ca411482a095 | 172 | counters=0; |
| akovaci | 46:ca411482a095 | 173 | } |
| akovaci | 45:4ed55fd0f06f | 174 | |
| akovaci | 46:ca411482a095 | 175 | }//1 |
| akovaci | 44:5bb7e0a2387a | 176 | |
| akovaci | 44:5bb7e0a2387a | 177 | |
| akovaci | 46:ca411482a095 | 178 | } //1 |
| akovaci | 46:ca411482a095 | 179 | strcpy (inputSet1,cmd); |
| akovaci | 46:ca411482a095 | 180 | strcpy (inputSet2,cmd2); |
| akovaci | 46:ca411482a095 | 181 | strcpy (stringToCompareSet1,"DELETE"); //STRING TO COMPARE 1 |
| akovaci | 46:ca411482a095 | 182 | strcpy (stringToCompareSet2,inputSet2); |
| akovaci | 46:ca411482a095 | 183 | resSet1 = strncmp(input1,stringToCompareSet1,20); |
| akovaci | 46:ca411482a095 | 184 | resSet2 = strncmp(input2,stringToCompareSet2,20); |
| akovaci | 46:ca411482a095 | 185 | int valDel = atoi(inputSet2); |
| akovaci | 46:ca411482a095 | 186 | int startDel=(counters - valDel); |
| akovaci | 46:ca411482a095 | 187 | if (valDel <=10 && valDel >=1) |
| akovaci | 46:ca411482a095 | 188 | { |
| akovaci | 46:ca411482a095 | 189 | if(resSet1==0 && resSet2==0) |
| akovaci | 46:ca411482a095 | 190 | { |
| akovaci | 46:ca411482a095 | 191 | for (unsigned int n=startDel; n<counters; n++) |
| akovaci | 46:ca411482a095 | 192 | { |
| akovaci | 46:ca411482a095 | 193 | tempArray[n]=0.00; |
| akovaci | 46:ca411482a095 | 194 | } |
| akovaci | 46:ca411482a095 | 195 | pc.printf("Deleted %d records\n",valDel); |
| akovaci | 46:ca411482a095 | 196 | counters = counters - valDel; |
| akovaci | 46:ca411482a095 | 197 | } |
| akovaci | 46:ca411482a095 | 198 | } |
| akovaci | 44:5bb7e0a2387a | 199 | |
| akovaci | 42:ac413d9fb994 | 200 | }//while |
| akovaci | 42:ac413d9fb994 | 201 | } |
| akovaci | 37:b62b3aa19645 | 202 | |
| akovaci | 42:ac413d9fb994 | 203 | |
| akovaci | 36:7426f37f0c96 | 204 | char answer; |
| akovaci | 46:ca411482a095 | 205 | |
| akovaci | 44:5bb7e0a2387a | 206 | void threadSetTComun (void const *args) |
| akovaci | 44:5bb7e0a2387a | 207 | { |
| akovaci | 44:5bb7e0a2387a | 208 | |
| akovaci | 44:5bb7e0a2387a | 209 | pc.baud(115200); |
| akovaci | 44:5bb7e0a2387a | 210 | |
| akovaci | 44:5bb7e0a2387a | 211 | //while(cmd==NULL){cmd=getchar();} |
| akovaci | 44:5bb7e0a2387a | 212 | while(1) |
| akovaci | 44:5bb7e0a2387a | 213 | { |
| akovaci | 44:5bb7e0a2387a | 214 | scanf("%s%s",cmdSet,cmdSet2); |
| akovaci | 44:5bb7e0a2387a | 215 | //READ ALL------------------------------------------ |
| akovaci | 44:5bb7e0a2387a | 216 | //INPUT 2 |
| akovaci | 44:5bb7e0a2387a | 217 | |
| akovaci | 44:5bb7e0a2387a | 218 | strcpy (inputSet1,cmdSet); //INPUT 1 |
| akovaci | 44:5bb7e0a2387a | 219 | pc.printf("you entered: %s\n\r",inputSet1); |
| akovaci | 44:5bb7e0a2387a | 220 | strcpy (inputSet2,cmdSet2); |
| akovaci | 44:5bb7e0a2387a | 221 | strcpy (stringToCompareSet1,"SETT"); //STRING TO COMPARE 1 |
| akovaci | 44:5bb7e0a2387a | 222 | strcpy (stringToCompareSet2,inputSet2); //STRING TO COMPARE 2 |
| akovaci | 45:4ed55fd0f06f | 223 | resSet1 = strncmp(inputSet1,stringToCompareSet1,20); |
| akovaci | 45:4ed55fd0f06f | 224 | resSet2 = strncmp(inputSet2,stringToCompareSet2,20); |
| akovaci | 44:5bb7e0a2387a | 225 | int inputSpeed = atoi(inputSet2); |
| akovaci | 44:5bb7e0a2387a | 226 | |
| akovaci | 44:5bb7e0a2387a | 227 | |
| akovaci | 44:5bb7e0a2387a | 228 | if (inputSpeed <=60 && inputSpeed >=0.1) |
| akovaci | 44:5bb7e0a2387a | 229 | { |
| akovaci | 45:4ed55fd0f06f | 230 | if (resSet1==0 && resSet2==0) |
| akovaci | 44:5bb7e0a2387a | 231 | { |
| akovaci | 44:5bb7e0a2387a | 232 | pc.printf("CURRENT SPEED %d \n",inputSpeed); |
| akovaci | 44:5bb7e0a2387a | 233 | sampleSpeed = inputSpeed; |
| akovaci | 44:5bb7e0a2387a | 234 | pc.printf("T UPDATED TO %d %d\n",sampleSpeed,inputSpeed); |
| akovaci | 44:5bb7e0a2387a | 235 | |
| akovaci | 44:5bb7e0a2387a | 236 | |
| akovaci | 44:5bb7e0a2387a | 237 | } |
| akovaci | 44:5bb7e0a2387a | 238 | } |
| akovaci | 44:5bb7e0a2387a | 239 | } |
| akovaci | 44:5bb7e0a2387a | 240 | |
| akovaci | 44:5bb7e0a2387a | 241 | } |
| akovaci | 44:5bb7e0a2387a | 242 | |
| akovaci | 44:5bb7e0a2387a | 243 | |
| akovaci | 36:7426f37f0c96 | 244 | int main(void) |
| akovaci | 36:7426f37f0c96 | 245 | { |
| akovaci | 36:7426f37f0c96 | 246 | |
| akovaci | 36:7426f37f0c96 | 247 | puts("Loading... \n\n"); |
| akovaci | 44:5bb7e0a2387a | 248 | |
| akovaci | 37:b62b3aa19645 | 249 | t1 = new Thread(thread1); |
| akovaci | 46:ca411482a095 | 250 | t2 = new Thread(threadComun); |
| akovaci | 45:4ed55fd0f06f | 251 | // t3 = new Thread( threadDeleteComun); |
| akovaci | 45:4ed55fd0f06f | 252 | //t4 = new Thread( threadSetTComun); |
| akovaci | 37:b62b3aa19645 | 253 | |
| akovaci | 45:4ed55fd0f06f | 254 | // Thread (thread1); |
| akovaci | 37:b62b3aa19645 | 255 | //threadcomun(); |
| akovaci | 37:b62b3aa19645 | 256 | |
| akovaci | 37:b62b3aa19645 | 257 | //Thread thread(threadcomun); |
| akovaci | 44:5bb7e0a2387a | 258 | t.attach(&adcISR,sampleSpeed); // timer of measurements |
| akovaci | 36:7426f37f0c96 | 259 | |
| akovaci | 36:7426f37f0c96 | 260 | while(1) |
| noutram | 35:af125862c33e | 261 | { |
| akovaci | 36:7426f37f0c96 | 262 | humidity.init(); |
| akovaci | 36:7426f37f0c96 | 263 | humidity.calib(); |
| akovaci | 36:7426f37f0c96 | 264 | humidity.ReadTempHumi(&tempCelsius, &humi); |
| akovaci | 36:7426f37f0c96 | 265 | barometer.get(); |
| akovaci | 36:7426f37f0c96 | 266 | barometer.pressure(); |
| akovaci | 36:7426f37f0c96 | 267 | barometer.temperature(); |
| akovaci | 36:7426f37f0c96 | 268 | sleep(); |
| akovaci | 36:7426f37f0c96 | 269 | Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds! |
| akovaci | 36:7426f37f0c96 | 270 | myled = 0; // LED is OFF |
| akovaci | 36:7426f37f0c96 | 271 | Thread::wait(100); // 100 ms |
| FairyMental | 34:62aae7d507e2 | 272 | } |
| akovaci | 36:7426f37f0c96 | 273 | |
| noutram | 35:af125862c33e | 274 | } |
| noutram | 35:af125862c33e | 275 | |
| noutram | 35:af125862c33e | 276 | |
| noutram | 35:af125862c33e | 277 | |
| akovaci | 36:7426f37f0c96 | 278 | |
| noutram | 35:af125862c33e | 279 | |
| akovaci | 36:7426f37f0c96 | 280 | |
| noutram | 35:af125862c33e | 281 | |
| akovaci | 36:7426f37f0c96 | 282 | |
| akovaci | 36:7426f37f0c96 | 283 | |
| akovaci | 36:7426f37f0c96 | 284 | |
| akovaci | 36:7426f37f0c96 | 285 |
