Records temperature using TMP36GZ and outputs to HD44780 LCD screen (using tick interrupt routine). Alterable trip level that turns on/off LED with hysteresis. For ST Nucleo F401RE.

Dependencies:   RepeatButton TMP36 GZ TextLCD mbed

Fork of Thermostat_Nucleo by Sapphire

Committer:
MarcoAmerena
Date:
Wed Feb 26 13:33:47 2014 +0000
Revision:
0:f5fbeaf3592c
Child:
1:9bf30974727c
Thermostat_NucleoF401_v1.00

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarcoAmerena 0:f5fbeaf3592c 1 #include "mbed.h"
MarcoAmerena 0:f5fbeaf3592c 2 #include "TextLCD.h"
MarcoAmerena 0:f5fbeaf3592c 3 #include "TMP36GZ.h"
MarcoAmerena 0:f5fbeaf3592c 4 #include "RepeatButton.h"
MarcoAmerena 0:f5fbeaf3592c 5 //#include "InterruptManager.h"
MarcoAmerena 0:f5fbeaf3592c 6 //#include <cstdlib>
MarcoAmerena 0:f5fbeaf3592c 7
MarcoAmerena 0:f5fbeaf3592c 8 using namespace std;
MarcoAmerena 0:f5fbeaf3592c 9 #define REPEAT_DELAY 500
MarcoAmerena 0:f5fbeaf3592c 10 #define REPEAT_PERIOD 100
MarcoAmerena 0:f5fbeaf3592c 11 #define KEY_UP 2
MarcoAmerena 0:f5fbeaf3592c 12 #define KEY_DOWN 4
MarcoAmerena 0:f5fbeaf3592c 13
MarcoAmerena 0:f5fbeaf3592c 14 Ticker tick;
MarcoAmerena 0:f5fbeaf3592c 15 TextLCD lcd(PC_10, PC_12, PA_13, PA_14, PA_15, PB_7); // rs, e, d4-d7
MarcoAmerena 0:f5fbeaf3592c 16 TMP36GZ temp(PA_0);
MarcoAmerena 0:f5fbeaf3592c 17 DigitalOut led(LED1);
MarcoAmerena 0:f5fbeaf3592c 18
MarcoAmerena 0:f5fbeaf3592c 19 KeyBuffer TheKeyBuffer(32);
MarcoAmerena 0:f5fbeaf3592c 20 RepeatButton butUp(PB_4, REPEAT_DELAY, REPEAT_PERIOD, &TheKeyBuffer, KEY_UP);
MarcoAmerena 0:f5fbeaf3592c 21 RepeatButton butDown(PB_3, REPEAT_DELAY, REPEAT_PERIOD, &TheKeyBuffer, KEY_DOWN);
MarcoAmerena 0:f5fbeaf3592c 22
MarcoAmerena 0:f5fbeaf3592c 23 float d, level;
MarcoAmerena 0:f5fbeaf3592c 24
MarcoAmerena 0:f5fbeaf3592c 25 void disp()
MarcoAmerena 0:f5fbeaf3592c 26 {
MarcoAmerena 0:f5fbeaf3592c 27 lcd.locate(0, 0);
MarcoAmerena 0:f5fbeaf3592c 28 lcd.printf("%3.1f %cC", d, 223);
MarcoAmerena 0:f5fbeaf3592c 29 lcd.locate(0, 1);
MarcoAmerena 0:f5fbeaf3592c 30 lcd.printf("Trip %3.1f", level);
MarcoAmerena 0:f5fbeaf3592c 31 }
MarcoAmerena 0:f5fbeaf3592c 32
MarcoAmerena 0:f5fbeaf3592c 33 int main()
MarcoAmerena 0:f5fbeaf3592c 34 {
MarcoAmerena 0:f5fbeaf3592c 35 level = 21.0; //Trip level is at %f initially
MarcoAmerena 0:f5fbeaf3592c 36 float leveloff;
MarcoAmerena 0:f5fbeaf3592c 37 int value;
MarcoAmerena 0:f5fbeaf3592c 38
MarcoAmerena 0:f5fbeaf3592c 39 tick.attach(&disp, 0.5); // setup ticker to call flip after # seconds
MarcoAmerena 0:f5fbeaf3592c 40
MarcoAmerena 0:f5fbeaf3592c 41 while(1)
MarcoAmerena 0:f5fbeaf3592c 42 {
MarcoAmerena 0:f5fbeaf3592c 43 d = temp.sample(); //Define d and f as temp celsius and fahrenheit
MarcoAmerena 0:f5fbeaf3592c 44 leveloff = (level - 2);
MarcoAmerena 0:f5fbeaf3592c 45
MarcoAmerena 0:f5fbeaf3592c 46 for(value = TheKeyBuffer.Read(); value != -1; value = TheKeyBuffer.Read()) //Button 1 and Button 3 increase and decrease trip level
MarcoAmerena 0:f5fbeaf3592c 47 {
MarcoAmerena 0:f5fbeaf3592c 48 switch(value)
MarcoAmerena 0:f5fbeaf3592c 49 {
MarcoAmerena 0:f5fbeaf3592c 50 case KEY_UP:
MarcoAmerena 0:f5fbeaf3592c 51 level += 0.1;
MarcoAmerena 0:f5fbeaf3592c 52 break;
MarcoAmerena 0:f5fbeaf3592c 53
MarcoAmerena 0:f5fbeaf3592c 54 case KEY_DOWN:
MarcoAmerena 0:f5fbeaf3592c 55 level -= 0.1;
MarcoAmerena 0:f5fbeaf3592c 56 break;
MarcoAmerena 0:f5fbeaf3592c 57 }
MarcoAmerena 0:f5fbeaf3592c 58 }
MarcoAmerena 0:f5fbeaf3592c 59
MarcoAmerena 0:f5fbeaf3592c 60 if(d >= level)
MarcoAmerena 0:f5fbeaf3592c 61 {
MarcoAmerena 0:f5fbeaf3592c 62 led = 1;
MarcoAmerena 0:f5fbeaf3592c 63 }
MarcoAmerena 0:f5fbeaf3592c 64 else if(d <= leveloff)
MarcoAmerena 0:f5fbeaf3592c 65 {
MarcoAmerena 0:f5fbeaf3592c 66 led = 0;
MarcoAmerena 0:f5fbeaf3592c 67 }
MarcoAmerena 0:f5fbeaf3592c 68
MarcoAmerena 0:f5fbeaf3592c 69 }
MarcoAmerena 0:f5fbeaf3592c 70 }