Project
Dependencies: 4DGL-uLCD-SE MAX31855 mbed-rtos mbed
Fork of Coffee_Roaster by
main.cpp@0:4fbaafa6574c, 2014-11-12 (annotated)
- Committer:
- ericspatterson
- Date:
- Wed Nov 12 18:56:57 2014 +0000
- Revision:
- 0:4fbaafa6574c
- Child:
- 1:26267401354a
First Publish..Need to work on Touch Panel controls and get motor controlled with SSR
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:4fbaafa6574c | 6 | |
ericspatterson | 0:4fbaafa6574c | 7 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
ericspatterson | 0:4fbaafa6574c | 8 | SPI thermoSPI(p5,p6,p7); // setup SPI interface |
ericspatterson | 0:4fbaafa6574c | 9 | max31855 max1(thermoSPI, p20); //setup max31855 interface |
ericspatterson | 0:4fbaafa6574c | 10 | Mutex lcd_mutex; // mutex to make the lcd lib thread safe |
ericspatterson | 0:4fbaafa6574c | 11 | Semaphore four_slots(1); //Activate semaphore |
ericspatterson | 0:4fbaafa6574c | 12 | DigitalOut toggle(p30); |
ericspatterson | 0:4fbaafa6574c | 13 | DigitalIn up(p19); |
ericspatterson | 0:4fbaafa6574c | 14 | DigitalIn down(p18); |
ericspatterson | 0:4fbaafa6574c | 15 | |
ericspatterson | 0:4fbaafa6574c | 16 | int settemp = 75; |
ericspatterson | 0:4fbaafa6574c | 17 | |
ericspatterson | 0:4fbaafa6574c | 18 | float ftemperature = 0; // float variable for temperature |
ericspatterson | 0:4fbaafa6574c | 19 | float ctemperature = 0; // float variable for temperature |
ericspatterson | 0:4fbaafa6574c | 20 | |
ericspatterson | 0:4fbaafa6574c | 21 | // Thread t1 |
ericspatterson | 0:4fbaafa6574c | 22 | // print the elapsed time on line 1 of the uLCD (i.e., HH:MM:SS) |
ericspatterson | 0:4fbaafa6574c | 23 | void elapsedtime(void const *args) { //line 2 |
ericspatterson | 0:4fbaafa6574c | 24 | int s = 00; |
ericspatterson | 0:4fbaafa6574c | 25 | int m = 00; |
ericspatterson | 0:4fbaafa6574c | 26 | int h = 00; |
ericspatterson | 0:4fbaafa6574c | 27 | |
ericspatterson | 0:4fbaafa6574c | 28 | while(true){ |
ericspatterson | 0:4fbaafa6574c | 29 | s++; |
ericspatterson | 0:4fbaafa6574c | 30 | if(s>59){ |
ericspatterson | 0:4fbaafa6574c | 31 | s=00; |
ericspatterson | 0:4fbaafa6574c | 32 | m++; |
ericspatterson | 0:4fbaafa6574c | 33 | } |
ericspatterson | 0:4fbaafa6574c | 34 | if(m>59){ |
ericspatterson | 0:4fbaafa6574c | 35 | m=00; |
ericspatterson | 0:4fbaafa6574c | 36 | h++; |
ericspatterson | 0:4fbaafa6574c | 37 | } |
ericspatterson | 0:4fbaafa6574c | 38 | four_slots.wait(); |
ericspatterson | 0:4fbaafa6574c | 39 | //lcd_mutex.lock(); |
ericspatterson | 0:4fbaafa6574c | 40 | uLCD.color(0xFFFF00); |
ericspatterson | 0:4fbaafa6574c | 41 | uLCD.locate(0,0); //col,row |
ericspatterson | 0:4fbaafa6574c | 42 | wait(0.1); |
ericspatterson | 0:4fbaafa6574c | 43 | uLCD.printf("ET: %2d:%2d:%2d", h,m,s); |
ericspatterson | 0:4fbaafa6574c | 44 | //lcd_mutex.unlock(); |
ericspatterson | 0:4fbaafa6574c | 45 | four_slots.release(); |
ericspatterson | 0:4fbaafa6574c | 46 | Thread::wait(1000); // update once per secon |
ericspatterson | 0:4fbaafa6574c | 47 | } |
ericspatterson | 0:4fbaafa6574c | 48 | } |
ericspatterson | 0:4fbaafa6574c | 49 | |
ericspatterson | 0:4fbaafa6574c | 50 | |
ericspatterson | 0:4fbaafa6574c | 51 | // Thread t2 |
ericspatterson | 0:4fbaafa6574c | 52 | // print the temperature from the thermocouple - MAX31855 device |
ericspatterson | 0:4fbaafa6574c | 53 | void thermoread(void const *args) { //line 2 |
ericspatterson | 0:4fbaafa6574c | 54 | |
ericspatterson | 0:4fbaafa6574c | 55 | |
ericspatterson | 0:4fbaafa6574c | 56 | while(true){ |
ericspatterson | 0:4fbaafa6574c | 57 | if (max1.ready()==1){ |
ericspatterson | 0:4fbaafa6574c | 58 | ctemperature = max1.read_temp(); //Get the reading |
ericspatterson | 0:4fbaafa6574c | 59 | ftemperature = (ctemperature)*(9.0/5.0)+32.0; |
ericspatterson | 0:4fbaafa6574c | 60 | four_slots.wait(); |
ericspatterson | 0:4fbaafa6574c | 61 | uLCD.color(0xFFFF00); |
ericspatterson | 0:4fbaafa6574c | 62 | uLCD.locate(0,2); //col,row |
ericspatterson | 0:4fbaafa6574c | 63 | wait(0.1); |
ericspatterson | 0:4fbaafa6574c | 64 | uLCD.printf("Current Temp. F"); |
ericspatterson | 0:4fbaafa6574c | 65 | uLCD.locate(0,3); //col,row |
ericspatterson | 0:4fbaafa6574c | 66 | uLCD.printf("%4.2f", ftemperature); |
ericspatterson | 0:4fbaafa6574c | 67 | |
ericspatterson | 0:4fbaafa6574c | 68 | //uLCD.locate(0,5); //col,row |
ericspatterson | 0:4fbaafa6574c | 69 | // uLCD.printf("Set Temp. F"); |
ericspatterson | 0:4fbaafa6574c | 70 | // uLCD.locate(0,6); //col,row |
ericspatterson | 0:4fbaafa6574c | 71 | // uLCD.printf("%d",settemp); |
ericspatterson | 0:4fbaafa6574c | 72 | |
ericspatterson | 0:4fbaafa6574c | 73 | four_slots.release(); |
ericspatterson | 0:4fbaafa6574c | 74 | } |
ericspatterson | 0:4fbaafa6574c | 75 | } |
ericspatterson | 0:4fbaafa6574c | 76 | } |
ericspatterson | 0:4fbaafa6574c | 77 | |
ericspatterson | 0:4fbaafa6574c | 78 | |
ericspatterson | 0:4fbaafa6574c | 79 | void thermoset (void const *args) { //line 2 |
ericspatterson | 0:4fbaafa6574c | 80 | while(true){ |
ericspatterson | 0:4fbaafa6574c | 81 | if (up==1){ |
ericspatterson | 0:4fbaafa6574c | 82 | settemp += 1; |
ericspatterson | 0:4fbaafa6574c | 83 | four_slots.wait(); |
ericspatterson | 0:4fbaafa6574c | 84 | uLCD.color(0xFFFF00); |
ericspatterson | 0:4fbaafa6574c | 85 | uLCD.locate(0,5); //col,row |
ericspatterson | 0:4fbaafa6574c | 86 | uLCD.printf("Set Temp. F"); |
ericspatterson | 0:4fbaafa6574c | 87 | uLCD.locate(0,6); //col,row |
ericspatterson | 0:4fbaafa6574c | 88 | uLCD.printf("%d",settemp); |
ericspatterson | 0:4fbaafa6574c | 89 | four_slots.release(); |
ericspatterson | 0:4fbaafa6574c | 90 | wait(.5); |
ericspatterson | 0:4fbaafa6574c | 91 | } |
ericspatterson | 0:4fbaafa6574c | 92 | if (down==1){ |
ericspatterson | 0:4fbaafa6574c | 93 | settemp -= 1; |
ericspatterson | 0:4fbaafa6574c | 94 | four_slots.wait(); |
ericspatterson | 0:4fbaafa6574c | 95 | uLCD.color(0xFFFF00); |
ericspatterson | 0:4fbaafa6574c | 96 | uLCD.locate(0,5); //col,row |
ericspatterson | 0:4fbaafa6574c | 97 | uLCD.printf("Set Temp. F"); |
ericspatterson | 0:4fbaafa6574c | 98 | uLCD.locate(0,6); //col,row |
ericspatterson | 0:4fbaafa6574c | 99 | uLCD.printf("%d",settemp); |
ericspatterson | 0:4fbaafa6574c | 100 | four_slots.release(); |
ericspatterson | 0:4fbaafa6574c | 101 | wait(.5); |
ericspatterson | 0:4fbaafa6574c | 102 | } |
ericspatterson | 0:4fbaafa6574c | 103 | } |
ericspatterson | 0:4fbaafa6574c | 104 | } |
ericspatterson | 0:4fbaafa6574c | 105 | |
ericspatterson | 0:4fbaafa6574c | 106 | |
ericspatterson | 0:4fbaafa6574c | 107 | |
ericspatterson | 0:4fbaafa6574c | 108 | int main() { |
ericspatterson | 0:4fbaafa6574c | 109 | max1.initialise(); //initialize thermocouple IC |
ericspatterson | 0:4fbaafa6574c | 110 | uLCD.baudrate(3000000); //set LCD baudrate |
ericspatterson | 0:4fbaafa6574c | 111 | Thread t1(elapsedtime); //run elapsed time counter |
ericspatterson | 0:4fbaafa6574c | 112 | Thread t2(thermoread); //read and display temperature from thermocouple |
ericspatterson | 0:4fbaafa6574c | 113 | Thread t3(thermoset); |
ericspatterson | 0:4fbaafa6574c | 114 | |
ericspatterson | 0:4fbaafa6574c | 115 | |
ericspatterson | 0:4fbaafa6574c | 116 | while(1){ //While so program doesn't end |
ericspatterson | 0:4fbaafa6574c | 117 | if(ftemperature < settemp-1){ |
ericspatterson | 0:4fbaafa6574c | 118 | toggle=1; //turn on ssr |
ericspatterson | 0:4fbaafa6574c | 119 | } |
ericspatterson | 0:4fbaafa6574c | 120 | if(ftemperature > settemp+1){ |
ericspatterson | 0:4fbaafa6574c | 121 | toggle=0; |
ericspatterson | 0:4fbaafa6574c | 122 | } |
ericspatterson | 0:4fbaafa6574c | 123 | wait(1); |
ericspatterson | 0:4fbaafa6574c | 124 | } |
ericspatterson | 0:4fbaafa6574c | 125 | } |