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

Committer:
ericspatterson
Date:
Tue Dec 02 18:10:09 2014 +0000
Revision:
9:d7300899fd85
Parent:
8:1db15ab871a4
Final Project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ericspatterson 0:4fbaafa6574c 1 #include "mbed.h"
ericspatterson 0:4fbaafa6574c 2 #include "uLCD_4DGL.h"
ericspatterson 0:4fbaafa6574c 3 #include "rtos.h"
ericspatterson 0:4fbaafa6574c 4 #include "stdio.h"
ericspatterson 0:4fbaafa6574c 5 #include "max31855.h"
ericspatterson 2:c94244d1cab4 6 #include <mpr121.h>
ericspatterson 8:1db15ab871a4 7 #include "Stopwatch.h"
ericspatterson 2:c94244d1cab4 8
ericspatterson 9:d7300899fd85 9
ericspatterson 9:d7300899fd85 10 DigitalOut toggle(p30); // toggle for Nichrome wire SSR
ericspatterson 9:d7300899fd85 11 DigitalIn up(p19); // User reset button
ericspatterson 4:85eb29963721 12 DigitalOut motor(p22); // motor control
ericspatterson 0:4fbaafa6574c 13
ericspatterson 0:4fbaafa6574c 14 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
ericspatterson 0:4fbaafa6574c 15 SPI thermoSPI(p5,p6,p7); // setup SPI interface
ericspatterson 0:4fbaafa6574c 16 max31855 max1(thermoSPI, p20); //setup max31855 interface
ericspatterson 9:d7300899fd85 17 InterruptIn interrupt(p26); // Create the interrupt receiver object on pin 26
ericspatterson 9:d7300899fd85 18 I2C i2c(p28, p27); // Setup the i2c bus on pins 28 and 27
ericspatterson 9:d7300899fd85 19 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); // Setup the Mpr121: // constructor(i2c object, i2c address of the mpr121)
ericspatterson 9:d7300899fd85 20
ericspatterson 0:4fbaafa6574c 21 Mutex lcd_mutex; // mutex to make the lcd lib thread safe
ericspatterson 0:4fbaafa6574c 22 Semaphore four_slots(1); //Activate semaphore
ericspatterson 9:d7300899fd85 23 Stopwatch watch = Stopwatch();
ericspatterson 0:4fbaafa6574c 24
ericspatterson 9:d7300899fd85 25 int settemp = 1; // initial temperature set
ericspatterson 0:4fbaafa6574c 26 float ftemperature = 0; // float variable for temperature
ericspatterson 0:4fbaafa6574c 27 float ctemperature = 0; // float variable for temperature
ericspatterson 9:d7300899fd85 28 int temptemp=1;
ericspatterson 8:1db15ab871a4 29 int key_code=-1;
ericspatterson 8:1db15ab871a4 30 int a =0;
ericspatterson 8:1db15ab871a4 31 int place= 100;
ericspatterson 8:1db15ab871a4 32 int s = 00;
ericspatterson 8:1db15ab871a4 33 int m = 00;
ericspatterson 8:1db15ab871a4 34 int h = 00;
ericspatterson 8:1db15ab871a4 35
ericspatterson 2:c94244d1cab4 36
ericspatterson 9:d7300899fd85 37 // Thread 1: run stopwatch timer
ericspatterson 6:076572f58a5e 38 void elapsedtime(void const *args) //elapsed timer for when program starts
ericspatterson 6:076572f58a5e 39 {
ericspatterson 8:1db15ab871a4 40 watch.start();
ericspatterson 0:4fbaafa6574c 41 }
ericspatterson 0:4fbaafa6574c 42
ericspatterson 0:4fbaafa6574c 43
ericspatterson 1:26267401354a 44 // Thread 2: print the temperature from the thermocouple - MAX31855 device
ericspatterson 6:076572f58a5e 45 void thermoread(void const *args) //line 2
ericspatterson 6:076572f58a5e 46 {
ericspatterson 6:076572f58a5e 47 while(true) {
ericspatterson 6:076572f58a5e 48 if (max1.ready()==1) {
ericspatterson 9:d7300899fd85 49 ctemperature = max1.read_temp(); //Get the reading in celsius
ericspatterson 9:d7300899fd85 50 ftemperature = (ctemperature)*(9.0/5.0)+32.0; //Get the reading in fahrenheit
ericspatterson 8:1db15ab871a4 51 }
ericspatterson 8:1db15ab871a4 52 }
ericspatterson 8:1db15ab871a4 53 }
ericspatterson 8:1db15ab871a4 54
ericspatterson 8:1db15ab871a4 55
ericspatterson 8:1db15ab871a4 56 // Thread 3: reset temp
ericspatterson 8:1db15ab871a4 57 void thermoset(void const *args) //line 2
ericspatterson 8:1db15ab871a4 58 {
ericspatterson 8:1db15ab871a4 59 while(true) {
ericspatterson 8:1db15ab871a4 60 if(up == 1) {
ericspatterson 9:d7300899fd85 61 a = 0;
ericspatterson 9:d7300899fd85 62 temptemp=0;
ericspatterson 9:d7300899fd85 63 while(a<3) { //USER MUST INPUT 3 NUMBERS
ericspatterson 9:d7300899fd85 64 if(key_code>=0 && key_code<=9) {
ericspatterson 9:d7300899fd85 65 wait(.1);
ericspatterson 9:d7300899fd85 66 if(a==0)temptemp=key_code*100;
ericspatterson 9:d7300899fd85 67 if(a==1)temptemp+=key_code*10;
ericspatterson 9:d7300899fd85 68 if(a==2)temptemp+=key_code*1;
ericspatterson 9:d7300899fd85 69 a++;
ericspatterson 9:d7300899fd85 70 key_code = -1; //clear keycode
ericspatterson 9:d7300899fd85 71 }
ericspatterson 9:d7300899fd85 72 }
ericspatterson 9:d7300899fd85 73 settemp=temptemp;
ericspatterson 0:4fbaafa6574c 74 }
ericspatterson 0:4fbaafa6574c 75 }
ericspatterson 0:4fbaafa6574c 76 }
ericspatterson 0:4fbaafa6574c 77
ericspatterson 2:c94244d1cab4 78
ericspatterson 6:076572f58a5e 79 void fallInterrupt()
ericspatterson 6:076572f58a5e 80 {
ericspatterson 6:076572f58a5e 81 int i=0;
ericspatterson 6:076572f58a5e 82 int value=mpr121.read(0x00);
ericspatterson 6:076572f58a5e 83 value +=mpr121.read(0x01)<<8;
ericspatterson 6:076572f58a5e 84 i=0;
ericspatterson 9:d7300899fd85 85 for (i=0; i<12; i++) { // puts key number out to 0-12 digits
ericspatterson 6:076572f58a5e 86 if (((value>>i)&0x01)==1) key_code=i;
ericspatterson 6:076572f58a5e 87 }
ericspatterson 6:076572f58a5e 88 if(key_code== 10) {
ericspatterson 6:076572f58a5e 89 motor = 0;
ericspatterson 6:076572f58a5e 90 }
ericspatterson 6:076572f58a5e 91 if(key_code== 11) {
ericspatterson 6:076572f58a5e 92 motor = 1;
ericspatterson 6:076572f58a5e 93 }
ericspatterson 2:c94244d1cab4 94 }
ericspatterson 2:c94244d1cab4 95
ericspatterson 8:1db15ab871a4 96
ericspatterson 6:076572f58a5e 97 int main()
ericspatterson 6:076572f58a5e 98 {
ericspatterson 6:076572f58a5e 99 max1.initialise(); //initialize thermocouple IC
ericspatterson 6:076572f58a5e 100 uLCD.baudrate(3000000); //set LCD baudrate
ericspatterson 6:076572f58a5e 101 interrupt.fall(&fallInterrupt);
ericspatterson 6:076572f58a5e 102 interrupt.mode(PullUp);
ericspatterson 6:076572f58a5e 103 Thread t1(elapsedtime); //run elapsed time counter
ericspatterson 6:076572f58a5e 104 Thread t2(thermoread); //read and display temperature from thermocouple
ericspatterson 8:1db15ab871a4 105 Thread t3(thermoset); // user set temperature
ericspatterson 6:076572f58a5e 106
ericspatterson 6:076572f58a5e 107 while(1) { //hystersis program
ericspatterson 8:1db15ab871a4 108 char* time = watch.getTime();
ericspatterson 8:1db15ab871a4 109 four_slots.wait(); //lock screen
ericspatterson 8:1db15ab871a4 110 uLCD.color(0xFFFF00); //set color
ericspatterson 8:1db15ab871a4 111 uLCD.locate(0,0); //col,row for time
ericspatterson 8:1db15ab871a4 112 uLCD.printf("Time | %s",time);//%2d:%2d:%2d", h,m,s); // display time
ericspatterson 8:1db15ab871a4 113 uLCD.locate(0,5);
ericspatterson 8:1db15ab871a4 114 uLCD.printf("Set | %3d",settemp); // current set temperature
ericspatterson 8:1db15ab871a4 115 uLCD.locate(0,6);
ericspatterson 8:1db15ab871a4 116 uLCD.printf("Current | %4.2f", ftemperature); // temperature reading
ericspatterson 8:1db15ab871a4 117 uLCD.locate(0,2);
ericspatterson 8:1db15ab871a4 118 uLCD.printf("Motor | "); //motor state in "on" or "off" state
ericspatterson 8:1db15ab871a4 119 uLCD.locate(0,13);
ericspatterson 8:1db15ab871a4 120 uLCD.printf("New Temp| %3d",temptemp); //new user temperature
ericspatterson 8:1db15ab871a4 121 if(motor==0) {
ericspatterson 8:1db15ab871a4 122 uLCD.locate(11,2); //col,row
ericspatterson 8:1db15ab871a4 123 uLCD.printf("OFF");
ericspatterson 6:076572f58a5e 124 }
ericspatterson 8:1db15ab871a4 125 if(motor==1) {
ericspatterson 8:1db15ab871a4 126 uLCD.locate(11,2); //col,row
ericspatterson 8:1db15ab871a4 127 uLCD.printf("ON ");
ericspatterson 8:1db15ab871a4 128 }
ericspatterson 8:1db15ab871a4 129 four_slots.release(); // release screen resource
ericspatterson 6:076572f58a5e 130 if(ftemperature < settemp-1) { //condition for 1 degree under
ericspatterson 2:c94244d1cab4 131 toggle=1; //turn on ssr for nichrome wire
ericspatterson 2:c94244d1cab4 132 }
ericspatterson 8:1db15ab871a4 133 if(ftemperature > settemp-1) {
ericspatterson 7:8a0223a951c1 134 toggle=0; //turn off ssr for nichrome wire
ericspatterson 7:8a0223a951c1 135 }
ericspatterson 0:4fbaafa6574c 136 }
ericspatterson 0:4fbaafa6574c 137 }