Working better. Maybe a little more improvement needs to be made to the display algorithm.
Dependencies: 4DGL-uLCD-SE MAX31855 mbed-rtos mbed
Fork of Coffee_Roaster_testing by
Diff: main.cpp
- Revision:
- 8:1db15ab871a4
- Parent:
- 7:8a0223a951c1
- Child:
- 9:d7300899fd85
diff -r 8a0223a951c1 -r 1db15ab871a4 main.cpp --- a/main.cpp Thu Nov 20 04:01:51 2014 +0000 +++ b/main.cpp Thu Nov 20 20:30:51 2014 +0000 @@ -4,6 +4,7 @@ #include "stdio.h" #include "max31855.h" #include <mpr121.h> +#include "Stopwatch.h" DigitalOut led1(LED1); DigitalOut led2(LED2); @@ -24,9 +25,17 @@ int settemp = 85; // initial temperature set float ftemperature = 0; // float variable for temperature float ctemperature = 0; // float variable for temperature -int temptemp=0; +int temptemp=85; + +int key_code=-1; +int a =0; +int place= 100; -int key_code=0; +int s = 00; +int m = 00; +int h = 00; + +Stopwatch watch = Stopwatch(); // Create the interrupt receiver object on pin 26 InterruptIn interrupt(p26); @@ -41,30 +50,7 @@ // Thread 1: print the elapsed time on line 1 of the uLCD (i.e., HH:MM:SS) void elapsedtime(void const *args) //elapsed timer for when program starts { - int s = 00; //seconds - int m = 00; //minutes - int h = 00; //hours - - while(true) { - s++; - if(s>59) { - s=00; - m++; - } - if(m>59) { - m=00; - h++; - } - four_slots.wait(); // lock screen resource - //lcd_mutex.lock(); - uLCD.color(0xFFFF00); //set text color - uLCD.locate(0,0); //col,row location of text - wait(0.1); - uLCD.printf("Time | %2d:%2d:%2d", h,m,s); // display time - //lcd_mutex.unlock(); - four_slots.release(); //unlock screen resource - Thread::wait(1000); // update once per secon - } + watch.start(); } @@ -75,14 +61,29 @@ if (max1.ready()==1) { ctemperature = max1.read_temp(); //Get the reading ftemperature = (ctemperature)*(9.0/5.0)+32.0; - four_slots.wait(); - uLCD.color(0xFFFF00); - //uLCD.locate(0,2); //col,row - //wait(0.1); - // uLCD.printf("Current Temp. F"); - uLCD.locate(11,6); //col,row - uLCD.printf("%4.2f", ftemperature); - four_slots.release(); + } + } +} + + +// Thread 3: reset temp +void thermoset(void const *args) //line 2 +{ + while(true) { + if(up == 1) { + a = 0; + temptemp=0; + while(a<3) { + if(key_code>=0 && key_code<=9) { + wait(.1); + if(a==0)temptemp=key_code*100; + if(a==1)temptemp+=key_code*10; + if(a==2)temptemp+=key_code*1; + a++; + key_code = -1; + } + } + settemp=temptemp; } } } @@ -102,15 +103,13 @@ if(key_code== 10) { motor = 0; - - } if(key_code== 11) { motor = 1; } } -int a =0; + int main() { max1.initialise(); //initialize thermocouple IC @@ -121,82 +120,60 @@ Thread t1(elapsedtime); //run elapsed time counter Thread t2(thermoread); //read and display temperature from thermocouple + Thread t3(thermoset); // user set temperature while(1) { //hystersis program - key_code = 0; + char* time = watch.getTime(); + four_slots.wait(); //lock screen + uLCD.color(0xFFFF00); //set color - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(0,5); //col,row - uLCD.printf("Set | "); - uLCD.locate(0,6); //col,row - uLCD.printf("Current | "); - uLCD.locate(0,2); //col,row - uLCD.printf("Motor | "); - four_slots.release(); + uLCD.locate(0,0); //col,row for time + uLCD.printf("Time | %s",time);//%2d:%2d:%2d", h,m,s); // display time - int place= 100; + uLCD.locate(0,5); + uLCD.printf("Set | %3d",settemp); // current set temperature - if(motor==0) { - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(11,2); //col,row - uLCD.printf("OFF"); - four_slots.release(); - } - if(motor==1) { - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(11,2); //col,row - uLCD.printf("ON "); - four_slots.release(); + uLCD.locate(0,6); + uLCD.printf("Current | %4.2f", ftemperature); // temperature reading + + uLCD.locate(0,2); + uLCD.printf("Motor | "); //motor state in "on" or "off" state + + uLCD.locate(0,13); + uLCD.printf("New Temp| %3d",temptemp); //new user temperature + + /*if(a==0){ + uLCD.locate(11,13); + uLCD.printf("%d",temptemp); //new user temperature } - if(up == 1) { - wait(.5); - a = 0; - temptemp=0; - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(0,14); //col,row - uLCD.printf("%3d",temptemp); - four_slots.release(); + if(a==1){ + uLCD.locate(11,13); + uLCD.printf("%d",temptemp); //new user temperature + } + + if(a==2){ + uLCD.locate(11,13); + uLCD.printf("%d",temptemp); //new user temperature + }*/ - while(a<3) { - if(key_code>=0 && key_code<=9) { - wait(1); - temptemp+=place*key_code; - place=place/10; - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(0,13); //col,row - uLCD.printf("intermediate value"); - uLCD.locate(0,14); //col,row - uLCD.printf("%3d",temptemp); - four_slots.release(); - a++; - key_code = -1; - //wait(2); - } - } + if(motor==0) { + uLCD.locate(11,2); //col,row + uLCD.printf("OFF"); } - settemp=temptemp; - four_slots.wait(); - uLCD.color(0xFFFF00); - uLCD.locate(11,5); //col,row - uLCD.printf("%3d",settemp); - four_slots.release(); - //wait(2); + if(motor==1) { + uLCD.locate(11,2); //col,row + uLCD.printf("ON "); + } - + four_slots.release(); // release screen resource if(ftemperature < settemp-1) { //condition for 1 degree under toggle=1; //turn on ssr for nichrome wire //toggle=0; } - if(ftemperature > settemp-1) { //condition for 1 degree over + if(ftemperature > settemp-1) { toggle=0; //turn off ssr for nichrome wire } - // wait(.1); //check every 1 second } }