![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
v3 soft
Fork of SOFT253_Assignment_V3 by
main.cpp@43:d7cb544ad771, 2017-05-14 (annotated)
- Committer:
- akovaci
- Date:
- Sun May 14 13:18:58 2017 +0000
- Revision:
- 43:d7cb544ad771
- Parent:
- 42:ac413d9fb994
Delete
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]; |
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 |