lucas kovaci
/
SOFT253_Assignment_Group_K
SOFT253 ASSIGNMENT
Fork of SOFT253_Assignment_V4 by
main.cpp
- Committer:
- shikong
- Date:
- 2017-05-15
- Revision:
- 50:6f0b82711082
- Parent:
- 49:0dfef3825422
- Child:
- 51:dd88bae2a7e5
File content as of revision 50:6f0b82711082:
#include "mbed.h" #include "rtos.h" #include "hts221.h" #include "LPS25H.h" #include "time.h" #include "stdio.h" #include "stdlib.h" Serial pc(USBTX, USBRX); #define N 120 DigitalOut myled(D7); Ticker t; I2C i2c2(I2C_SDA, I2C_SCL); float tempCelsius = 25.50; float humi = 55; int humiMax = 100; char cmd[20]; char cmd2[20]; char cmdSet[20]; char cmdSet2[20]; char input1[20]; char input2[20]; char inputSet1[20]; char inputSet2[20]; char inputDel1[20]; char inputDel2[20]; char inputState1[20]; char inputState2[20]; char inputStateOFF1[20]; char inputStateOFF2[20]; float tempArray[N]; float humArray[N]; float pressArray[N]; int sampleSpeed = 15; uint32_t seconds = 0, minutes=0, hours=0; int counters = 0; int res; int res2; int resSet1; int resSet2; int resState1; int resState2; LPS25H barometer(i2c2, LPS25H_V_CHIP_ADDR); HTS221 humidity(I2C_SDA, I2C_SCL); void adcISR(); void thread1 (void const *args ); void threadcomun (void const *args); Thread* t1; Thread* t2; typedef struct { float tempVal ; float humVal; float pressVal; }message_t; Mail<message_t, 16> mail_box; void adcISR() { message_t *message = mail_box.alloc(); message->tempVal = tempCelsius; message->humVal = humi; message->pressVal = barometer.pressure(); myled=1; if (counters < 10) { counters= counters + 1; }else { counters =10; } mail_box.put(message); } void thread1 (void const *args ) { pc.baud(115200); while(1) { osEvent evt = mail_box.get(); if (evt.status == osEventMail) { for (unsigned int n=(N-1); n>0; n--) { tempArray[n]= tempArray[n-1]; humArray[n]= humArray[n-1]; pressArray[n]= pressArray[n-1]; } message_t *message = (message_t*)evt.value.p; tempArray[0]= message->tempVal; humArray[0] = message->humVal; pressArray[0]= message->pressVal; mail_box.free(message); } } } void threadComun (void const *args) { pc.baud(115200); pc.printf("Temperature,Humidity,Pressure\n"); while(1) { scanf("%s%s",cmd,cmd2); strcpy (input1,cmd); //INPUT 1 pc.printf("you entered: %s\n\r",input1); strcpy (input2,cmd2); res = strncmp(input1,"READ",20); res2 = strncmp(input2,input2,20); int val = atoi(input2); //Convert String to int if(val <=10 && val >=1) { if(res==0 && res2==0) { for (unsigned int n=0; n<val; n++) { pc.printf("Sample %d : %4.2f, %6.1f ,%3.1f\n\r",n,tempArray[n],pressArray[n],humArray[n]); } }else{ pc.printf("Invalid INPUT. \n"); } }else //1 { res = strncmp(input1,"READ",20); res2 = strncmp(input2,"ALL",20); if (res==0 && res2==0) { for (unsigned int n=0; n<N; n++) { pc.printf("Sample %d : %4.2f, %6.1f ,%3.1f\n\r",n,tempArray[n],pressArray[n],humArray[n]); } } else //2 { res = strncmp(input1,"DELETE",20); res2 = strncmp(input2,"ALL",20); if(res==0 && res2==0) { //Delete every element. memset(tempArray, 0, sizeof tempArray); memset(humArray, 0, sizeof humArray); memset(pressArray, 0, sizeof pressArray); pc.printf("%d Elements deleted\n",N); counters=0; }else{ pc.printf("Invalid INPUT. \n"); } }//1 } //1 strcpy (inputDel1,cmd); strcpy (inputDel2,cmd2); resSet1 = strncmp(input1,"DELETE",20); resSet2 = strncmp(input2,inputDel2,20); int valDel = atoi(inputDel2); int startDel=(counters - valDel); if (valDel <=10 && valDel >=1) { if(resSet1==0 && resSet2==0) { for (unsigned int n=startDel; n<counters; n++) { tempArray[n]=0.00; humArray[n]=0.00; pressArray[n]=0.00; } pc.printf("Deleted %d records\n",valDel); counters = counters - valDel; }else{ pc.printf("Invalid INPUT. \n"); } } strcpy (inputSet1,cmd); //INPUT 1 strcpy (inputSet2,cmd2); resSet1 = strncmp(inputSet1,"SETT",20); resSet2 = strncmp(inputSet2,inputSet2,20); int inputSpeed = atoi(inputSet2); if (inputSpeed <=60 && inputSpeed >=0.1) { if (resSet1==0 && resSet2==0) { sampleSpeed = inputSpeed; t.attach(&adcISR, sampleSpeed); pc.printf("T UPDATED TO %d\n",sampleSpeed); }else{ pc.printf("Invalid INPUT. \n"); } } strcpy (inputState1,cmd); //INPUT 1 strcpy (inputState2,cmd2); resSet1 = strncmp(inputState1,"STATE",20); resSet2 = strncmp(inputState2,"ON",20); if (resSet1==0 && resSet2==0) { //t.detach(); // LPC_TIM3->TC = 0; t.attach(&adcISR, sampleSpeed); pc.printf("Sampling: ON\n"); } strcpy (inputStateOFF1,cmd); //INPUT 1 strcpy (inputStateOFF2,cmd2); resState1 = strncmp(inputStateOFF1,"STATE",20); resState2 = strncmp(inputStateOFF2,"OFF",20); if (resState1==0 && resState2==0) { t.detach(); // LPC_TIM3->TC = 0; // t.attach(&adcISR, 2.0); pc.printf("Sampling: OFF\n"); } }//while } char answer; int main(void) { puts("Loading... \n\n"); t1 = new Thread(thread1); t2 = new Thread(threadComun); t.attach(&adcISR,sampleSpeed); // timer of measurements while(1) { humidity.init(); humidity.calib(); humidity.ReadTempHumi(&tempCelsius, &humi); barometer.get(); barometer.pressure(); barometer.temperature(); sleep(); Thread::wait(200); // 200 ms NB 'Thread::wait(int d);' !!! d is in milliseconds! myled = 0; // LED is OFF Thread::wait(100); // 100 ms } }