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 Eric Patterson

main.cpp

Committer:
ericspatterson
Date:
2014-11-12
Revision:
0:4fbaafa6574c
Child:
1:26267401354a

File content as of revision 0:4fbaafa6574c:

#include "mbed.h"
#include "uLCD_4DGL.h"
#include "rtos.h"
#include "stdio.h"
#include "max31855.h"

uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
SPI thermoSPI(p5,p6,p7); // setup SPI interface
max31855 max1(thermoSPI, p20); //setup max31855 interface
Mutex lcd_mutex; // mutex to make the lcd lib thread safe
Semaphore four_slots(1); //Activate semaphore
DigitalOut toggle(p30);
DigitalIn up(p19);
DigitalIn down(p18);

int settemp = 75;

float ftemperature = 0; // float variable for temperature
float ctemperature = 0; // float variable for temperature

// Thread t1
//  print the elapsed time on line 1 of the uLCD (i.e., HH:MM:SS)
void elapsedtime(void const *args) { //line 2
    int s = 00;
    int m = 00;
    int h = 00;
    
    while(true){
        s++;
        if(s>59){
           s=00;
          m++;
         }
         if(m>59){
           m=00;
           h++;
         }
       four_slots.wait();
       //lcd_mutex.lock();
        uLCD.color(0xFFFF00);
        uLCD.locate(0,0); //col,row
        wait(0.1);
        uLCD.printf("ET: %2d:%2d:%2d", h,m,s);
        //lcd_mutex.unlock();
        four_slots.release();
        Thread::wait(1000); // update once per secon
    }
}


// Thread t2
//  print the temperature from the thermocouple - MAX31855 device
void thermoread(void const *args) { //line 2
    

    while(true){
        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(0,3); //col,row
            uLCD.printf("%4.2f", ftemperature);
            
            //uLCD.locate(0,5); //col,row
           // uLCD.printf("Set Temp. F");
           // uLCD.locate(0,6); //col,row
          //  uLCD.printf("%d",settemp);
           
            four_slots.release(); 
        }
    }
}


void thermoset (void const *args) { //line 2
    while(true){
        if (up==1){
            settemp += 1;
            four_slots.wait();    
            uLCD.color(0xFFFF00);        
            uLCD.locate(0,5); //col,row
            uLCD.printf("Set Temp. F");
            uLCD.locate(0,6); //col,row
            uLCD.printf("%d",settemp);
            four_slots.release(); 
            wait(.5);
        }
        if (down==1){
            settemp -= 1;
            four_slots.wait();    
            uLCD.color(0xFFFF00);        
            uLCD.locate(0,5); //col,row
            uLCD.printf("Set Temp. F");
            uLCD.locate(0,6); //col,row
            uLCD.printf("%d",settemp);
            four_slots.release();
            wait(.5); 
        }
    }
}



int main() {
    max1.initialise(); //initialize thermocouple IC    
    uLCD.baudrate(3000000); //set LCD baudrate
    Thread t1(elapsedtime); //run elapsed time counter
    Thread t2(thermoread); //read and display temperature from thermocouple
    Thread t3(thermoset);
    
    
    while(1){ //While so program doesn't end
            if(ftemperature < settemp-1){
                toggle=1; //turn on ssr
            }
            if(ftemperature > settemp+1){
                toggle=0;
            }
            wait(1);
        }
}