Threads

Dependencies:   mbed C12832 LM75B

main.cpp

Committer:
ciaranom
Date:
2020-12-05
Revision:
8:a27db43e9d85
Parent:
7:d20cc6a9060c

File content as of revision 8:a27db43e9d85:

#include "mbed.h"
#include "LM75B.h"
#include <string>
#include <iostream>
#include <stdio.h>
#include <cstdlib>


LM75B sensor(p28,p27);
Serial pc(USBTX,USBRX);
//float TempV = 0; //making a float variable for the temperature value 
int cycles = 300;

LocalFileSystem local("local"); // Create the local filesystem under the name "local"
FILE* fp;
int i = 0;
int j = 0;

double num = 0;
double total = 0;
double maxtemp = -99.99;
double mintemp = 99.99;

Thread WritingThread;
Thread ReadingThread;

void Writing()
{
    fp = fopen("/local/temp3.csv", "a"); //Open the file for writing to  
 
    //TempV = (float)sensor; //Temperature is the sensor value    
    if (sensor.open()) //Try to open the LM75B
    {
        printf("Device detected!\n\r");        
    }    
    else 
    {
        error("Device not detected!\n");
    }//end if sensor open

    printf("Measuring temp... \n\r"); //Print confirmation of code running      
    while (i<cycles)
    {
        printf("Test");
                                //TempV
        fprintf(fp, "%.2f\n", (float)sensor.temp()); //print values to file 

        i = i+1; // counter
        wait(1); //Wait 1 seconds to 1*300s = 5 minutes         
            
    } end while loop for writing function
    
    fclose (fp);//close the file 

    j=1;  
}

void Reading()
{
    while (j!=1)
    {
        //wait for thread one
    }
    
    fp = fopen("/local/temp3.csv", "r"); //Open rfile for reading 
 
    char temps[5]; //Create a string that will contain temerature values from file          
    //min max total            
        while (fscanf(fp, "%s", temps)!= EOF) //scan to end of file
        {          
            num = atof(temps); //string to number --> https://os.mbed.com/questions/7171/How-to-convert-String-to-Float-value/
            
            if(num > maxtemp) //Calculating max number
            {
                maxtemp = num;
            }
            
            if(num < mintemp) //Calculating min number
            {
                mintemp = num; 
            }
                
            total = total+ num;
            //ThisThread::sleep_for(500);
            //Set trigger to end thread
        }  
        j=2;
}

int main () //Main function ***************************************************************************************
{
    WritingThread.start(Writing); //Start first thread
    
    //ReadingThread.start(Reading); //Start second thread 
    WritingThread.join();
    //while(j!=1)
    //{
        
    //}
    printf("left Thread");
    
    
    double avg = total/(cycles);
        
    printf("Average: %.2f \n\r", avg);
    printf("Max: %.2f \n\r", maxtemp);
    printf("Min: %.2f \n\r", mintemp);
        
    fclose(fp); // close file
    
    //j=j+1 // Controls daily cycle 


}   //end main