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
Diff: main.cpp
- Revision:
- 0:4fbaafa6574c
- Child:
- 1:26267401354a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Nov 12 18:56:57 2014 +0000
@@ -0,0 +1,125 @@
+#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);
+ }
+}
\ No newline at end of file
