Project
Dependencies: 4DGL-uLCD-SE MAX31855 mbed-rtos mbed
main.cpp
- Committer:
- ericspatterson
- Date:
- 2014-11-12
- Revision:
- 1:26267401354a
- Parent:
- 0:4fbaafa6574c
- Child:
- 2:c94244d1cab4
File content as of revision 1:26267401354a:
#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); // toggle for Nichrome wire SSR DigitalIn up(p19); // User pushbutton up controller DigitalIn down(p18); // User pushbutton down button controller int settemp = 75; // initial temperature set float ftemperature = 0; // float variable for temperature float ctemperature = 0; // float variable for temperature // 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("ET: %2d:%2d:%2d", h,m,s); // display time //lcd_mutex.unlock(); four_slots.release(); //unlock screen resource Thread::wait(1000); // update once per secon } } // Thread 2: 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); four_slots.release(); } } } // Thread 3: read in user input from buttons.. void thermoset (void const *args) { // 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); //runs thread that checks to see if user has changed the temperature setpoint while(1){ //hystersis program if(ftemperature < settemp-1){ //condition for 1 degree under toggle=1; //turn on ssr for nichrome wire } if(ftemperature > settemp+1){ //condition for 1 degree over toggle=0; //turn off ssr for nichrome wire } wait(1); //check every 1 second } }