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
main.cpp
- Committer:
- ericspatterson
- Date:
- 2014-11-19
- Revision:
- 6:076572f58a5e
- Parent:
- 5:4c4a3e2b8582
- Child:
- 7:8a0223a951c1
File content as of revision 6:076572f58a5e:
#include "mbed.h" #include "uLCD_4DGL.h" #include "rtos.h" #include "stdio.h" #include "max31855.h" #include <mpr121.h> DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); DigitalOut motor(p22); // motor control 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 = 85; // initial temperature set float ftemperature = 0; // float variable for temperature float ctemperature = 0; // float variable for temperature int temptemp=0; int key_code=0; // Create the interrupt receiver object on pin 26 InterruptIn interrupt(p26); // Setup the i2c bus on pins 28 and 27 I2C i2c(p28, p27); // Setup the Mpr121: // constructor(i2c object, i2c address of the mpr121) Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); // 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 } } // 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(11,6); //col,row uLCD.printf("%4.2f", ftemperature); four_slots.release(); } } } void fallInterrupt() { int i=0; int value=mpr121.read(0x00); value +=mpr121.read(0x01)<<8; // LED demo mod i=0; // puts key number out to LEDs for demo for (i=0; i<12; i++) { if (((value>>i)&0x01)==1) key_code=i; } if(key_code== 10) { motor = 0; } if(key_code== 11) { motor = 1; } } int a =0; int main() { max1.initialise(); //initialize thermocouple IC uLCD.baudrate(3000000); //set LCD baudrate interrupt.fall(&fallInterrupt); interrupt.mode(PullUp); Thread t1(elapsedtime); //run elapsed time counter Thread t2(thermoread); //read and display temperature from thermocouple while(1) { //hystersis program key_code = 0; 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(); int place= 100; 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(); } if(a<3) { //key_code = -1; if(key_code>=0 && key_code<=9) { 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++; wait(2); } } if(up == 1) { a = 0; } settemp=temptemp; temptemp=0; four_slots.wait(); uLCD.color(0xFFFF00); uLCD.locate(11,5); //col,row uLCD.printf("%3d",settemp); four_slots.release(); wait(2); 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 // toggle=0; //turn off ssr for nichrome wire // } // wait(.1); //check every 1 second } }