Data logger program, using threads for individual components

Dependencies:   C12832 mbed-os LM75B

Committer:
saltire78
Date:
Sat Dec 05 16:40:22 2020 +0000
Revision:
0:5ee010a27b27
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saltire78 0:5ee010a27b27 1 #include "mbed.h" // mbed header
saltire78 0:5ee010a27b27 2 #include "LM75B.h" // temp sensor header
saltire78 0:5ee010a27b27 3 #include "C12832.h" // lcd screen header
saltire78 0:5ee010a27b27 4
saltire78 0:5ee010a27b27 5 C12832 lcd(p5, p7, p6, p8, p11); // define lcd
saltire78 0:5ee010a27b27 6 LM75B sensor(p28,p27); // define tem sensor
saltire78 0:5ee010a27b27 7 Serial pc(USBTX,USBRX); // define serial port
saltire78 0:5ee010a27b27 8 LocalFileSystem local("local"); // create local file system location
saltire78 0:5ee010a27b27 9
saltire78 0:5ee010a27b27 10 int seconds = 60; // define timespan variable
saltire78 0:5ee010a27b27 11 int i=0; // define iteration variable
saltire78 0:5ee010a27b27 12 float accum = 0.0; // define temporary accumulator float
saltire78 0:5ee010a27b27 13 int timeDelay = 5; // define sample time range
saltire78 0:5ee010a27b27 14
saltire78 0:5ee010a27b27 15 Thread thread1, thread2, thread3;
saltire78 0:5ee010a27b27 16
saltire78 0:5ee010a27b27 17 void LM758_ok()
saltire78 0:5ee010a27b27 18 {
saltire78 0:5ee010a27b27 19 while (1){
saltire78 0:5ee010a27b27 20 if (sensor.open()) { // test if temp sensor functioning (quickly eliminated if functional)
saltire78 0:5ee010a27b27 21 lcd.printf("Device detected!\n");
saltire78 0:5ee010a27b27 22 }
saltire78 0:5ee010a27b27 23 else { // if temp sensor not functioning throw an error
saltire78 0:5ee010a27b27 24 error("Device not detected!\n");
saltire78 0:5ee010a27b27 25 }
saltire78 0:5ee010a27b27 26
saltire78 0:5ee010a27b27 27 ThisThread::sleep_for(2000);
saltire78 0:5ee010a27b27 28
saltire78 0:5ee010a27b27 29 }
saltire78 0:5ee010a27b27 30 }
saltire78 0:5ee010a27b27 31
saltire78 0:5ee010a27b27 32 void display_data()
saltire78 0:5ee010a27b27 33 {
saltire78 0:5ee010a27b27 34 while(1){
saltire78 0:5ee010a27b27 35 lcd.cls(); // clear lcd screen
saltire78 0:5ee010a27b27 36 lcd.locate(0,0); // create lcd home location
saltire78 0:5ee010a27b27 37 lcd.printf("Temp = %.3f\n\r", (float)sensor.temp()); // print sensor reading to lcd
saltire78 0:5ee010a27b27 38 pc.printf("Temp = %.3f degrees C\n\r", (float)sensor.temp()); // print sensor reading to pc
saltire78 0:5ee010a27b27 39
saltire78 0:5ee010a27b27 40 float value = (float)sensor.temp(); // store sensor reading as usable variable
saltire78 0:5ee010a27b27 41 accum = accum + value; // begin accumulating sum of values detected
saltire78 0:5ee010a27b27 42 i = i+1;
saltire78 0:5ee010a27b27 43
saltire78 0:5ee010a27b27 44 ThisThread::sleep_for(5000);
saltire78 0:5ee010a27b27 45
saltire78 0:5ee010a27b27 46 }
saltire78 0:5ee010a27b27 47 }
saltire78 0:5ee010a27b27 48
saltire78 0:5ee010a27b27 49 void log_data()
saltire78 0:5ee010a27b27 50 {
saltire78 0:5ee010a27b27 51 // This logging component still doesn't work, same as lab4
saltire78 0:5ee010a27b27 52 while(1){
saltire78 0:5ee010a27b27 53 if (i==(seconds/timeDelay)) { // define max number of iterations allowed
saltire78 0:5ee010a27b27 54 float avgTemp = accum/i; // create an average value for the sensor readings
saltire78 0:5ee010a27b27 55 pc.printf("Average Temp for last %d seconds = %.3f degrees C\n\r", seconds, avgTemp); // print text of average temp reading to the pc
saltire78 0:5ee010a27b27 56
saltire78 0:5ee010a27b27 57 // attempt to record an average temperature over a defined period to local memory - in this case every minute.
saltire78 0:5ee010a27b27 58 lcd.printf("Data logging\n\r");
saltire78 0:5ee010a27b27 59 FILE *fp = fopen("/local/avgTemp.txt", "a"); // direct to txt file in local memory
saltire78 0:5ee010a27b27 60 fprintf(fp,"%.5f\n", avgTemp); // write average temp to local flash
saltire78 0:5ee010a27b27 61 fclose(fp); // close the file
saltire78 0:5ee010a27b27 62 ThisThread::sleep_for(6000);
saltire78 0:5ee010a27b27 63 //
saltire78 0:5ee010a27b27 64 }
saltire78 0:5ee010a27b27 65
saltire78 0:5ee010a27b27 66 }
saltire78 0:5ee010a27b27 67 }
saltire78 0:5ee010a27b27 68
saltire78 0:5ee010a27b27 69
saltire78 0:5ee010a27b27 70 int main() // start main program
saltire78 0:5ee010a27b27 71 {
saltire78 0:5ee010a27b27 72
saltire78 0:5ee010a27b27 73 while (1) { // constant loop
saltire78 0:5ee010a27b27 74 thread1.start(LM758_ok);
saltire78 0:5ee010a27b27 75 thread2.start(display_data);
saltire78 0:5ee010a27b27 76 // thread3.start(log_data);
saltire78 0:5ee010a27b27 77
saltire78 0:5ee010a27b27 78 // wait(timeDelay); // wait for desired time between readings
saltire78 0:5ee010a27b27 79 }
saltire78 0:5ee010a27b27 80 }