Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

Committer:
louismarr
Date:
Sat Jan 22 15:35:53 2022 +0000
Revision:
18:8e025b809dfb
Parent:
17:be8dd797e60b
Child:
19:00cdcf5a5b7a
Rev 2.3 Htg Clg Function Added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
louismarr 5:138a91e25e1c 1 /*
louismarr 5:138a91e25e1c 2
louismarr 7:ef1dab708752 3 Acknowledgements to (c) Craig A. Evans, University of Leeds, Feb 2016 for Temp Library
louismarr 7:ef1dab708752 4 Acknowledgements to (c) Dr. Edmond Nurellari, University of Lincoln, Dec 2021 for Classes used
louismarr 5:138a91e25e1c 5
louismarr 7:ef1dab708752 6 Using Various Libraries & Functions in order to create a
louismarr 7:ef1dab708752 7 Temperature Based Health Assistive Smart Device
louismarr 0:f8a8c6a8a5c3 8 */
louismarr 0:f8a8c6a8a5c3 9
louismarr 7:ef1dab708752 10 /*
louismarr 7:ef1dab708752 11 ======================== Library Imports =======================================
louismarr 7:ef1dab708752 12 Importing the Header Files from the Class Libraries into the main.cpp
louismarr 7:ef1dab708752 13 */
louismarr 7:ef1dab708752 14 #include "mbed.h" // Mbed OS Library
louismarr 7:ef1dab708752 15 #include "TMP102.h" // TMP102 Header File
louismarr 7:ef1dab708752 16 #include "N5110.h" // N5110 Header File
louismarr 7:ef1dab708752 17 #include "Bitmap.h" // Bitmap Header File
louismarr 12:1c821d6d50f9 18 #include "Joystick.h" // Joystick Header File
louismarr 0:f8a8c6a8a5c3 19
louismarr 7:ef1dab708752 20 /*
louismarr 7:ef1dab708752 21 ========================== Vairable Setup ======================================
louismarr 7:ef1dab708752 22 Pre-Determining the various Variable names to hardware pins on the K64F Board
louismarr 7:ef1dab708752 23 */
louismarr 0:f8a8c6a8a5c3 24
louismarr 7:ef1dab708752 25 TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object
louismarr 7:ef1dab708752 26 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // Create lcd objec
louismarr 7:ef1dab708752 27 Serial serial(USBTX,USBRX); // CoolTerm TX, RX Comms Setup for Debug
louismarr 7:ef1dab708752 28 AnalogIn SP(PTB2); // Potentiometer for Setpoint
louismarr 12:1c821d6d50f9 29 Joystick Joystick(PTB10,PTB11,PTC16); // Create Joystick (PTB10 = Up/Down) (PTB11 = L/R) (PTB16 = Button)
louismarr 12:1c821d6d50f9 30
louismarr 9:77a6ea988e01 31 //Timer timer(); // USE FOR LOGGING BETWEEN 0-10s
louismarr 13:70f02d5e56f5 32 Ticker joystickDelay;
louismarr 7:ef1dab708752 33
louismarr 7:ef1dab708752 34 DigitalOut RED_led(LED_RED); // On-board K64F LED'S
louismarr 7:ef1dab708752 35 DigitalOut GRN_led(LED_GREEN);
louismarr 7:ef1dab708752 36 DigitalOut BLU_led(LED_BLUE);
louismarr 7:ef1dab708752 37
louismarr 18:8e025b809dfb 38 DigitalOut Clg_LED(PTA2);
louismarr 18:8e025b809dfb 39 DigitalOut Ready_LED(PTA1);
louismarr 18:8e025b809dfb 40
louismarr 18:8e025b809dfb 41 DigitalOut Htg_LED(PTC3);
louismarr 18:8e025b809dfb 42
louismarr 7:ef1dab708752 43 InterruptIn sw2(SW2); // On-board K64F Switches
louismarr 5:138a91e25e1c 44 InterruptIn sw3(SW3);
louismarr 9:77a6ea988e01 45 InterruptIn R(PTB3); // Right Bumper Button
louismarr 9:77a6ea988e01 46 InterruptIn L(PTB18); // Left Bumper Button
louismarr 13:70f02d5e56f5 47 InterruptIn A(PTB9); // Right Bumper Button
louismarr 13:70f02d5e56f5 48 InterruptIn Y(PTC12); // Left Bumper Button
louismarr 0:f8a8c6a8a5c3 49
louismarr 9:77a6ea988e01 50 volatile int g_R_flag = 0; // g_ in order to show it is a global variable.
louismarr 9:77a6ea988e01 51 volatile int g_L_flag = 0; // volatile flag as it will change within the isr
louismarr 13:70f02d5e56f5 52 volatile int g_A_flag = 0; // g_ in order to show it is a global variable.
louismarr 16:648f9012c47a 53 volatile int g_Y_flag = 0;
louismarr 18:8e025b809dfb 54
louismarr 7:ef1dab708752 55 /*======================= Void Declaration ===================================*/
louismarr 7:ef1dab708752 56 void error(); // Error Hang Code Function
louismarr 7:ef1dab708752 57 void init_serial(); // Setup serial port Function
louismarr 7:ef1dab708752 58 void init_K64F(); // K64F Disabling Onboard Components Function
louismarr 9:77a6ea988e01 59 void R_isr();
louismarr 9:77a6ea988e01 60 void L_isr();
louismarr 13:70f02d5e56f5 61 void A_isr();
louismarr 13:70f02d5e56f5 62 void Y_isr();
louismarr 10:d98b2dd7ba09 63 void info();
louismarr 12:1c821d6d50f9 64 void temp_SP();
louismarr 14:fa5f83f26ed7 65 void MenuNav();
louismarr 13:70f02d5e56f5 66 void Page1();
louismarr 13:70f02d5e56f5 67 void Page2();
louismarr 18:8e025b809dfb 68 void CWtr();
louismarr 16:648f9012c47a 69 void SP_Array();
louismarr 18:8e025b809dfb 70 void T_SP_Pg2();
louismarr 18:8e025b809dfb 71 void HtgClg_Pg2();
louismarr 18:8e025b809dfb 72
louismarr 7:ef1dab708752 73 /*======================== Main Function =====================================*/
louismarr 18:8e025b809dfb 74 int Setpoint[4] = {8,37.65,80,24};
louismarr 17:be8dd797e60b 75
louismarr 0:f8a8c6a8a5c3 76 int main()
louismarr 0:f8a8c6a8a5c3 77 {
louismarr 6:117edd5dc0a0 78
louismarr 7:ef1dab708752 79 init_K64F(); // Initialise K64F Board
louismarr 7:ef1dab708752 80 init_serial(); // Initialise Serial Port
louismarr 7:ef1dab708752 81 tmp102.init(); // Initialise Temp Sensor
louismarr 7:ef1dab708752 82 lcd.init(); // Initialise LCD
louismarr 12:1c821d6d50f9 83 Joystick.init();
louismarr 16:648f9012c47a 84
louismarr 9:77a6ea988e01 85 lcd.setContrast(0.4); // Setup the contrast for the LCD Screen
louismarr 9:77a6ea988e01 86 R.fall(&R_isr);
louismarr 9:77a6ea988e01 87 R.mode(PullDown);
louismarr 9:77a6ea988e01 88
louismarr 9:77a6ea988e01 89 L.fall(&L_isr);
louismarr 9:77a6ea988e01 90 L.mode(PullDown);
louismarr 0:f8a8c6a8a5c3 91
louismarr 13:70f02d5e56f5 92 A.fall(&A_isr);
louismarr 13:70f02d5e56f5 93 A.mode(PullDown);
louismarr 13:70f02d5e56f5 94
louismarr 13:70f02d5e56f5 95 Y.fall(&Y_isr);
louismarr 13:70f02d5e56f5 96 Y.mode(PullDown);
louismarr 13:70f02d5e56f5 97
louismarr 18:8e025b809dfb 98 Clg_LED = 1;
louismarr 18:8e025b809dfb 99 Ready_LED = 1;
louismarr 18:8e025b809dfb 100
louismarr 18:8e025b809dfb 101 Htg_LED = 1;
louismarr 18:8e025b809dfb 102
louismarr 12:1c821d6d50f9 103 while (1) {
louismarr 8:9c5ef970de26 104 //timer.start();
louismarr 8:9c5ef970de26 105 //for(i = 0; i < 10; i++){
louismarr 5:138a91e25e1c 106 // read temperature and print over serial port
louismarr 13:70f02d5e56f5 107
louismarr 13:70f02d5e56f5 108
louismarr 14:fa5f83f26ed7 109 MenuNav(); // Call the info function
louismarr 18:8e025b809dfb 110 //Page1();
louismarr 18:8e025b809dfb 111 //Page2();
louismarr 17:be8dd797e60b 112 //temp_SP();
louismarr 13:70f02d5e56f5 113
louismarr 12:1c821d6d50f9 114
louismarr 0:f8a8c6a8a5c3 115 }
louismarr 13:70f02d5e56f5 116
louismarr 9:77a6ea988e01 117 }
louismarr 13:70f02d5e56f5 118
louismarr 5:138a91e25e1c 119
louismarr 7:ef1dab708752 120 /*
louismarr 7:ef1dab708752 121 =========================== Void Setup =========================================
louismarr 7:ef1dab708752 122 Custom Function's are called Void's, which are called upon inside the of the
louismarr 7:ef1dab708752 123 Main Function Code
louismarr 7:ef1dab708752 124 */
louismarr 0:f8a8c6a8a5c3 125
louismarr 0:f8a8c6a8a5c3 126 void init_serial() {
louismarr 9:77a6ea988e01 127 // Baud Rate Communication for CoolTerm Debugging
louismarr 7:ef1dab708752 128 serial.baud(9600);
louismarr 0:f8a8c6a8a5c3 129 }
louismarr 0:f8a8c6a8a5c3 130
louismarr 5:138a91e25e1c 131 void init_K64F()
louismarr 0:f8a8c6a8a5c3 132 {
louismarr 7:ef1dab708752 133 // on-board LEDs are active when 0, so setting the pin to 1 turns them off.
louismarr 7:ef1dab708752 134 RED_led = 1;
louismarr 7:ef1dab708752 135 GRN_led = 1;
louismarr 9:77a6ea988e01 136 BLU_led = 1;
louismarr 9:77a6ea988e01 137 /* since the on-board switches have external pull-ups, disable the
louismarr 9:77a6ea988e01 138 * internal pull-down resistors that are enabled by default using
louismarr 9:77a6ea988e01 139 * the InterruptIn Command */
louismarr 5:138a91e25e1c 140 sw2.mode(PullNone);
louismarr 5:138a91e25e1c 141 sw3.mode(PullNone);
louismarr 9:77a6ea988e01 142 }
louismarr 0:f8a8c6a8a5c3 143
louismarr 9:77a6ea988e01 144 void R_isr() // Right Bumper Interrupt Service
louismarr 9:77a6ea988e01 145 {
louismarr 9:77a6ea988e01 146 g_R_flag = 1; // set flag in ISR
louismarr 0:f8a8c6a8a5c3 147 }
louismarr 9:77a6ea988e01 148
louismarr 9:77a6ea988e01 149 void L_isr() // Left Bumper Interrupt Service
louismarr 9:77a6ea988e01 150 {
louismarr 9:77a6ea988e01 151 g_L_flag = 1; // set flag in ISR
louismarr 9:77a6ea988e01 152 }
louismarr 13:70f02d5e56f5 153 void A_isr() // Left Bumper Interrupt Service
louismarr 13:70f02d5e56f5 154 {
louismarr 13:70f02d5e56f5 155 g_A_flag = 1; // set flag in ISR
louismarr 13:70f02d5e56f5 156 }
louismarr 13:70f02d5e56f5 157 void Y_isr() // Left Bumper Interrupt Service
louismarr 13:70f02d5e56f5 158 {
louismarr 13:70f02d5e56f5 159 g_Y_flag = 1; // set flag in ISR
louismarr 13:70f02d5e56f5 160 }
louismarr 10:d98b2dd7ba09 161 void info()
louismarr 10:d98b2dd7ba09 162 {
louismarr 14:fa5f83f26ed7 163
louismarr 10:d98b2dd7ba09 164 serial.printf(" Information Page Selected "); // Debugging Print
louismarr 10:d98b2dd7ba09 165 lcd.clear(); // Clear Screen
louismarr 10:d98b2dd7ba09 166 lcd.printString("Info Page",0,0); // Print Information Screen
louismarr 10:d98b2dd7ba09 167 lcd.printString("Author:",0,1);
louismarr 10:d98b2dd7ba09 168 lcd.printString("Louis M",0,2);
louismarr 10:d98b2dd7ba09 169 lcd.printString("18689006",0,3);
louismarr 13:70f02d5e56f5 170 lcd.printString("Version 1.9.1",0,4);
louismarr 18:8e025b809dfb 171
louismarr 14:fa5f83f26ed7 172 lcd.refresh();
louismarr 14:fa5f83f26ed7 173 wait(1);
louismarr 12:1c821d6d50f9 174 }
louismarr 18:8e025b809dfb 175 void Home()
louismarr 18:8e025b809dfb 176 {
louismarr 18:8e025b809dfb 177 lcd.clear(); // Clear Screen
louismarr 18:8e025b809dfb 178 serial.printf("Home Menu");
louismarr 18:8e025b809dfb 179 lcd.printString(" Navigate >",0,0);
louismarr 18:8e025b809dfb 180 lcd.printString(" Use Joystick ",0,1);
louismarr 18:8e025b809dfb 181 lcd.printString(" Welcome ",0,3); // Print Information Screen
louismarr 18:8e025b809dfb 182 lcd.printString(" Main Menu: ",0,4);
louismarr 18:8e025b809dfb 183 lcd.printString(" Y for Info ",0,5);
louismarr 18:8e025b809dfb 184
louismarr 18:8e025b809dfb 185 lcd.refresh();
louismarr 18:8e025b809dfb 186 wait(1);
louismarr 18:8e025b809dfb 187 }
louismarr 12:1c821d6d50f9 188 void Page1()
louismarr 7:ef1dab708752 189 {
louismarr 12:1c821d6d50f9 190 serial.printf(" Page 1 "); // Debugging Print
louismarr 12:1c821d6d50f9 191 lcd.clear(); // Clear Screen
louismarr 14:fa5f83f26ed7 192 lcd.printString("< Page 1 >",0,0); // Print Information Screen
louismarr 12:1c821d6d50f9 193 lcd.printString("Temperature",0,1);
louismarr 12:1c821d6d50f9 194 lcd.printString("Logging",0,2);
louismarr 14:fa5f83f26ed7 195 lcd.printString("Press A",0,3);
louismarr 14:fa5f83f26ed7 196
louismarr 13:70f02d5e56f5 197 lcd.refresh();
louismarr 14:fa5f83f26ed7 198 wait(1);
louismarr 17:be8dd797e60b 199 //while (1){
louismarr 16:648f9012c47a 200 if (g_A_flag){ // Condition to change over into new loop
louismarr 16:648f9012c47a 201 g_A_flag = 0; // When the R Flag has been pressed
louismarr 16:648f9012c47a 202 A.rise(&A_isr);
louismarr 16:648f9012c47a 203 serial.printf("A Pressed");
louismarr 16:648f9012c47a 204 temp_SP();
louismarr 17:be8dd797e60b 205 wait(1);
louismarr 17:be8dd797e60b 206 }//}
louismarr 17:be8dd797e60b 207
louismarr 9:77a6ea988e01 208 }
louismarr 12:1c821d6d50f9 209 void Page2()
louismarr 14:fa5f83f26ed7 210 {
louismarr 12:1c821d6d50f9 211 serial.printf(" Page 2 "); // Debugging Print
louismarr 12:1c821d6d50f9 212 lcd.clear(); // Clear Screen
louismarr 17:be8dd797e60b 213 lcd.printString("< Page 2",0,0); // Print Information Screen
louismarr 17:be8dd797e60b 214 lcd.printString(" MODE ",0,1);
louismarr 17:be8dd797e60b 215 lcd.printString("Drinking Water",0,2);
louismarr 14:fa5f83f26ed7 216 lcd.printString("Press A",0,3);
louismarr 14:fa5f83f26ed7 217
louismarr 13:70f02d5e56f5 218 lcd.refresh();
louismarr 14:fa5f83f26ed7 219 wait(1);
louismarr 17:be8dd797e60b 220 if (g_A_flag){ // Condition to change over into new loop
louismarr 17:be8dd797e60b 221 g_A_flag = 0; // When the R Flag has been pressed
louismarr 17:be8dd797e60b 222 A.rise(&A_isr);
louismarr 16:648f9012c47a 223 serial.printf("A Pressed");
louismarr 18:8e025b809dfb 224 CWtr();
louismarr 16:648f9012c47a 225 wait(1);
louismarr 16:648f9012c47a 226 }
louismarr 14:fa5f83f26ed7 227 }
louismarr 12:1c821d6d50f9 228 void temp_SP()
louismarr 12:1c821d6d50f9 229 {
louismarr 17:be8dd797e60b 230 //while(1){
louismarr 12:1c821d6d50f9 231 float T = tmp102.get_temperature(); // Reading Temperature as a floating variable
louismarr 12:1c821d6d50f9 232 float Set = SP * 100; // Reading Potentiometer as a floating variable. Multiplied by 100 to give larger range
louismarr 12:1c821d6d50f9 233
louismarr 12:1c821d6d50f9 234 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 235 lcd.printString("Temperature",0,0); // Can also pre-determine the co-ordinates of the ',0,0' (must be less than 84 pixels to fit on display)
louismarr 12:1c821d6d50f9 236 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters)
louismarr 12:1c821d6d50f9 237
louismarr 12:1c821d6d50f9 238 int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T
louismarr 12:1c821d6d50f9 239 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 240 lcd.printString(buffer,0,1); // display on screen
louismarr 12:1c821d6d50f9 241 serial.printf("T = %f C\n",T); // Printing the Temperature over Serial Port
louismarr 12:1c821d6d50f9 242
louismarr 12:1c821d6d50f9 243 length = sprintf(buffer,"SP=%.2F 'C",Set); // Print the Setpoint from the Float Variable Set
louismarr 12:1c821d6d50f9 244 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 245 lcd.printString(buffer,0,2); // display on screen
louismarr 12:1c821d6d50f9 246 serial.printf(" SP = %f", Set); //
louismarr 13:70f02d5e56f5 247 lcd.refresh();
louismarr 13:70f02d5e56f5 248 wait(1);
louismarr 17:be8dd797e60b 249 //while (1){
louismarr 12:1c821d6d50f9 250 if (Set < T){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 251 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 252 lcd.printString("Over Heating",3,2); // Print New Message
louismarr 12:1c821d6d50f9 253 serial.printf("OverTemp"); // Debugging Print
louismarr 13:70f02d5e56f5 254 lcd.refresh();
louismarr 13:70f02d5e56f5 255 wait(1);
louismarr 17:be8dd797e60b 256 //}
louismarr 13:70f02d5e56f5 257 }
louismarr 17:be8dd797e60b 258 }
louismarr 17:be8dd797e60b 259 //}
louismarr 14:fa5f83f26ed7 260 void MenuNav()
louismarr 14:fa5f83f26ed7 261 {
louismarr 18:8e025b809dfb 262
louismarr 18:8e025b809dfb 263 lcd.clear();
louismarr 14:fa5f83f26ed7 264 lcd.refresh();
louismarr 18:8e025b809dfb 265
louismarr 14:fa5f83f26ed7 266 int select = 0;
louismarr 13:70f02d5e56f5 267 while (1){
louismarr 13:70f02d5e56f5 268
louismarr 14:fa5f83f26ed7 269
louismarr 13:70f02d5e56f5 270 //serial.printf("Direction = %i ",d);
louismarr 14:fa5f83f26ed7 271 Direction d = Joystick.get_direction();
louismarr 17:be8dd797e60b 272
louismarr 12:1c821d6d50f9 273 switch(select) {
louismarr 12:1c821d6d50f9 274 case 0:
louismarr 12:1c821d6d50f9 275 switch(d) {
louismarr 14:fa5f83f26ed7 276 case W:
louismarr 14:fa5f83f26ed7 277 wait(0.5);
louismarr 14:fa5f83f26ed7 278 select = 0;
louismarr 14:fa5f83f26ed7 279 serial.printf("LEFT.0");
louismarr 12:1c821d6d50f9 280 break;
louismarr 14:fa5f83f26ed7 281 case E:
louismarr 14:fa5f83f26ed7 282 wait(0.5);
louismarr 14:fa5f83f26ed7 283 select = 1;
louismarr 14:fa5f83f26ed7 284 serial.printf("RIGHT.0");
louismarr 12:1c821d6d50f9 285 break;
louismarr 12:1c821d6d50f9 286 }
louismarr 14:fa5f83f26ed7 287 break;
louismarr 12:1c821d6d50f9 288 case 1:
louismarr 12:1c821d6d50f9 289 switch(d) {
louismarr 14:fa5f83f26ed7 290 case W:
louismarr 14:fa5f83f26ed7 291 wait(0.5);
louismarr 14:fa5f83f26ed7 292 select = 0;
louismarr 14:fa5f83f26ed7 293 serial.printf("LEFT.1");
louismarr 12:1c821d6d50f9 294 break;
louismarr 14:fa5f83f26ed7 295 case E:
louismarr 14:fa5f83f26ed7 296 wait(0.5);
louismarr 14:fa5f83f26ed7 297 select = 2;
louismarr 14:fa5f83f26ed7 298 serial.printf("RIGHT.1");
louismarr 12:1c821d6d50f9 299 break;
louismarr 14:fa5f83f26ed7 300 }
louismarr 14:fa5f83f26ed7 301 break;
louismarr 12:1c821d6d50f9 302 case 2:
louismarr 12:1c821d6d50f9 303 switch(d) {
louismarr 14:fa5f83f26ed7 304 case W:
louismarr 14:fa5f83f26ed7 305 wait(0.5);
louismarr 14:fa5f83f26ed7 306 select = 1;
louismarr 14:fa5f83f26ed7 307 serial.printf("LEFT.2");
louismarr 12:1c821d6d50f9 308 break;
louismarr 14:fa5f83f26ed7 309 case E:
louismarr 14:fa5f83f26ed7 310 wait(0.5);
louismarr 14:fa5f83f26ed7 311 select = 2;
louismarr 14:fa5f83f26ed7 312 serial.printf("RIGHT.2");
louismarr 12:1c821d6d50f9 313 break;
louismarr 14:fa5f83f26ed7 314 }
louismarr 14:fa5f83f26ed7 315 break;
louismarr 12:1c821d6d50f9 316 }
louismarr 14:fa5f83f26ed7 317 wait(0.1);
louismarr 12:1c821d6d50f9 318
louismarr 12:1c821d6d50f9 319 if (select == 0){
louismarr 18:8e025b809dfb 320 Home();
louismarr 14:fa5f83f26ed7 321 }
louismarr 14:fa5f83f26ed7 322 if (g_Y_flag){ // Condition to change over into new loop
louismarr 14:fa5f83f26ed7 323 g_Y_flag = 0; // When the R Flag has been pressed
louismarr 14:fa5f83f26ed7 324 Y.rise(&Y_isr);
louismarr 14:fa5f83f26ed7 325 serial.printf("Y Pressed");
louismarr 18:8e025b809dfb 326 info();
louismarr 12:1c821d6d50f9 327 }
louismarr 14:fa5f83f26ed7 328
louismarr 14:fa5f83f26ed7 329 if (select == 1){
louismarr 17:be8dd797e60b 330 Page1();
louismarr 14:fa5f83f26ed7 331 }
louismarr 14:fa5f83f26ed7 332
louismarr 14:fa5f83f26ed7 333 if (select == 2){
louismarr 12:1c821d6d50f9 334 Page2();
louismarr 17:be8dd797e60b 335
louismarr 12:1c821d6d50f9 336 }
louismarr 12:1c821d6d50f9 337 }
louismarr 14:fa5f83f26ed7 338 }
louismarr 18:8e025b809dfb 339 void CWtr()
louismarr 13:70f02d5e56f5 340 {
louismarr 17:be8dd797e60b 341 while(1){
louismarr 18:8e025b809dfb 342 float CWtr_SP = Setpoint[3];
louismarr 18:8e025b809dfb 343 //serial.printf("SP = %.2f \n",CWtr_SP);
louismarr 16:648f9012c47a 344 float T = tmp102.get_temperature(); // Reading Temperature as a floating variable
louismarr 18:8e025b809dfb 345 serial.printf("SETPOINT = ",CWtr_SP);
louismarr 18:8e025b809dfb 346 if (CWtr_SP-1 > T || T > CWtr_SP+1){
louismarr 18:8e025b809dfb 347
louismarr 18:8e025b809dfb 348 HtgClg_Pg2();
louismarr 16:648f9012c47a 349 lcd.clear();
louismarr 18:8e025b809dfb 350 T_SP_Pg2();
louismarr 18:8e025b809dfb 351 lcd.printString(" Adjusting ",0,2); // Print Information Screen
louismarr 18:8e025b809dfb 352 lcd.printString(" Water Temp ",0,3);
louismarr 18:8e025b809dfb 353 lcd.printString(" Please Wait! ",4,4);
louismarr 18:8e025b809dfb 354
louismarr 18:8e025b809dfb 355 lcd.refresh();
louismarr 18:8e025b809dfb 356 wait(1);
louismarr 18:8e025b809dfb 357 }
louismarr 17:be8dd797e60b 358
louismarr 18:8e025b809dfb 359 else if (CWtr_SP-1 <= T <= CWtr_SP+1){
louismarr 18:8e025b809dfb 360 HtgClg_Pg2();
louismarr 18:8e025b809dfb 361 lcd.clear();
louismarr 18:8e025b809dfb 362 T_SP_Pg2();
louismarr 17:be8dd797e60b 363 lcd.printString(" COLD ",0,2); // Print Information Screen
louismarr 17:be8dd797e60b 364 lcd.printString("Drinking Water",0,3);
louismarr 17:be8dd797e60b 365 lcd.printString(" Ready! ",4,4);
louismarr 18:8e025b809dfb 366
louismarr 18:8e025b809dfb 367 Ready_LED = 0;
louismarr 18:8e025b809dfb 368
louismarr 16:648f9012c47a 369 lcd.refresh();
louismarr 18:8e025b809dfb 370 Ready_LED = 0;
louismarr 16:648f9012c47a 371 wait(1);
louismarr 18:8e025b809dfb 372 }
louismarr 18:8e025b809dfb 373
louismarr 18:8e025b809dfb 374 if (g_R_flag){ // Condition to change over into new loop
louismarr 17:be8dd797e60b 375 g_R_flag = 0; // When the R Flag has been pressed
louismarr 17:be8dd797e60b 376 R.rise(&R_isr);
louismarr 17:be8dd797e60b 377 serial.printf("Home Pressed");
louismarr 18:8e025b809dfb 378
louismarr 18:8e025b809dfb 379 Clg_LED = 1;
louismarr 18:8e025b809dfb 380 Htg_LED = 1;
louismarr 18:8e025b809dfb 381 Ready_LED = 1;
louismarr 18:8e025b809dfb 382
louismarr 17:be8dd797e60b 383 MenuNav();
louismarr 17:be8dd797e60b 384 wait(1);
louismarr 16:648f9012c47a 385 }
louismarr 16:648f9012c47a 386 }
louismarr 17:be8dd797e60b 387 }
louismarr 18:8e025b809dfb 388
louismarr 18:8e025b809dfb 389 void T_SP_Pg2()
louismarr 18:8e025b809dfb 390 {
louismarr 18:8e025b809dfb 391 float T = tmp102.get_temperature();
louismarr 18:8e025b809dfb 392 float CWtr_SP = Setpoint[3];
louismarr 18:8e025b809dfb 393 char buffer[14];
louismarr 18:8e025b809dfb 394
louismarr 18:8e025b809dfb 395 int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T
louismarr 18:8e025b809dfb 396 if (length <= 14);
louismarr 18:8e025b809dfb 397 lcd.printString(buffer,18,0);
louismarr 18:8e025b809dfb 398 serial.printf(" T = %f C\n",T);
louismarr 18:8e025b809dfb 399
louismarr 18:8e025b809dfb 400 length = sprintf(buffer,"SP=%.2f 'C",CWtr_SP); // print the temperature from the float variable T
louismarr 18:8e025b809dfb 401 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 18:8e025b809dfb 402 lcd.printString(buffer,13,1); // display on screen
louismarr 18:8e025b809dfb 403 serial.printf(" T = %f C\n",CWtr_SP);
louismarr 18:8e025b809dfb 404 }
louismarr 18:8e025b809dfb 405 void HtgClg_Pg2()
louismarr 16:648f9012c47a 406 {
louismarr 18:8e025b809dfb 407 float T = tmp102.get_temperature();
louismarr 18:8e025b809dfb 408 float CWtr_SP = Setpoint[3];
louismarr 18:8e025b809dfb 409 if (T > CWtr_SP+1){
louismarr 18:8e025b809dfb 410 Clg_LED = 0;
louismarr 18:8e025b809dfb 411 Htg_LED = 1;
louismarr 18:8e025b809dfb 412 Ready_LED = 1;
louismarr 18:8e025b809dfb 413 }
louismarr 18:8e025b809dfb 414 else if (T < CWtr_SP-1){
louismarr 18:8e025b809dfb 415 Clg_LED = 1;
louismarr 18:8e025b809dfb 416 Htg_LED = 0;
louismarr 18:8e025b809dfb 417 Ready_LED = 1;
louismarr 18:8e025b809dfb 418 }
louismarr 18:8e025b809dfb 419 else {
louismarr 18:8e025b809dfb 420 Clg_LED = 1;
louismarr 18:8e025b809dfb 421 Htg_LED = 1;
louismarr 18:8e025b809dfb 422
louismarr 18:8e025b809dfb 423 }
louismarr 16:648f9012c47a 424 }