Hello world for MAX31855 thermocouple
Dependencies: 4DGL-uLCD-SE MAX31855 mbed-rtos mbed
Fork of Thermo_MAX31855 by
main.cpp@2:0525f2f1dd95, 2014-10-22 (annotated)
- Committer:
- ericspatterson
- Date:
- Wed Oct 22 16:22:13 2014 +0000
- Revision:
- 2:0525f2f1dd95
- Parent:
- 1:04f483a4edc0
Display F and C temperature
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ericspatterson | 0:1f8e362f558b | 1 | #include "mbed.h" |
ericspatterson | 0:1f8e362f558b | 2 | #include "uLCD_4DGL.h" |
ericspatterson | 0:1f8e362f558b | 3 | #include "rtos.h" |
ericspatterson | 0:1f8e362f558b | 4 | #include "stdio.h" |
ericspatterson | 0:1f8e362f558b | 5 | #include "max31855.h" |
ericspatterson | 0:1f8e362f558b | 6 | |
ericspatterson | 0:1f8e362f558b | 7 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
ericspatterson | 0:1f8e362f558b | 8 | SPI thermoSPI(p5,p6,p7); // setup SPI interface |
ericspatterson | 0:1f8e362f558b | 9 | max31855 max1(thermoSPI, p20); //setup max31855 interface |
ericspatterson | 0:1f8e362f558b | 10 | Mutex lcd_mutex; // mutex to make the lcd lib thread safe |
ericspatterson | 0:1f8e362f558b | 11 | Semaphore four_slots(1); //Activate semaphore |
ericspatterson | 0:1f8e362f558b | 12 | |
ericspatterson | 0:1f8e362f558b | 13 | |
ericspatterson | 0:1f8e362f558b | 14 | // Thread t1 |
ericspatterson | 0:1f8e362f558b | 15 | // print the elapsed time on line 1 of the uLCD (i.e., HH:MM:SS) |
ericspatterson | 0:1f8e362f558b | 16 | void elapsedtime(void const *args) { //line 2 |
ericspatterson | 0:1f8e362f558b | 17 | int s = 00; |
ericspatterson | 0:1f8e362f558b | 18 | int m = 00; |
ericspatterson | 0:1f8e362f558b | 19 | int h = 00; |
ericspatterson | 0:1f8e362f558b | 20 | |
ericspatterson | 0:1f8e362f558b | 21 | while(true){ |
ericspatterson | 0:1f8e362f558b | 22 | s++; |
ericspatterson | 0:1f8e362f558b | 23 | if(s>59){ |
ericspatterson | 0:1f8e362f558b | 24 | s=00; |
ericspatterson | 0:1f8e362f558b | 25 | m++; |
ericspatterson | 0:1f8e362f558b | 26 | } |
ericspatterson | 0:1f8e362f558b | 27 | if(m>59){ |
ericspatterson | 0:1f8e362f558b | 28 | m=00; |
ericspatterson | 0:1f8e362f558b | 29 | h++; |
ericspatterson | 0:1f8e362f558b | 30 | } |
ericspatterson | 0:1f8e362f558b | 31 | four_slots.wait(); |
ericspatterson | 0:1f8e362f558b | 32 | //lcd_mutex.lock(); |
ericspatterson | 0:1f8e362f558b | 33 | uLCD.color(0xFFFF00); |
ericspatterson | 2:0525f2f1dd95 | 34 | uLCD.locate(0,0); //col,row |
ericspatterson | 0:1f8e362f558b | 35 | wait(0.1); |
ericspatterson | 0:1f8e362f558b | 36 | uLCD.printf("ET: %2d:%2d:%2d", h,m,s); |
ericspatterson | 0:1f8e362f558b | 37 | //lcd_mutex.unlock(); |
ericspatterson | 0:1f8e362f558b | 38 | four_slots.release(); |
ericspatterson | 1:04f483a4edc0 | 39 | Thread::wait(1000); // update once per secon |
ericspatterson | 0:1f8e362f558b | 40 | } |
ericspatterson | 0:1f8e362f558b | 41 | } |
ericspatterson | 0:1f8e362f558b | 42 | |
ericspatterson | 0:1f8e362f558b | 43 | |
ericspatterson | 0:1f8e362f558b | 44 | // Thread t2 |
ericspatterson | 0:1f8e362f558b | 45 | // print the temperature from the thermocouple - MAX31855 device |
ericspatterson | 0:1f8e362f558b | 46 | void thermoread(void const *args) { //line 2 |
ericspatterson | 0:1f8e362f558b | 47 | |
ericspatterson | 0:1f8e362f558b | 48 | float ftemperature = 0; // float variable for temperature |
ericspatterson | 2:0525f2f1dd95 | 49 | float ctemperature = 0; // float variable for temperature |
ericspatterson | 0:1f8e362f558b | 50 | while(true){ |
ericspatterson | 0:1f8e362f558b | 51 | if (max1.ready()==1){ |
ericspatterson | 2:0525f2f1dd95 | 52 | ctemperature = max1.read_temp(); //Get the reading |
ericspatterson | 2:0525f2f1dd95 | 53 | ftemperature = (ctemperature)*(9.0/5.0)+32.0; |
ericspatterson | 0:1f8e362f558b | 54 | four_slots.wait(); |
ericspatterson | 0:1f8e362f558b | 55 | uLCD.color(0xFFFF00); |
ericspatterson | 2:0525f2f1dd95 | 56 | uLCD.locate(0,2); //col,row |
ericspatterson | 0:1f8e362f558b | 57 | wait(0.1); |
ericspatterson | 2:0525f2f1dd95 | 58 | uLCD.printf("Temp. F: %4.2f", ftemperature); |
ericspatterson | 2:0525f2f1dd95 | 59 | uLCD.color(0xFFFF00); |
ericspatterson | 2:0525f2f1dd95 | 60 | uLCD.locate(0,4); //col,row |
ericspatterson | 2:0525f2f1dd95 | 61 | wait(0.1); |
ericspatterson | 2:0525f2f1dd95 | 62 | uLCD.printf("Temp. C: %4.2f", ctemperature); |
ericspatterson | 0:1f8e362f558b | 63 | four_slots.release(); |
ericspatterson | 0:1f8e362f558b | 64 | |
ericspatterson | 0:1f8e362f558b | 65 | } |
ericspatterson | 0:1f8e362f558b | 66 | } |
ericspatterson | 0:1f8e362f558b | 67 | } |
ericspatterson | 0:1f8e362f558b | 68 | |
ericspatterson | 0:1f8e362f558b | 69 | |
ericspatterson | 0:1f8e362f558b | 70 | int main() { |
ericspatterson | 0:1f8e362f558b | 71 | max1.initialise(); //initialize thermocouple IC |
ericspatterson | 0:1f8e362f558b | 72 | uLCD.baudrate(3000000); //set LCD baudrate |
ericspatterson | 0:1f8e362f558b | 73 | Thread t1(elapsedtime); //run elapsed time counter |
ericspatterson | 0:1f8e362f558b | 74 | Thread t2(thermoread); //read and display temperature from thermocouple |
ericspatterson | 0:1f8e362f558b | 75 | |
ericspatterson | 0:1f8e362f558b | 76 | while(1){ //While so program doesn't end |
ericspatterson | 0:1f8e362f558b | 77 | |
ericspatterson | 0:1f8e362f558b | 78 | } |
ericspatterson | 0:1f8e362f558b | 79 | } |