![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
v3 soft
Fork of SOFT253_Assignment_V3 by
main.cpp
- Committer:
- akovaci
- Date:
- 2017-05-14
- Revision:
- 42:ac413d9fb994
- Parent:
- 41:0f4a18bb1f83
- Child:
- 43:d7cb544ad771
File content as of revision 42:ac413d9fb994:
#include "mbed.h" #include "rtos.h" #include "hts221.h" #include "LPS25H.h" Serial pc(USBTX, USBRX); #define N 10 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 input1[20]; char input2[20]; char stringToCompare1[20]; char stringToCompare2[20]; float tempArray[N]; float humArray[N]; float pressArray[N]; uint32_t seconds = 0, minutes=0, hours=0; 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, 10> mail_box; void adcISR() { message_t *message = mail_box.alloc(); message->tempVal = tempCelsius; message->humVal = humi; message->pressVal = barometer.pressure(); myled=1; mail_box.put(message); //Thread::wait(1000); } void thread1 (void const *args ) { pc.baud(115200); //pc.printf("Temperature,Humidity,Pressure\n\n"); 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; // pc.printf("%4.2f,%3.1f,%6.1f\n\r", tempArray[N/2], humArray[N/2], pressArray[N/2]); mail_box.free(message); } } } void threadcomun (void const *args) { int res; int res2; pc.baud(115200); pc.printf("Temperature,Humidity,Pressure\n\n"); //while(cmd==NULL){cmd=getchar();} while(1) { scanf("%s%s",&cmd,&cmd2); //READ ALL------------------------------------------ //INPUT 2 strcpy (input1,cmd); //INPUT 1 pc.printf("you entered: %s\n\r ",input1); strcpy (input2,cmd2); strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1 strcpy (stringToCompare2,input2); //STRING TO COMPARE 2 res = strncmp(input1,stringToCompare1,20); res2 = strncmp(input2,stringToCompare2,20); int val = atoi(input2); if (val <=10 && val >=1) { if (res==0 && res2==0) { pc.printf("the element of %d is %4.2f\n\r ",val,tempArray[val]); } } else //1 { strcpy (stringToCompare1,"READ"); //STRING TO COMPARE 1 strcpy (stringToCompare2,"ALL"); //STRING TO COMPARE 2 res = strncmp(input1,stringToCompare1,20); res2 = strncmp(input2,stringToCompare2,20); if (res==0 && res2==0) { for (unsigned int n=0; n<N; n++) { pc.printf("the element of %d is %4.2f\n\r ",n,tempArray[n]); } } else //2 { strcpy (stringToCompare1,"DELETE"); strcpy (stringToCompare2,"ALL"); res = strncmp(input1,stringToCompare1,20); res2 = strncmp(input2,stringToCompare2,20); if(res==0 && res2==0) { //Delete every element. memset(tempArray, 0, sizeof tempArray); pc.printf("%d Elements deleted\n",N); } }//else 2 }//else1 }//while } char answer; int main(void) { puts("Loading... \n\n"); t1 = new Thread(thread1); t2 = new Thread(threadcomun); // Thread thread(thread1); //threadcomun(); //Thread thread(threadcomun); t.attach(&adcISR,15); // 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 } }