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 14:20:25 2014 +0000
Revision:
1:9bf30974727c
Parent:
0:f5fbeaf3592c
Thermostat_NucleoF401_v1.00

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarcoAmerena 1:9bf30974727c 1 /************************************************************************************
MarcoAmerena 1:9bf30974727c 2 Copyright (c) 2014 Marcus Parker Sapphire Research and Electronics ltd
MarcoAmerena 1:9bf30974727c 3
MarcoAmerena 1:9bf30974727c 4 Permission is hereby granted, free of charge, to any person obtaining a copy
MarcoAmerena 1:9bf30974727c 5 of this software and associated documentation files (the "Software"), to deal
MarcoAmerena 1:9bf30974727c 6 in the Software without restriction, including without limitation the rights
MarcoAmerena 1:9bf30974727c 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
MarcoAmerena 1:9bf30974727c 8 copies of the Software, and to permit persons to whom the Software is
MarcoAmerena 1:9bf30974727c 9 furnished to do so, subject to the following conditions:
MarcoAmerena 1:9bf30974727c 10
MarcoAmerena 1:9bf30974727c 11 The above copyright notice and this permission notice shall be included in
MarcoAmerena 1:9bf30974727c 12 all copies or substantial portions of the Software.
MarcoAmerena 1:9bf30974727c 13
MarcoAmerena 1:9bf30974727c 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
MarcoAmerena 1:9bf30974727c 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
MarcoAmerena 1:9bf30974727c 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
MarcoAmerena 1:9bf30974727c 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
MarcoAmerena 1:9bf30974727c 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
MarcoAmerena 1:9bf30974727c 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
MarcoAmerena 1:9bf30974727c 20 THE SOFTWARE.
MarcoAmerena 1:9bf30974727c 21
MarcoAmerena 1:9bf30974727c 22 This program uses the following libraries:
MarcoAmerena 1:9bf30974727c 23 mbed by mbed_official
MarcoAmerena 1:9bf30974727c 24 TextLCD by Simon_Ford
MarcoAmerena 1:9bf30974727c 25 TMP36GZ by Tyler_Weaver
MarcoAmerena 1:9bf30974727c 26 RepeatButton by Jeroen_Hilgers
MarcoAmerena 1:9bf30974727c 27
MarcoAmerena 1:9bf30974727c 28 Wiring instructions:
MarcoAmerena 1:9bf30974727c 29 Two external buttons -> PB_4 and PB_3
MarcoAmerena 1:9bf30974727c 30 TMP36GZ pwr->3.3v, Vout->PA_0
MarcoAmerena 1:9bf30974727c 31 LCD connections as below
MarcoAmerena 1:9bf30974727c 32 *****************************************************************************************/
MarcoAmerena 1:9bf30974727c 33
MarcoAmerena 0:f5fbeaf3592c 34 #include "mbed.h"
MarcoAmerena 0:f5fbeaf3592c 35 #include "TextLCD.h"
MarcoAmerena 0:f5fbeaf3592c 36 #include "TMP36GZ.h"
MarcoAmerena 0:f5fbeaf3592c 37 #include "RepeatButton.h"
MarcoAmerena 0:f5fbeaf3592c 38
MarcoAmerena 0:f5fbeaf3592c 39 using namespace std;
MarcoAmerena 0:f5fbeaf3592c 40 #define REPEAT_DELAY 500
MarcoAmerena 0:f5fbeaf3592c 41 #define REPEAT_PERIOD 100
MarcoAmerena 0:f5fbeaf3592c 42 #define KEY_UP 2
MarcoAmerena 0:f5fbeaf3592c 43 #define KEY_DOWN 4
MarcoAmerena 0:f5fbeaf3592c 44
MarcoAmerena 0:f5fbeaf3592c 45 Ticker tick;
MarcoAmerena 0:f5fbeaf3592c 46 TextLCD lcd(PC_10, PC_12, PA_13, PA_14, PA_15, PB_7); // rs, e, d4-d7
MarcoAmerena 1:9bf30974727c 47 TMP36GZ temp(PA_0);
MarcoAmerena 0:f5fbeaf3592c 48 DigitalOut led(LED1);
MarcoAmerena 0:f5fbeaf3592c 49
MarcoAmerena 0:f5fbeaf3592c 50 KeyBuffer TheKeyBuffer(32);
MarcoAmerena 0:f5fbeaf3592c 51 RepeatButton butUp(PB_4, REPEAT_DELAY, REPEAT_PERIOD, &TheKeyBuffer, KEY_UP);
MarcoAmerena 0:f5fbeaf3592c 52 RepeatButton butDown(PB_3, REPEAT_DELAY, REPEAT_PERIOD, &TheKeyBuffer, KEY_DOWN);
MarcoAmerena 0:f5fbeaf3592c 53
MarcoAmerena 0:f5fbeaf3592c 54 float d, level;
MarcoAmerena 0:f5fbeaf3592c 55
MarcoAmerena 0:f5fbeaf3592c 56 void disp()
MarcoAmerena 0:f5fbeaf3592c 57 {
MarcoAmerena 0:f5fbeaf3592c 58 lcd.locate(0, 0);
MarcoAmerena 0:f5fbeaf3592c 59 lcd.printf("%3.1f %cC", d, 223);
MarcoAmerena 0:f5fbeaf3592c 60 lcd.locate(0, 1);
MarcoAmerena 0:f5fbeaf3592c 61 lcd.printf("Trip %3.1f", level);
MarcoAmerena 0:f5fbeaf3592c 62 }
MarcoAmerena 0:f5fbeaf3592c 63
MarcoAmerena 0:f5fbeaf3592c 64 int main()
MarcoAmerena 0:f5fbeaf3592c 65 {
MarcoAmerena 1:9bf30974727c 66 level = 25.0; //Initial trip level value
MarcoAmerena 0:f5fbeaf3592c 67 float leveloff;
MarcoAmerena 0:f5fbeaf3592c 68 int value;
MarcoAmerena 0:f5fbeaf3592c 69
MarcoAmerena 1:9bf30974727c 70 tick.attach(&disp, 0.5); //Calls display every 0.5 seconds
MarcoAmerena 0:f5fbeaf3592c 71
MarcoAmerena 0:f5fbeaf3592c 72 while(1)
MarcoAmerena 0:f5fbeaf3592c 73 {
MarcoAmerena 1:9bf30974727c 74 d = temp.sample(); //Define d as temp celsius reading
MarcoAmerena 0:f5fbeaf3592c 75 leveloff = (level - 2);
MarcoAmerena 0:f5fbeaf3592c 76
MarcoAmerena 0:f5fbeaf3592c 77 for(value = TheKeyBuffer.Read(); value != -1; value = TheKeyBuffer.Read()) //Button 1 and Button 3 increase and decrease trip level
MarcoAmerena 0:f5fbeaf3592c 78 {
MarcoAmerena 0:f5fbeaf3592c 79 switch(value)
MarcoAmerena 0:f5fbeaf3592c 80 {
MarcoAmerena 0:f5fbeaf3592c 81 case KEY_UP:
MarcoAmerena 0:f5fbeaf3592c 82 level += 0.1;
MarcoAmerena 0:f5fbeaf3592c 83 break;
MarcoAmerena 0:f5fbeaf3592c 84
MarcoAmerena 0:f5fbeaf3592c 85 case KEY_DOWN:
MarcoAmerena 0:f5fbeaf3592c 86 level -= 0.1;
MarcoAmerena 0:f5fbeaf3592c 87 break;
MarcoAmerena 0:f5fbeaf3592c 88 }
MarcoAmerena 0:f5fbeaf3592c 89 }
MarcoAmerena 0:f5fbeaf3592c 90
MarcoAmerena 1:9bf30974727c 91 if(d >= level) //Led will light up if temperature is above trip level
MarcoAmerena 0:f5fbeaf3592c 92 {
MarcoAmerena 0:f5fbeaf3592c 93 led = 1;
MarcoAmerena 0:f5fbeaf3592c 94 }
MarcoAmerena 0:f5fbeaf3592c 95 else if(d <= leveloff)
MarcoAmerena 0:f5fbeaf3592c 96 {
MarcoAmerena 0:f5fbeaf3592c 97 led = 0;
MarcoAmerena 1:9bf30974727c 98 }
MarcoAmerena 0:f5fbeaf3592c 99 }
MarcoAmerena 0:f5fbeaf3592c 100 }