legionella detector

Dependencies:   mbed

Committer:
lewiscameron
Date:
Wed Aug 24 19:43:57 2022 +0000
Revision:
6:4e8b0d2bbe85
Parent:
5:2d1d347847a6
end

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewiscameron 4:b82f09e597ec 1 /**
lewiscameron 4:b82f09e597ec 2 IOT Coursework Project
lewiscameron 4:b82f09e597ec 3 Lewis Cameron
lewiscameron 0:089b4c4f2b6f 4
lewiscameron 4:b82f09e597ec 5 Water Temperature Legionella Detector With Custom Setpoint
lewiscameron 4:b82f09e597ec 6
lewiscameron 4:b82f09e597ec 7 Acknowledgements to Dr. Edmond Nurellari, University of Lincoln, for example codes and libraries
lewiscameron 4:b82f09e597ec 8 Acknowledgements to Craig A. Evans, University of Leeds, for libraries
lewiscameron 4:b82f09e597ec 9
lewiscameron 4:b82f09e597ec 10 Date 23/08/2022
lewiscameron 4:b82f09e597ec 11
lewiscameron 4:b82f09e597ec 12 */
lewiscameron 4:b82f09e597ec 13 // importing the libraries to be used within the code
lewiscameron 0:089b4c4f2b6f 14 #include "mbed.h"
lewiscameron 0:089b4c4f2b6f 15 #include "TMP102.h"
lewiscameron 0:089b4c4f2b6f 16 #include "N5110.h"
lewiscameron 0:089b4c4f2b6f 17 #include "Joystick.h"
lewiscameron 0:089b4c4f2b6f 18 #include "Bitmap.h"
lewiscameron 0:089b4c4f2b6f 19
lewiscameron 4:b82f09e597ec 20 //Defining PCB Buttons as Interrupts
lewiscameron 0:089b4c4f2b6f 21 InterruptIn button_back(PTB19);
lewiscameron 0:089b4c4f2b6f 22 InterruptIn button_start(PTC5);
lewiscameron 0:089b4c4f2b6f 23 InterruptIn button_a(PTB9);
lewiscameron 0:089b4c4f2b6f 24 InterruptIn button_b(PTD0);
lewiscameron 0:089b4c4f2b6f 25 InterruptIn button_x(PTC17);
lewiscameron 0:089b4c4f2b6f 26 InterruptIn button_y(PTC12);
lewiscameron 0:089b4c4f2b6f 27 InterruptIn button_left(PTB18);
lewiscameron 0:089b4c4f2b6f 28 InterruptIn button_right(PTB3);
lewiscameron 5:2d1d347847a6 29 InterruptIn sw2(SW2);
lewiscameron 5:2d1d347847a6 30 InterruptIn sw3(SW3);
lewiscameron 0:089b4c4f2b6f 31
lewiscameron 4:b82f09e597ec 32 //Defining the PCB Led's as PWM Outputs
lewiscameron 0:089b4c4f2b6f 33 PwmOut led_red1(PTA1);
lewiscameron 0:089b4c4f2b6f 34 PwmOut led_red2(PTA2);
lewiscameron 0:089b4c4f2b6f 35 PwmOut led_red3(PTC2);
lewiscameron 0:089b4c4f2b6f 36 PwmOut led_green1(PTC3);
lewiscameron 0:089b4c4f2b6f 37 PwmOut led_green2(PTC4);
lewiscameron 0:089b4c4f2b6f 38 PwmOut led_green3(PTD3);
lewiscameron 5:2d1d347847a6 39 DigitalOut boardled_red(LED_RED);
lewiscameron 5:2d1d347847a6 40 DigitalOut boardled_green(LED_GREEN);
lewiscameron 5:2d1d347847a6 41 DigitalOut boardled_blue(LED_BLUE);
lewiscameron 0:089b4c4f2b6f 42
lewiscameron 4:b82f09e597ec 43 // Defining the Joystick, LCD & TMP102 on their respective pins
lewiscameron 0:089b4c4f2b6f 44 Joystick Joystick(PTB10,PTB11,PTB16);
lewiscameron 0:089b4c4f2b6f 45 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
lewiscameron 0:089b4c4f2b6f 46 TMP102 tmp(I2C_SDA,I2C_SCL);
lewiscameron 0:089b4c4f2b6f 47
lewiscameron 4:b82f09e597ec 48 //Defined the piezo as a PWM Output although it has not been used in the code
lewiscameron 0:089b4c4f2b6f 49 PwmOut piezo(PTC10);
lewiscameron 0:089b4c4f2b6f 50
lewiscameron 4:b82f09e597ec 51 //Creating the serial connection to the PC to enable the use of coolterm
lewiscameron 0:089b4c4f2b6f 52 Serial pc(USBTX,USBRX);
lewiscameron 0:089b4c4f2b6f 53
lewiscameron 4:b82f09e597ec 54 // Setting up the variables that will be used throughout the code in functions
lewiscameron 4:b82f09e597ec 55 volatile int button_a_flag = 0; //PCB A Button
lewiscameron 4:b82f09e597ec 56 volatile int button_b_flag = 0; //PCB B Button
lewiscameron 4:b82f09e597ec 57 volatile int button_x_flag = 0; //PCB X Button
lewiscameron 4:b82f09e597ec 58 volatile int button_y_flag = 0; //PCB Y Button
lewiscameron 4:b82f09e597ec 59 volatile int button_left_flag = 0; //PCB Left Button
lewiscameron 4:b82f09e597ec 60 volatile int button_right_flag = 0; //PCB Right Button
lewiscameron 4:b82f09e597ec 61 volatile int button_back_flag = 0; //PCB Back Button
lewiscameron 4:b82f09e597ec 62 volatile int button_start_flag = 0; //PCB Start Button
lewiscameron 4:b82f09e597ec 63 volatile int CwsHiSP = 20; //CWS Water High Limit Temperature Setpoint
lewiscameron 4:b82f09e597ec 64 volatile int HwsKaSP = 70; //HWS Water Temp which kills all legionella
lewiscameron 4:b82f09e597ec 65 volatile int HwsLoLimSP = 50; //HWS water low limit temperature setpoint
lewiscameron 4:b82f09e597ec 66 volatile int CustomLoSP = 10; //Custom low limit temperature setpoint which can be changed using the joystick
lewiscameron 4:b82f09e597ec 67 volatile int CustomHiSP = 20; //Custom high limit temperature setpoint which can be changed using left & right
lewiscameron 0:089b4c4f2b6f 68
lewiscameron 0:089b4c4f2b6f 69 // voids
lewiscameron 0:089b4c4f2b6f 70 // functions that will be used in the code
lewiscameron 4:b82f09e597ec 71 void init_serial(); // sets up serial baud rate
lewiscameron 0:089b4c4f2b6f 72 void init_K64F(); // sets up K64F
lewiscameron 0:089b4c4f2b6f 73 void init_pcb(); // sets up the pcb
lewiscameron 0:089b4c4f2b6f 74
lewiscameron 0:089b4c4f2b6f 75 // button voids
lewiscameron 1:87661a0c8ba3 76 void button_a_isr();
lewiscameron 1:87661a0c8ba3 77 void button_b_isr();
lewiscameron 1:87661a0c8ba3 78 void button_x_isr();
lewiscameron 1:87661a0c8ba3 79 void button_y_isr();
lewiscameron 1:87661a0c8ba3 80 void button_left_isr();
lewiscameron 1:87661a0c8ba3 81 void button_right_isr();
lewiscameron 1:87661a0c8ba3 82 void button_back_isr();
lewiscameron 1:87661a0c8ba3 83 void button_start_isr();
lewiscameron 0:089b4c4f2b6f 84
lewiscameron 4:b82f09e597ec 85 // void functions that will be called upon throughout the code
lewiscameron 4:b82f09e597ec 86 void startup(); //startup function
lewiscameron 4:b82f09e597ec 87 void codeloop(); //main loop function
lewiscameron 4:b82f09e597ec 88 void get_temp(); //temperature display function
lewiscameron 4:b82f09e597ec 89 void CustHi_SP(); //function for changine the custom high limit SP
lewiscameron 4:b82f09e597ec 90 void CustLo_SP(); //function for changine the custom low limit SP
lewiscameron 4:b82f09e597ec 91 void ShowSP(); //function to show the custom SP's on screen when they after they are changed
lewiscameron 3:eaa6fbb8fd87 92
lewiscameron 3:eaa6fbb8fd87 93 //State structure
lewiscameron 3:eaa6fbb8fd87 94 struct State {
lewiscameron 3:eaa6fbb8fd87 95 //Output Setpoint
lewiscameron 3:eaa6fbb8fd87 96 int output;
lewiscameron 3:eaa6fbb8fd87 97 //Time delay while in state
lewiscameron 3:eaa6fbb8fd87 98 float time;
lewiscameron 3:eaa6fbb8fd87 99 //Next states array and length
lewiscameron 3:eaa6fbb8fd87 100 int nextState[9];
lewiscameron 3:eaa6fbb8fd87 101 };
lewiscameron 0:089b4c4f2b6f 102
lewiscameron 0:089b4c4f2b6f 103
lewiscameron 4:b82f09e597ec 104 //Main Function
lewiscameron 0:089b4c4f2b6f 105
lewiscameron 0:089b4c4f2b6f 106 int main() {
lewiscameron 0:089b4c4f2b6f 107
lewiscameron 0:089b4c4f2b6f 108 // interrupts setup
lewiscameron 1:87661a0c8ba3 109 button_a.rise(&button_a_isr);
lewiscameron 1:87661a0c8ba3 110 button_b.rise(&button_b_isr);
lewiscameron 1:87661a0c8ba3 111 button_x.rise(&button_x_isr);
lewiscameron 1:87661a0c8ba3 112 button_y.rise(&button_y_isr);
lewiscameron 1:87661a0c8ba3 113 button_left.rise(&button_left_isr);
lewiscameron 1:87661a0c8ba3 114 button_right.rise(&button_right_isr);
lewiscameron 1:87661a0c8ba3 115 button_back.rise(&button_back_isr);
lewiscameron 1:87661a0c8ba3 116 button_start.rise(&button_start_isr);
lewiscameron 0:089b4c4f2b6f 117
lewiscameron 0:089b4c4f2b6f 118
lewiscameron 0:089b4c4f2b6f 119
lewiscameron 0:089b4c4f2b6f 120 init_serial();
lewiscameron 0:089b4c4f2b6f 121 init_K64F();
lewiscameron 0:089b4c4f2b6f 122 init_pcb();
lewiscameron 0:089b4c4f2b6f 123 tmp.init();
lewiscameron 0:089b4c4f2b6f 124 lcd.init();
lewiscameron 0:089b4c4f2b6f 125 Joystick.init();
lewiscameron 4:b82f09e597ec 126 //pc.printf("hardware initialised");
lewiscameron 0:089b4c4f2b6f 127
lewiscameron 3:eaa6fbb8fd87 128 lcd.setContrast(1);
lewiscameron 0:089b4c4f2b6f 129 lcd.setBrightness(0.5);
lewiscameron 0:089b4c4f2b6f 130
lewiscameron 0:089b4c4f2b6f 131 startup();
lewiscameron 0:089b4c4f2b6f 132
lewiscameron 6:4e8b0d2bbe85 133 codeloop();
lewiscameron 0:089b4c4f2b6f 134 }
lewiscameron 0:089b4c4f2b6f 135
lewiscameron 0:089b4c4f2b6f 136 // initialise serial connection
lewiscameron 0:089b4c4f2b6f 137 void init_serial()
lewiscameron 0:089b4c4f2b6f 138 {
lewiscameron 0:089b4c4f2b6f 139 pc.baud(9600);
lewiscameron 0:089b4c4f2b6f 140 }
lewiscameron 0:089b4c4f2b6f 141
lewiscameron 0:089b4c4f2b6f 142 void init_K64F()
lewiscameron 0:089b4c4f2b6f 143 {
lewiscameron 0:089b4c4f2b6f 144 boardled_red = 1;
lewiscameron 0:089b4c4f2b6f 145 boardled_green = 1;
lewiscameron 0:089b4c4f2b6f 146 boardled_blue = 1;
lewiscameron 0:089b4c4f2b6f 147
lewiscameron 0:089b4c4f2b6f 148 sw2.mode(PullNone);
lewiscameron 0:089b4c4f2b6f 149 sw3.mode(PullNone);
lewiscameron 0:089b4c4f2b6f 150 }
lewiscameron 0:089b4c4f2b6f 151
lewiscameron 0:089b4c4f2b6f 152 void init_pcb()
lewiscameron 0:089b4c4f2b6f 153 {
lewiscameron 0:089b4c4f2b6f 154
lewiscameron 0:089b4c4f2b6f 155 led_red1 = 1;
lewiscameron 0:089b4c4f2b6f 156 led_red2 = 1;
lewiscameron 0:089b4c4f2b6f 157 led_red3 = 1;
lewiscameron 0:089b4c4f2b6f 158 led_green1 = 1;
lewiscameron 0:089b4c4f2b6f 159 led_green2 = 1;
lewiscameron 0:089b4c4f2b6f 160 led_green3 = 1;
lewiscameron 4:b82f09e597ec 161 // disables PCB LED's active low LED's so off when = 1
lewiscameron 0:089b4c4f2b6f 162
lewiscameron 0:089b4c4f2b6f 163 // sets up the PCB Buttons
lewiscameron 0:089b4c4f2b6f 164 button_a.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 165 button_b.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 166 button_x.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 167 button_y.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 168 button_left.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 169 button_right.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 170 button_start.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 171 button_back.mode(PullDown);
lewiscameron 0:089b4c4f2b6f 172 }
lewiscameron 0:089b4c4f2b6f 173
lewiscameron 4:b82f09e597ec 174 void startup() // startup page
lewiscameron 0:089b4c4f2b6f 175 {
lewiscameron 0:089b4c4f2b6f 176 lcd.printString("Lewis Cameron",0,0);
lewiscameron 0:089b4c4f2b6f 177 lcd.printString("18689002",0,1);
lewiscameron 3:eaa6fbb8fd87 178 lcd.printString("Legionella",0,2);
lewiscameron 3:eaa6fbb8fd87 179 lcd.printString("Sensor",0,3);
lewiscameron 3:eaa6fbb8fd87 180 lcd.printString("w/ Custom SP",0,4);
lewiscameron 4:b82f09e597ec 181 //pc.printf("startup");
lewiscameron 0:089b4c4f2b6f 182 lcd.refresh();
lewiscameron 0:089b4c4f2b6f 183 wait(5);
lewiscameron 0:089b4c4f2b6f 184 }
lewiscameron 0:089b4c4f2b6f 185
lewiscameron 4:b82f09e597ec 186 void codeloop() // main loop
lewiscameron 0:089b4c4f2b6f 187 {
lewiscameron 0:089b4c4f2b6f 188 int page;
lewiscameron 0:089b4c4f2b6f 189
lewiscameron 0:089b4c4f2b6f 190 while(1){
lewiscameron 0:089b4c4f2b6f 191 lcd.clear();
lewiscameron 0:089b4c4f2b6f 192
lewiscameron 0:089b4c4f2b6f 193 switch(page){
lewiscameron 0:089b4c4f2b6f 194
lewiscameron 4:b82f09e597ec 195 case 1: // CWS Page
lewiscameron 0:089b4c4f2b6f 196 {
lewiscameron 0:089b4c4f2b6f 197
lewiscameron 0:089b4c4f2b6f 198 init_pcb();
lewiscameron 0:089b4c4f2b6f 199
lewiscameron 0:089b4c4f2b6f 200 float temp = tmp.get_temperature();
lewiscameron 0:089b4c4f2b6f 201
lewiscameron 0:089b4c4f2b6f 202
lewiscameron 0:089b4c4f2b6f 203 lcd.clear();
lewiscameron 3:eaa6fbb8fd87 204 lcd.printString("CWS",30,0);
lewiscameron 3:eaa6fbb8fd87 205 lcd.printString("Temp =",0,1);
lewiscameron 4:b82f09e597ec 206 get_temp(); // function to show the temperature on screen
lewiscameron 3:eaa6fbb8fd87 207 lcd.printString("Back = Home",0,5);
lewiscameron 4:b82f09e597ec 208 //pc.printf("CWS");
lewiscameron 0:089b4c4f2b6f 209
lewiscameron 4:b82f09e597ec 210 if (temp >= CwsHiSP){ // High temperature Alarm Warning appears on screen
lewiscameron 3:eaa6fbb8fd87 211 lcd.printString("CWS Temp High",0,2);
lewiscameron 3:eaa6fbb8fd87 212 lcd.printString("Legionella",0,3);
lewiscameron 3:eaa6fbb8fd87 213 lcd.printString("Warning",0,4);
lewiscameron 0:089b4c4f2b6f 214 led_red1 = 0;
lewiscameron 4:b82f09e597ec 215 //pc.printf("CWS High Temp");
lewiscameron 0:089b4c4f2b6f 216 }
lewiscameron 0:089b4c4f2b6f 217
lewiscameron 4:b82f09e597ec 218 else if (temp < CwsHiSP){ // Temperature at safe levels so message appears on screen
lewiscameron 3:eaa6fbb8fd87 219 lcd.printString("Temp OK",0,2);
lewiscameron 3:eaa6fbb8fd87 220 lcd.printString("No Danger",0,3);
lewiscameron 3:eaa6fbb8fd87 221 lcd.printString("Of Legionella",0,4);
lewiscameron 0:089b4c4f2b6f 222 led_red1 = 1;
lewiscameron 4:b82f09e597ec 223 //pc.printf("CWS Temp OK");
lewiscameron 0:089b4c4f2b6f 224 }
lewiscameron 0:089b4c4f2b6f 225
lewiscameron 0:089b4c4f2b6f 226 if (button_back_flag) {
lewiscameron 0:089b4c4f2b6f 227 button_back_flag = 0;
lewiscameron 0:089b4c4f2b6f 228 page = 0;
lewiscameron 0:089b4c4f2b6f 229 }
lewiscameron 3:eaa6fbb8fd87 230 lcd.refresh();
lewiscameron 0:089b4c4f2b6f 231 }
lewiscameron 0:089b4c4f2b6f 232 break;
lewiscameron 0:089b4c4f2b6f 233
lewiscameron 0:089b4c4f2b6f 234 case 2:
lewiscameron 0:089b4c4f2b6f 235 {
lewiscameron 0:089b4c4f2b6f 236
lewiscameron 0:089b4c4f2b6f 237 init_pcb();
lewiscameron 0:089b4c4f2b6f 238 float temp = tmp.get_temperature();
lewiscameron 0:089b4c4f2b6f 239
lewiscameron 0:089b4c4f2b6f 240 lcd.clear();
lewiscameron 3:eaa6fbb8fd87 241 lcd.printString("HWS",30,0);
lewiscameron 3:eaa6fbb8fd87 242 lcd.printString("Temp =",0,1);
lewiscameron 0:089b4c4f2b6f 243 get_temp();
lewiscameron 3:eaa6fbb8fd87 244 lcd.printString("Back = Home",0,5);
lewiscameron 0:089b4c4f2b6f 245
lewiscameron 4:b82f09e597ec 246 if (HwsLoLimSP < temp & temp < HwsKaSP){ // Temperature between 50-70 degrees which will start killing legionella
lewiscameron 3:eaa6fbb8fd87 247 lcd.printString("Temp Raised",0,2);
lewiscameron 3:eaa6fbb8fd87 248 lcd.printString("Killing",0,3);
lewiscameron 3:eaa6fbb8fd87 249 lcd.printString("Legionella",0,4);
lewiscameron 0:089b4c4f2b6f 250 led_green1 = 0;
lewiscameron 4:b82f09e597ec 251 //pc.printf("Temp killing legionella");
lewiscameron 0:089b4c4f2b6f 252 }
lewiscameron 0:089b4c4f2b6f 253
lewiscameron 4:b82f09e597ec 254 else if (temp >= HwsKaSP){ // Temperature above 70 degrees killing all legionella
lewiscameron 3:eaa6fbb8fd87 255 lcd.printString("Temp Raised",0,2);
lewiscameron 3:eaa6fbb8fd87 256 lcd.printString("No Danger",0,3);
lewiscameron 3:eaa6fbb8fd87 257 lcd.printString("Of Legionella",0,4);
lewiscameron 0:089b4c4f2b6f 258 led_green1 = 0;
lewiscameron 0:089b4c4f2b6f 259 led_green2 = 0;
lewiscameron 4:b82f09e597ec 260 //pc.printf("Temp killed all legionella");
lewiscameron 0:089b4c4f2b6f 261 }
lewiscameron 0:089b4c4f2b6f 262
lewiscameron 4:b82f09e597ec 263 else if (temp < HwsLoLimSP){ // Temperature below 50 degrees allowing for legionella to live
lewiscameron 3:eaa6fbb8fd87 264 lcd.printString("Temp Low",0,2);
lewiscameron 3:eaa6fbb8fd87 265 lcd.printString("Legionella",0,3);
lewiscameron 3:eaa6fbb8fd87 266 lcd.printString("Warning",0,4);
lewiscameron 0:089b4c4f2b6f 267 led_red1 = 0;
lewiscameron 4:b82f09e597ec 268 //pc.printf("Temp too low legionella warning");
lewiscameron 0:089b4c4f2b6f 269 }
lewiscameron 0:089b4c4f2b6f 270
lewiscameron 0:089b4c4f2b6f 271 if (button_back_flag) {
lewiscameron 0:089b4c4f2b6f 272 button_back_flag = 0;
lewiscameron 0:089b4c4f2b6f 273 page = 0;
lewiscameron 0:089b4c4f2b6f 274 }
lewiscameron 0:089b4c4f2b6f 275
lewiscameron 3:eaa6fbb8fd87 276 lcd.refresh();
lewiscameron 3:eaa6fbb8fd87 277
lewiscameron 0:089b4c4f2b6f 278 }
lewiscameron 0:089b4c4f2b6f 279
lewiscameron 0:089b4c4f2b6f 280
lewiscameron 0:089b4c4f2b6f 281
lewiscameron 0:089b4c4f2b6f 282 break;
lewiscameron 0:089b4c4f2b6f 283
lewiscameron 0:089b4c4f2b6f 284 case 3:
lewiscameron 0:089b4c4f2b6f 285 {
lewiscameron 0:089b4c4f2b6f 286
lewiscameron 0:089b4c4f2b6f 287 init_pcb();
lewiscameron 3:eaa6fbb8fd87 288 float temp = tmp.get_temperature();
lewiscameron 3:eaa6fbb8fd87 289
lewiscameron 0:089b4c4f2b6f 290 lcd.clear();
lewiscameron 0:089b4c4f2b6f 291
lewiscameron 3:eaa6fbb8fd87 292 lcd.printString("Custom SP",15,0);
lewiscameron 3:eaa6fbb8fd87 293 lcd.printString("Temp =",0,1);
lewiscameron 0:089b4c4f2b6f 294 get_temp();
lewiscameron 4:b82f09e597ec 295 CustHi_SP(); // function to change high limit setpoint
lewiscameron 4:b82f09e597ec 296 CustLo_SP(); // function to change low limit setpoint
lewiscameron 4:b82f09e597ec 297 ShowSP(); // function to show both setpoints and change them on screen
lewiscameron 3:eaa6fbb8fd87 298 lcd.printString("Back = Home",0,5);
lewiscameron 3:eaa6fbb8fd87 299
lewiscameron 3:eaa6fbb8fd87 300 if (CustomLoSP < temp & temp < CustomHiSP){
lewiscameron 3:eaa6fbb8fd87 301 lcd.printString("Temp In Range",0,4);
lewiscameron 3:eaa6fbb8fd87 302 led_green1 = 0;
lewiscameron 4:b82f09e597ec 303 //pc.printf("Temp in custom range");
lewiscameron 3:eaa6fbb8fd87 304 }
lewiscameron 3:eaa6fbb8fd87 305
lewiscameron 3:eaa6fbb8fd87 306 else if (temp > CustomHiSP){
lewiscameron 3:eaa6fbb8fd87 307 lcd.printString("High Temp",0,4);
lewiscameron 3:eaa6fbb8fd87 308 led_red1 = 0;
lewiscameron 4:b82f09e597ec 309 //pc.printf("Custom temp high limit");
lewiscameron 3:eaa6fbb8fd87 310 }
lewiscameron 3:eaa6fbb8fd87 311
lewiscameron 3:eaa6fbb8fd87 312 else if (temp < CustomLoSP){
lewiscameron 3:eaa6fbb8fd87 313 lcd.printString("Low Temp",0,4);
lewiscameron 3:eaa6fbb8fd87 314 led_red2 = 0;
lewiscameron 4:b82f09e597ec 315 //pc.printf("Custom temp low limit");
lewiscameron 3:eaa6fbb8fd87 316 }
lewiscameron 0:089b4c4f2b6f 317
lewiscameron 0:089b4c4f2b6f 318 if (button_back_flag) {
lewiscameron 0:089b4c4f2b6f 319 button_back_flag = 0;
lewiscameron 0:089b4c4f2b6f 320 page = 0;
lewiscameron 0:089b4c4f2b6f 321 }
lewiscameron 3:eaa6fbb8fd87 322 lcd.refresh();
lewiscameron 0:089b4c4f2b6f 323
lewiscameron 0:089b4c4f2b6f 324 }
lewiscameron 0:089b4c4f2b6f 325
lewiscameron 0:089b4c4f2b6f 326 break;
lewiscameron 0:089b4c4f2b6f 327
lewiscameron 0:089b4c4f2b6f 328 case 4:
lewiscameron 0:089b4c4f2b6f 329 {
lewiscameron 0:089b4c4f2b6f 330 init_pcb();
lewiscameron 0:089b4c4f2b6f 331 lcd.clear();
lewiscameron 3:eaa6fbb8fd87 332 lcd.printString("Info",26,0);
lewiscameron 3:eaa6fbb8fd87 333 lcd.printString("Legionella",0,1);
lewiscameron 3:eaa6fbb8fd87 334 lcd.printString("Detector",0,2);
lewiscameron 3:eaa6fbb8fd87 335 lcd.printString("Lewis Cameron",0,3);
lewiscameron 3:eaa6fbb8fd87 336 lcd.printString("18689002",0,4);
lewiscameron 3:eaa6fbb8fd87 337 lcd.printString("Back = Home",0,5);
lewiscameron 3:eaa6fbb8fd87 338 lcd.refresh();
lewiscameron 4:b82f09e597ec 339 //pc.printf("Info page");
lewiscameron 0:089b4c4f2b6f 340
lewiscameron 0:089b4c4f2b6f 341 if (button_back_flag) {
lewiscameron 0:089b4c4f2b6f 342 button_back_flag = 0;
lewiscameron 0:089b4c4f2b6f 343 page = 0;
lewiscameron 0:089b4c4f2b6f 344 }
lewiscameron 0:089b4c4f2b6f 345
lewiscameron 0:089b4c4f2b6f 346 }
lewiscameron 0:089b4c4f2b6f 347
lewiscameron 0:089b4c4f2b6f 348
lewiscameron 0:089b4c4f2b6f 349
lewiscameron 0:089b4c4f2b6f 350 break;
lewiscameron 0:089b4c4f2b6f 351 {
lewiscameron 0:089b4c4f2b6f 352 default:
lewiscameron 0:089b4c4f2b6f 353 init_pcb();
lewiscameron 0:089b4c4f2b6f 354 lcd.clear();
lewiscameron 0:089b4c4f2b6f 355
lewiscameron 3:eaa6fbb8fd87 356 lcd.printString("Main Menu",15,0);
lewiscameron 0:089b4c4f2b6f 357 lcd.printString("A = Cold Water",0,1);
lewiscameron 0:089b4c4f2b6f 358 lcd.printString("B = Hot Water",0,2);
lewiscameron 0:089b4c4f2b6f 359 lcd.printString("X = Custom SP",0,3);
lewiscameron 0:089b4c4f2b6f 360 lcd.printString("Y = Info",0,4);
lewiscameron 0:089b4c4f2b6f 361 lcd.refresh();
lewiscameron 0:089b4c4f2b6f 362
lewiscameron 0:089b4c4f2b6f 363 if (button_a_flag) {
lewiscameron 0:089b4c4f2b6f 364 button_a_flag = 0;
lewiscameron 0:089b4c4f2b6f 365 page = 1;
lewiscameron 4:b82f09e597ec 366 //pc.printf("A Pressed");
lewiscameron 0:089b4c4f2b6f 367 }
lewiscameron 0:089b4c4f2b6f 368
lewiscameron 0:089b4c4f2b6f 369 if (button_b_flag) {
lewiscameron 0:089b4c4f2b6f 370 button_b_flag = 0;
lewiscameron 0:089b4c4f2b6f 371 page = 2;
lewiscameron 4:b82f09e597ec 372 //pc.printf("B Pressed");
lewiscameron 0:089b4c4f2b6f 373 }
lewiscameron 0:089b4c4f2b6f 374
lewiscameron 0:089b4c4f2b6f 375 if (button_x_flag) {
lewiscameron 0:089b4c4f2b6f 376 button_x_flag = 0;
lewiscameron 0:089b4c4f2b6f 377 page = 3;
lewiscameron 4:b82f09e597ec 378 //pc.printf("X Pressed");
lewiscameron 0:089b4c4f2b6f 379 }
lewiscameron 0:089b4c4f2b6f 380
lewiscameron 0:089b4c4f2b6f 381 if (button_y_flag) {
lewiscameron 0:089b4c4f2b6f 382 button_y_flag = 0;
lewiscameron 0:089b4c4f2b6f 383 page = 4;
lewiscameron 4:b82f09e597ec 384 //pc.printf("Y Pressed");
lewiscameron 0:089b4c4f2b6f 385 }
lewiscameron 0:089b4c4f2b6f 386
lewiscameron 0:089b4c4f2b6f 387 }
lewiscameron 0:089b4c4f2b6f 388 }
lewiscameron 1:87661a0c8ba3 389
lewiscameron 0:089b4c4f2b6f 390 }
lewiscameron 1:87661a0c8ba3 391 }
lewiscameron 1:87661a0c8ba3 392
lewiscameron 1:87661a0c8ba3 393
lewiscameron 0:089b4c4f2b6f 394
lewiscameron 1:87661a0c8ba3 395 void button_a_isr()
lewiscameron 0:089b4c4f2b6f 396 {
lewiscameron 0:089b4c4f2b6f 397 button_a_flag = 1;
lewiscameron 0:089b4c4f2b6f 398 }
lewiscameron 0:089b4c4f2b6f 399
lewiscameron 1:87661a0c8ba3 400 void button_b_isr()
lewiscameron 0:089b4c4f2b6f 401 {
lewiscameron 0:089b4c4f2b6f 402 button_b_flag = 1;
lewiscameron 0:089b4c4f2b6f 403 }
lewiscameron 0:089b4c4f2b6f 404
lewiscameron 1:87661a0c8ba3 405 void button_x_isr()
lewiscameron 0:089b4c4f2b6f 406 {
lewiscameron 0:089b4c4f2b6f 407 button_x_flag = 1;
lewiscameron 0:089b4c4f2b6f 408 }
lewiscameron 0:089b4c4f2b6f 409
lewiscameron 1:87661a0c8ba3 410 void button_y_isr()
lewiscameron 0:089b4c4f2b6f 411 {
lewiscameron 0:089b4c4f2b6f 412 button_y_flag = 1;
lewiscameron 0:089b4c4f2b6f 413 }
lewiscameron 0:089b4c4f2b6f 414
lewiscameron 1:87661a0c8ba3 415 void button_left_isr()
lewiscameron 0:089b4c4f2b6f 416 {
lewiscameron 0:089b4c4f2b6f 417 button_left_flag = 1;
lewiscameron 0:089b4c4f2b6f 418 }
lewiscameron 0:089b4c4f2b6f 419
lewiscameron 1:87661a0c8ba3 420 void button_right_isr()
lewiscameron 0:089b4c4f2b6f 421 {
lewiscameron 0:089b4c4f2b6f 422 button_right_flag = 1;
lewiscameron 0:089b4c4f2b6f 423 }
lewiscameron 0:089b4c4f2b6f 424
lewiscameron 1:87661a0c8ba3 425 void button_back_isr()
lewiscameron 0:089b4c4f2b6f 426 {
lewiscameron 0:089b4c4f2b6f 427 button_back_flag = 1;
lewiscameron 0:089b4c4f2b6f 428 }
lewiscameron 0:089b4c4f2b6f 429
lewiscameron 0:089b4c4f2b6f 430
lewiscameron 1:87661a0c8ba3 431 void button_start_isr()
lewiscameron 0:089b4c4f2b6f 432 {
lewiscameron 0:089b4c4f2b6f 433 button_start_flag = 1;
lewiscameron 0:089b4c4f2b6f 434 }
lewiscameron 0:089b4c4f2b6f 435
lewiscameron 1:87661a0c8ba3 436 void get_temp()
lewiscameron 0:089b4c4f2b6f 437 {
lewiscameron 0:089b4c4f2b6f 438 char buffer[14];
lewiscameron 0:089b4c4f2b6f 439 float temp = tmp.get_temperature();
lewiscameron 0:089b4c4f2b6f 440 int length = sprintf(buffer,"%.2f C",temp);
lewiscameron 0:089b4c4f2b6f 441 //pc.printf("temp = %f K\n",temp);
lewiscameron 0:089b4c4f2b6f 442 if (length <=14)
lewiscameron 3:eaa6fbb8fd87 443 lcd.printString(buffer,38,1);
lewiscameron 0:089b4c4f2b6f 444
lewiscameron 0:089b4c4f2b6f 445 }
lewiscameron 0:089b4c4f2b6f 446
lewiscameron 1:87661a0c8ba3 447 void CustHi_SP()
lewiscameron 0:089b4c4f2b6f 448 {
lewiscameron 4:b82f09e597ec 449 Direction d = Joystick.get_direction(); //gets the direction the joystick is pushed
lewiscameron 0:089b4c4f2b6f 450
lewiscameron 0:089b4c4f2b6f 451
lewiscameron 4:b82f09e597ec 452 if (d == W) { // decreases the setpoint when it is pushed left
lewiscameron 4:b82f09e597ec 453 //pc.printf("Joystick Left");
lewiscameron 3:eaa6fbb8fd87 454 CustomHiSP = CustomHiSP - 1;
lewiscameron 0:089b4c4f2b6f 455 wait(0.5);
lewiscameron 0:089b4c4f2b6f 456 }
lewiscameron 0:089b4c4f2b6f 457
lewiscameron 4:b82f09e597ec 458 if (d == E) { //increases the setpoint when it is pushed right
lewiscameron 4:b82f09e597ec 459 //pc.printf("Joystick Right");
lewiscameron 3:eaa6fbb8fd87 460 CustomHiSP = CustomHiSP + 1;
lewiscameron 0:089b4c4f2b6f 461 wait(0.5);
lewiscameron 0:089b4c4f2b6f 462
lewiscameron 0:089b4c4f2b6f 463 }
lewiscameron 0:089b4c4f2b6f 464 }
lewiscameron 0:089b4c4f2b6f 465
lewiscameron 4:b82f09e597ec 466 void CustLo_SP() //function to change low limit SP
lewiscameron 0:089b4c4f2b6f 467 {
lewiscameron 4:b82f09e597ec 468 if (button_left_flag) { //decreases the setpoint when the left bumper is pressed
lewiscameron 0:089b4c4f2b6f 469 button_left_flag = 0;
lewiscameron 4:b82f09e597ec 470 //pc.printf("Left pressed");
lewiscameron 3:eaa6fbb8fd87 471 CustomLoSP = CustomLoSP - 1;
lewiscameron 0:089b4c4f2b6f 472 wait(0.5);
lewiscameron 0:089b4c4f2b6f 473 }
lewiscameron 0:089b4c4f2b6f 474
lewiscameron 4:b82f09e597ec 475 if (button_right_flag) { // increases the setpoint when the right bumper is pressed
lewiscameron 0:089b4c4f2b6f 476 button_right_flag = 0;
lewiscameron 4:b82f09e597ec 477 //pc.printf("Right pressed");
lewiscameron 3:eaa6fbb8fd87 478 CustomLoSP = CustomLoSP + 1;
lewiscameron 0:089b4c4f2b6f 479 wait(0.5);
lewiscameron 0:089b4c4f2b6f 480 }
lewiscameron 0:089b4c4f2b6f 481
lewiscameron 3:eaa6fbb8fd87 482 }
lewiscameron 3:eaa6fbb8fd87 483
lewiscameron 3:eaa6fbb8fd87 484 void ShowSP()
lewiscameron 3:eaa6fbb8fd87 485 {
lewiscameron 3:eaa6fbb8fd87 486 char buffer[14];
lewiscameron 0:089b4c4f2b6f 487 int length = sprintf(buffer,"LoLimSP=%.2iC",CustomLoSP);
lewiscameron 0:089b4c4f2b6f 488
lewiscameron 0:089b4c4f2b6f 489 if (length <= 14); {
lewiscameron 4:b82f09e597ec 490 lcd.printString(buffer,0,3); // prints the low SP value on screen
lewiscameron 3:eaa6fbb8fd87 491 }
lewiscameron 3:eaa6fbb8fd87 492
lewiscameron 3:eaa6fbb8fd87 493 length = sprintf(buffer,"HiLimSP=%.2iC",CustomHiSP);
lewiscameron 3:eaa6fbb8fd87 494
lewiscameron 3:eaa6fbb8fd87 495 if (length <= 14); {
lewiscameron 4:b82f09e597ec 496 lcd.printString(buffer,0,2); // prints the high SP value on screen
lewiscameron 0:089b4c4f2b6f 497 }
lewiscameron 0:089b4c4f2b6f 498 }
lewiscameron 3:eaa6fbb8fd87 499
lewiscameron 2:9d6daa8a091c 500
lewiscameron 4:b82f09e597ec 501 void TMP102::error() // function to show that there is an error with the temp sensor on screen and switch on a red LED
lewiscameron 2:9d6daa8a091c 502 {
lewiscameron 4:b82f09e597ec 503
lewiscameron 2:9d6daa8a091c 504 startup();
lewiscameron 2:9d6daa8a091c 505 lcd.clear();
lewiscameron 2:9d6daa8a091c 506 lcd.printString("TMP102",0,0);
lewiscameron 2:9d6daa8a091c 507 lcd.printString("Sensor Error",0,1);
lewiscameron 2:9d6daa8a091c 508
lewiscameron 2:9d6daa8a091c 509 while(1) {
lewiscameron 4:b82f09e597ec 510 //printf("Temp sensor error \n");
lewiscameron 2:9d6daa8a091c 511 led_red2 = 0;
lewiscameron 2:9d6daa8a091c 512 }
lewiscameron 2:9d6daa8a091c 513 }
lewiscameron 2:9d6daa8a091c 514
lewiscameron 0:089b4c4f2b6f 515
lewiscameron 0:089b4c4f2b6f 516
lewiscameron 0:089b4c4f2b6f 517
lewiscameron 1:87661a0c8ba3 518
lewiscameron 0:089b4c4f2b6f 519