Threads

Dependencies:   mbed C12832 LM75B

Committer:
ciaranom
Date:
Sat Dec 05 17:43:31 2020 +0000
Revision:
8:a27db43e9d85
Parent:
7:d20cc6a9060c
Threads

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:ce7a8546502b 1 #include "mbed.h"
chris 2:9e757151de9b 2 #include "LM75B.h"
ciaranom 7:d20cc6a9060c 3 #include <string>
ciaranom 7:d20cc6a9060c 4 #include <iostream>
ciaranom 7:d20cc6a9060c 5 #include <stdio.h>
ciaranom 7:d20cc6a9060c 6 #include <cstdlib>
chris 5:608f2bf4d3f7 7
ciaranom 8:a27db43e9d85 8
chris 4:6df97cb10041 9 LM75B sensor(p28,p27);
chris 4:6df97cb10041 10 Serial pc(USBTX,USBRX);
ciaranom 8:a27db43e9d85 11 //float TempV = 0; //making a float variable for the temperature value
ciaranom 8:a27db43e9d85 12 int cycles = 300;
okano 0:ce7a8546502b 13
ciaranom 7:d20cc6a9060c 14 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
ciaranom 8:a27db43e9d85 15 FILE* fp;
ciaranom 8:a27db43e9d85 16 int i = 0;
ciaranom 8:a27db43e9d85 17 int j = 0;
ciaranom 6:e883d7b9c790 18
ciaranom 8:a27db43e9d85 19 double num = 0;
ciaranom 8:a27db43e9d85 20 double total = 0;
ciaranom 8:a27db43e9d85 21 double maxtemp = -99.99;
ciaranom 8:a27db43e9d85 22 double mintemp = 99.99;
ciaranom 8:a27db43e9d85 23
ciaranom 8:a27db43e9d85 24 Thread WritingThread;
ciaranom 8:a27db43e9d85 25 Thread ReadingThread;
ciaranom 6:e883d7b9c790 26
ciaranom 8:a27db43e9d85 27 void Writing()
okano 0:ce7a8546502b 28 {
ciaranom 8:a27db43e9d85 29 fp = fopen("/local/temp3.csv", "a"); //Open the file for writing to
ciaranom 8:a27db43e9d85 30
ciaranom 8:a27db43e9d85 31 //TempV = (float)sensor; //Temperature is the sensor value
ciaranom 8:a27db43e9d85 32 if (sensor.open()) //Try to open the LM75B
ciaranom 8:a27db43e9d85 33 {
ciaranom 8:a27db43e9d85 34 printf("Device detected!\n\r");
ciaranom 8:a27db43e9d85 35 }
ciaranom 8:a27db43e9d85 36 else
ciaranom 8:a27db43e9d85 37 {
ciaranom 8:a27db43e9d85 38 error("Device not detected!\n");
ciaranom 8:a27db43e9d85 39 }//end if sensor open
ciaranom 8:a27db43e9d85 40
ciaranom 7:d20cc6a9060c 41 printf("Measuring temp... \n\r"); //Print confirmation of code running
ciaranom 7:d20cc6a9060c 42 while (i<cycles)
ciaranom 7:d20cc6a9060c 43 {
ciaranom 8:a27db43e9d85 44 printf("Test");
ciaranom 8:a27db43e9d85 45 //TempV
ciaranom 8:a27db43e9d85 46 fprintf(fp, "%.2f\n", (float)sensor.temp()); //print values to file
ciaranom 7:d20cc6a9060c 47
ciaranom 7:d20cc6a9060c 48 i = i+1; // counter
ciaranom 7:d20cc6a9060c 49 wait(1); //Wait 1 seconds to 1*300s = 5 minutes
ciaranom 7:d20cc6a9060c 50
ciaranom 8:a27db43e9d85 51 } end while loop for writing function
ciaranom 8:a27db43e9d85 52
ciaranom 7:d20cc6a9060c 53 fclose (fp);//close the file
ciaranom 8:a27db43e9d85 54
ciaranom 8:a27db43e9d85 55 j=1;
ciaranom 7:d20cc6a9060c 56 }
ciaranom 7:d20cc6a9060c 57
ciaranom 8:a27db43e9d85 58 void Reading()
ciaranom 7:d20cc6a9060c 59 {
ciaranom 8:a27db43e9d85 60 while (j!=1)
ciaranom 6:e883d7b9c790 61 {
ciaranom 8:a27db43e9d85 62 //wait for thread one
ciaranom 8:a27db43e9d85 63 }
ciaranom 7:d20cc6a9060c 64
ciaranom 7:d20cc6a9060c 65 fp = fopen("/local/temp3.csv", "r"); //Open rfile for reading
ciaranom 8:a27db43e9d85 66
ciaranom 8:a27db43e9d85 67 char temps[5]; //Create a string that will contain temerature values from file
ciaranom 8:a27db43e9d85 68 //min max total
ciaranom 7:d20cc6a9060c 69 while (fscanf(fp, "%s", temps)!= EOF) //scan to end of file
ciaranom 7:d20cc6a9060c 70 {
ciaranom 7:d20cc6a9060c 71 num = atof(temps); //string to number --> https://os.mbed.com/questions/7171/How-to-convert-String-to-Float-value/
ciaranom 7:d20cc6a9060c 72
ciaranom 7:d20cc6a9060c 73 if(num > maxtemp) //Calculating max number
ciaranom 7:d20cc6a9060c 74 {
ciaranom 7:d20cc6a9060c 75 maxtemp = num;
ciaranom 7:d20cc6a9060c 76 }
ciaranom 7:d20cc6a9060c 77
ciaranom 7:d20cc6a9060c 78 if(num < mintemp) //Calculating min number
ciaranom 7:d20cc6a9060c 79 {
ciaranom 7:d20cc6a9060c 80 mintemp = num;
ciaranom 7:d20cc6a9060c 81 }
ciaranom 7:d20cc6a9060c 82
ciaranom 7:d20cc6a9060c 83 total = total+ num;
ciaranom 7:d20cc6a9060c 84 //ThisThread::sleep_for(500);
ciaranom 7:d20cc6a9060c 85 //Set trigger to end thread
ciaranom 8:a27db43e9d85 86 }
ciaranom 8:a27db43e9d85 87 j=2;
ciaranom 7:d20cc6a9060c 88 }
ciaranom 7:d20cc6a9060c 89
ciaranom 7:d20cc6a9060c 90 int main () //Main function ***************************************************************************************
ciaranom 7:d20cc6a9060c 91 {
ciaranom 8:a27db43e9d85 92 WritingThread.start(Writing); //Start first thread
ciaranom 8:a27db43e9d85 93
ciaranom 8:a27db43e9d85 94 //ReadingThread.start(Reading); //Start second thread
ciaranom 8:a27db43e9d85 95 WritingThread.join();
ciaranom 8:a27db43e9d85 96 //while(j!=1)
ciaranom 8:a27db43e9d85 97 //{
ciaranom 8:a27db43e9d85 98
ciaranom 8:a27db43e9d85 99 //}
ciaranom 8:a27db43e9d85 100 printf("left Thread");
ciaranom 7:d20cc6a9060c 101
ciaranom 7:d20cc6a9060c 102
ciaranom 8:a27db43e9d85 103 double avg = total/(cycles);
ciaranom 8:a27db43e9d85 104
ciaranom 8:a27db43e9d85 105 printf("Average: %.2f \n\r", avg);
ciaranom 8:a27db43e9d85 106 printf("Max: %.2f \n\r", maxtemp);
ciaranom 8:a27db43e9d85 107 printf("Min: %.2f \n\r", mintemp);
ciaranom 8:a27db43e9d85 108
ciaranom 8:a27db43e9d85 109 fclose(fp); // close file
ciaranom 8:a27db43e9d85 110
ciaranom 8:a27db43e9d85 111 //j=j+1 // Controls daily cycle
ciaranom 7:d20cc6a9060c 112
chris 4:6df97cb10041 113
ciaranom 8:a27db43e9d85 114 } //end main