Data logger program, using threads for individual components
Dependencies: C12832 mbed-os LM75B
Revision 0:5ee010a27b27, committed 2020-12-05
- Comitter:
- saltire78
- Date:
- Sat Dec 05 16:40:22 2020 +0000
- Commit message:
- .
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C12832.lib Sat Dec 05 16:40:22 2020 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/chris/code/C12832/#7de323fa46fe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LM75B.lib Sat Dec 05 16:40:22 2020 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/neilt6/code/LM75B/#fc27dc535ea9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 05 16:40:22 2020 +0000 @@ -0,0 +1,80 @@ +#include "mbed.h" // mbed header +#include "LM75B.h" // temp sensor header +#include "C12832.h" // lcd screen header + +C12832 lcd(p5, p7, p6, p8, p11); // define lcd +LM75B sensor(p28,p27); // define tem sensor +Serial pc(USBTX,USBRX); // define serial port +LocalFileSystem local("local"); // create local file system location + +int seconds = 60; // define timespan variable +int i=0; // define iteration variable +float accum = 0.0; // define temporary accumulator float +int timeDelay = 5; // define sample time range + +Thread thread1, thread2, thread3; + +void LM758_ok() +{ + while (1){ + if (sensor.open()) { // test if temp sensor functioning (quickly eliminated if functional) + lcd.printf("Device detected!\n"); + } + else { // if temp sensor not functioning throw an error + error("Device not detected!\n"); + } + + ThisThread::sleep_for(2000); + + } +} + +void display_data() +{ + while(1){ + lcd.cls(); // clear lcd screen + lcd.locate(0,0); // create lcd home location + lcd.printf("Temp = %.3f\n\r", (float)sensor.temp()); // print sensor reading to lcd + pc.printf("Temp = %.3f degrees C\n\r", (float)sensor.temp()); // print sensor reading to pc + + float value = (float)sensor.temp(); // store sensor reading as usable variable + accum = accum + value; // begin accumulating sum of values detected + i = i+1; + + ThisThread::sleep_for(5000); + + } +} + +void log_data() +{ + // This logging component still doesn't work, same as lab4 + while(1){ + if (i==(seconds/timeDelay)) { // define max number of iterations allowed + float avgTemp = accum/i; // create an average value for the sensor readings + pc.printf("Average Temp for last %d seconds = %.3f degrees C\n\r", seconds, avgTemp); // print text of average temp reading to the pc + + // attempt to record an average temperature over a defined period to local memory - in this case every minute. + lcd.printf("Data logging\n\r"); + FILE *fp = fopen("/local/avgTemp.txt", "a"); // direct to txt file in local memory + fprintf(fp,"%.5f\n", avgTemp); // write average temp to local flash + fclose(fp); // close the file + ThisThread::sleep_for(6000); + // + } + + } +} + + +int main() // start main program +{ + + while (1) { // constant loop + thread1.start(LM758_ok); + thread2.start(display_data); +// thread3.start(log_data); + +// wait(timeDelay); // wait for desired time between readings + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Sat Dec 05 16:40:22 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/bLandais/code/mbed-os/#4c0e0edd4545