Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE MAX31855 mbed-rtos mbed
Fork of Coffee_Roaster_Threads 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
}
}
