![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
legionella detector
Dependencies: mbed
main.cpp
- Committer:
- lewiscameron
- Date:
- 23 months ago
- Revision:
- 3:eaa6fbb8fd87
- Parent:
- 2:9d6daa8a091c
- Child:
- 4:b82f09e597ec
File content as of revision 3:eaa6fbb8fd87:
// importing the libraries #include "mbed.h" #include "TMP102.h" #include "N5110.h" #include "Joystick.h" #include "Bitmap.h" //Buttons InterruptIn button_back(PTB19); InterruptIn button_start(PTC5); InterruptIn button_a(PTB9); InterruptIn button_b(PTD0); InterruptIn button_x(PTC17); InterruptIn button_y(PTC12); InterruptIn button_left(PTB18); InterruptIn button_right(PTB3); InterruptIn sw2(SW2); InterruptIn sw3(SW3); //LEDs PwmOut led_red1(PTA1); PwmOut led_red2(PTA2); PwmOut led_red3(PTC2); PwmOut led_green1(PTC3); PwmOut led_green2(PTC4); PwmOut led_green3(PTD3); DigitalOut boardled_red(LED_RED); DigitalOut boardled_green(LED_GREEN); DigitalOut boardled_blue(LED_BLUE); // Joystick, LCD & TMP102 Joystick Joystick(PTB10,PTB11,PTB16); N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); TMP102 tmp(I2C_SDA,I2C_SCL); //Piezo PwmOut piezo(PTC10); //serial Serial pc(USBTX,USBRX); // variables volatile int button_a_flag = 0; volatile int button_b_flag = 0; volatile int button_x_flag = 0; volatile int button_y_flag = 0; volatile int button_left_flag = 0; volatile int button_right_flag = 0; volatile int button_back_flag = 0; volatile int button_start_flag = 0; volatile int CwsHiSP = 20; volatile int HwsKaSP = 70; volatile int HwsLoLimSP = 50; volatile int CustomLoSP = 10; volatile int CustomLoSPChange = 0; volatile int CustomHiSP = 20; volatile int CustomHiSPChange = 0; // voids // functions that will be used in the code //void error(); void init_serial(); // sets up serial void init_K64F(); // sets up K64F void init_pcb(); // sets up the pcb // button voids void button_a_isr(); void button_b_isr(); void button_x_isr(); void button_y_isr(); void button_left_isr(); void button_right_isr(); void button_back_isr(); void button_start_isr(); // page voids void startup(); void cwshigh(); void codeloop(); void get_temp(); void CustHi_SP(); void CustLo_SP(); void ShowSP(); //State structure struct State { //Output Setpoint int output; //Time delay while in state float time; //Next states array and length int nextState[9]; }; int main() { // interrupts setup button_a.rise(&button_a_isr); button_b.rise(&button_b_isr); button_x.rise(&button_x_isr); button_y.rise(&button_y_isr); button_left.rise(&button_left_isr); button_right.rise(&button_right_isr); button_back.rise(&button_back_isr); button_start.rise(&button_start_isr); init_serial(); init_K64F(); init_pcb(); tmp.init(); lcd.init(); Joystick.init(); lcd.setContrast(1); lcd.setBrightness(0.5); startup(); codeloop(); } // initialise serial connection void init_serial() { pc.baud(9600); } void init_K64F() { boardled_red = 1; boardled_green = 1; boardled_blue = 1; sw2.mode(PullNone); sw3.mode(PullNone); } void init_pcb() { led_red1 = 1; led_red2 = 1; led_red3 = 1; led_green1 = 1; led_green2 = 1; led_green3 = 1; // active low LED's so off when = 1 // sets up the PCB Buttons button_a.mode(PullDown); button_b.mode(PullDown); button_x.mode(PullDown); button_y.mode(PullDown); button_left.mode(PullDown); button_right.mode(PullDown); button_start.mode(PullDown); button_back.mode(PullDown); } void startup() { lcd.printString("Lewis Cameron",0,0); lcd.printString("18689002",0,1); lcd.printString("Legionella",0,2); lcd.printString("Sensor",0,3); lcd.printString("w/ Custom SP",0,4); pc.printf("startup"); lcd.refresh(); wait(5); } void codeloop() { int page; while(1){ lcd.clear(); switch(page){ case 1: { init_pcb(); float temp = tmp.get_temperature(); lcd.clear(); lcd.printString("CWS",30,0); lcd.printString("Temp =",0,1); get_temp(); lcd.printString("Back = Home",0,5); pc.printf("CWS"); if (temp >= CwsHiSP){ lcd.printString("CWS Temp High",0,2); lcd.printString("Legionella",0,3); lcd.printString("Warning",0,4); led_red1 = 0; pc.printf("CWS High Temp"); } else if (temp < CwsHiSP){ lcd.printString("Temp OK",0,2); lcd.printString("No Danger",0,3); lcd.printString("Of Legionella",0,4); led_red1 = 1; pc.printf("CWS Temp OK"); } if (button_back_flag) { button_back_flag = 0; page = 0; } lcd.refresh(); } break; case 2: { init_pcb(); float temp = tmp.get_temperature(); lcd.clear(); lcd.printString("HWS",30,0); lcd.printString("Temp =",0,1); get_temp(); lcd.printString("Back = Home",0,5); if (HwsLoLimSP < temp & temp < HwsKaSP){ lcd.printString("Temp Raised",0,2); lcd.printString("Killing",0,3); lcd.printString("Legionella",0,4); led_green1 = 0; } else if (temp >= HwsKaSP){ lcd.printString("Temp Raised",0,2); lcd.printString("No Danger",0,3); lcd.printString("Of Legionella",0,4); led_green1 = 0; led_green2 = 0; } else if (temp < HwsLoLimSP){ lcd.printString("Temp Low",0,2); lcd.printString("Legionella",0,3); lcd.printString("Warning",0,4); led_red1 = 0; } if (button_back_flag) { button_back_flag = 0; page = 0; } lcd.refresh(); } break; case 3: { init_pcb(); float temp = tmp.get_temperature(); lcd.clear(); lcd.printString("Custom SP",15,0); lcd.printString("Temp =",0,1); get_temp(); CustHi_SP(); CustLo_SP(); ShowSP(); lcd.printString("Back = Home",0,5); if (CustomLoSP < temp & temp < CustomHiSP){ lcd.printString("Temp In Range",0,4); led_green1 = 0; } else if (temp > CustomHiSP){ lcd.printString("High Temp",0,4); led_red1 = 0; } else if (temp < CustomLoSP){ lcd.printString("Low Temp",0,4); led_red2 = 0; } if (button_back_flag) { button_back_flag = 0; page = 0; } lcd.refresh(); } break; case 4: { init_pcb(); lcd.clear(); lcd.printString("Info",26,0); lcd.printString("Legionella",0,1); lcd.printString("Detector",0,2); lcd.printString("Lewis Cameron",0,3); lcd.printString("18689002",0,4); lcd.printString("Back = Home",0,5); lcd.refresh(); if (button_back_flag) { button_back_flag = 0; page = 0; } } break; { default: init_pcb(); lcd.clear(); lcd.printString("Main Menu",15,0); lcd.printString("A = Cold Water",0,1); lcd.printString("B = Hot Water",0,2); lcd.printString("X = Custom SP",0,3); lcd.printString("Y = Info",0,4); lcd.refresh(); if (button_a_flag) { button_a_flag = 0; page = 1; pc.printf("A Pressed"); } if (button_b_flag) { button_b_flag = 0; page = 2; pc.printf("B Pressed"); } if (button_x_flag) { button_x_flag = 0; page = 3; pc.printf("X Pressed"); } if (button_y_flag) { button_y_flag = 0; page = 4; pc.printf("Y Pressed"); } } } } } void button_a_isr() { button_a_flag = 1; } void button_b_isr() { button_b_flag = 1; } void button_x_isr() { button_x_flag = 1; } void button_y_isr() { button_y_flag = 1; } void button_left_isr() { button_left_flag = 1; } void button_right_isr() { button_right_flag = 1; } void button_back_isr() { button_back_flag = 1; } void button_start_isr() { button_start_flag = 1; } void cwshigh() { lcd.printString("Water Temp Too High",0,3); led_red1 = 0; } void get_temp() { char buffer[14]; float temp = tmp.get_temperature(); int length = sprintf(buffer,"%.2f C",temp); //pc.printf("temp = %f K\n",temp); if (length <=14) lcd.printString(buffer,38,1); } void CustHi_SP() { Direction d = Joystick.get_direction(); if (d == W) { pc.printf("Joystick Left"); CustomHiSP = CustomHiSP - 1; wait(0.5); } if (d == E) { pc.printf("Joystick Right"); CustomHiSP = CustomHiSP + 1; wait(0.5); } } void CustLo_SP() { if (button_left_flag) { button_left_flag = 0; pc.printf("Left pressed"); CustomLoSP = CustomLoSP - 1; wait(0.5); } if (button_right_flag) { button_right_flag = 0; pc.printf("Right pressed"); CustomLoSP = CustomLoSP + 1; wait(0.5); } } void ShowSP() { char buffer[14]; int length = sprintf(buffer,"LoLimSP=%.2iC",CustomLoSP); if (length <= 14); { lcd.printString(buffer,0,3); } length = sprintf(buffer,"HiLimSP=%.2iC",CustomHiSP); if (length <= 14); { lcd.printString(buffer,0,2); } } void TMP102::error() { //Run start screens startup(); lcd.clear(); lcd.printString("TMP102",0,0); lcd.printString("Sensor Error",0,1); // If there is an error than flash led while(1) { printf("Temp sensor error \n"); led_red2 = 0; } }