legionella detector

Dependencies:   mbed

Committer:
lewiscameron
Date:
Tue Aug 23 16:54:43 2022 +0000
Revision:
4:b82f09e597ec
Parent:
3:eaa6fbb8fd87
Child:
5:2d1d347847a6
final code

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