![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Rev 1.6 - Sample Period Work in progress
Dependencies: mbed Bitmap N5110 TMP102 Joystick
main.cpp
- Committer:
- louismarr
- Date:
- 2022-01-16
- Revision:
- 13:70f02d5e56f5
- Parent:
- 12:1c821d6d50f9
- Child:
- 14:fa5f83f26ed7
File content as of revision 13:70f02d5e56f5:
/* Acknowledgements to (c) Craig A. Evans, University of Leeds, Feb 2016 for Temp Library Acknowledgements to (c) Dr. Edmond Nurellari, University of Lincoln, Dec 2021 for Classes used Using Various Libraries & Functions in order to create a Temperature Based Health Assistive Smart Device */ /* ======================== Library Imports ======================================= Importing the Header Files from the Class Libraries into the main.cpp */ #include "mbed.h" // Mbed OS Library #include "TMP102.h" // TMP102 Header File #include "N5110.h" // N5110 Header File #include "Bitmap.h" // Bitmap Header File #include "Joystick.h" // Joystick Header File /* ========================== Vairable Setup ====================================== Pre-Determining the various Variable names to hardware pins on the K64F Board */ TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // Create lcd objec Serial serial(USBTX,USBRX); // CoolTerm TX, RX Comms Setup for Debug AnalogIn SP(PTB2); // Potentiometer for Setpoint Joystick Joystick(PTB10,PTB11,PTC16); // Create Joystick (PTB10 = Up/Down) (PTB11 = L/R) (PTB16 = Button) //Timer timer(); // USE FOR LOGGING BETWEEN 0-10s Ticker joystickDelay; DigitalOut RED_led(LED_RED); // On-board K64F LED'S DigitalOut GRN_led(LED_GREEN); DigitalOut BLU_led(LED_BLUE); InterruptIn sw2(SW2); // On-board K64F Switches InterruptIn sw3(SW3); InterruptIn R(PTB3); // Right Bumper Button InterruptIn L(PTB18); // Left Bumper Button InterruptIn A(PTB9); // Right Bumper Button InterruptIn Y(PTC12); // Left Bumper Button volatile int g_R_flag = 0; // g_ in order to show it is a global variable. volatile int g_L_flag = 0; // volatile flag as it will change within the isr volatile int g_A_flag = 0; // g_ in order to show it is a global variable. volatile int g_Y_flag = 0; /*======================= Void Declaration ===================================*/ void error(); // Error Hang Code Function void init_serial(); // Setup serial port Function void init_K64F(); // K64F Disabling Onboard Components Function void R_isr(); void L_isr(); void A_isr(); void Y_isr(); void info(); void temp_SP(); void Menu(); void Page1(); void Page2(); /*======================== Main Function =====================================*/ int main() { init_K64F(); // Initialise K64F Board init_serial(); // Initialise Serial Port tmp102.init(); // Initialise Temp Sensor lcd.init(); // Initialise LCD Joystick.init(); lcd.setContrast(0.4); // Setup the contrast for the LCD Screen R.fall(&R_isr); R.mode(PullDown); L.fall(&L_isr); L.mode(PullDown); A.fall(&A_isr); A.mode(PullDown); Y.fall(&Y_isr); Y.mode(PullDown); while (1) { //timer.start(); //for(i = 0; i < 10; i++){ // read temperature and print over serial port Menu(); // Call the info function Page1(); Page2(); temp_SP(); } } /* =========================== Void Setup ========================================= Custom Function's are called Void's, which are called upon inside the of the Main Function Code */ void init_serial() { // Baud Rate Communication for CoolTerm Debugging serial.baud(9600); } void init_K64F() { // on-board LEDs are active when 0, so setting the pin to 1 turns them off. RED_led = 1; GRN_led = 1; BLU_led = 1; /* since the on-board switches have external pull-ups, disable the * internal pull-down resistors that are enabled by default using * the InterruptIn Command */ sw2.mode(PullNone); sw3.mode(PullNone); } void R_isr() // Right Bumper Interrupt Service { g_R_flag = 1; // set flag in ISR } void L_isr() // Left Bumper Interrupt Service { g_L_flag = 1; // set flag in ISR } void A_isr() // Left Bumper Interrupt Service { g_A_flag = 1; // set flag in ISR } void Y_isr() // Left Bumper Interrupt Service { g_Y_flag = 1; // set flag in ISR } void info() { if (g_R_flag){ // Condition to change over into new loop g_R_flag = 0; // When the R Flag has been pressed R.rise(&R_isr); serial.printf(" Information Page Selected "); // Debugging Print lcd.clear(); // Clear Screen lcd.printString("Info Page",0,0); // Print Information Screen lcd.printString("Author:",0,1); lcd.printString("Louis M",0,2); lcd.printString("18689006",0,3); lcd.printString("Version 1.9.1",0,4); } } void Page1() { if (g_Y_flag){ // Condition to change over into new loop g_Y_flag = 0; Y.fall(&Y_isr);{ serial.printf(" Page 1 "); // Debugging Print lcd.clear(); // Clear Screen lcd.printString(" Page 1 ",0,0); // Print Information Screen lcd.printString("Temperature",0,1); lcd.printString("Logging",0,2); lcd.printString("Press L",0,3); lcd.printString("Page Down A",0,5); lcd.refresh(); wait(1); } } } void Page2() { if (g_A_flag){ // Condition to change over into new loop g_A_flag = 0; // When the R Flag has been pressed A.rise(&A_isr); serial.printf(" Page 2 "); // Debugging Print lcd.clear(); // Clear Screen lcd.printString(" Page 2 ",0,1); // Print Information Screen lcd.printString("Blood Pressure",0,2); lcd.printString("Logging",0,3); lcd.printString("Press A",0,5); lcd.printString("Page Up Y",0,0); lcd.refresh(); wait(1);} } void temp_SP() { float T = tmp102.get_temperature(); // Reading Temperature as a floating variable float Set = SP * 100; // Reading Potentiometer as a floating variable. Multiplied by 100 to give larger range //serial.printf("%2.2fs: %3.1f deg C\n\r", timer.read(), T); if (g_L_flag){ // Condition to change over into new loop g_L_flag = 0; L.fall(&L_isr); //if (T > Set){ lcd.clear(); // clearing the LCD buffer at the begining of the loop 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) char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters) Direction d = Joystick.get_direction(); float B = 0; if (1){ float BP = B + 1; serial.printf("BP = i%",BP); } // Therefor strings csn not exceed the 14 Character Limit int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0) lcd.printString(buffer,0,1); // display on screen serial.printf("T = %f C\n",T); // Printing the Temperature over Serial Port length = sprintf(buffer,"SP=%.2F 'C",Set); // Print the Setpoint from the Float Variable Set if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0) lcd.printString(buffer,0,2); // display on screen serial.printf(" SP = %f", Set); // lcd.refresh(); wait(1); if (Set < T){ // Condition to change over into new loop lcd.clear(); // clearing the LCD buffer at the begining of the loop lcd.printString("Over Heating",3,2); // Print New Message serial.printf("OverTemp"); // Debugging Print lcd.refresh(); wait(1); } } } /*void Menu() { while (1){ Direction d = Joystick.get_direction(); //serial.printf("Direction = %i ",d); joystickDelay.attach(d,0.10); int select = 0; //while (1) { switch(select) { case 0: switch(d) { case 1: select = 1; serial.printf("UP"); break; case 5: select = 2; serial.printf("DOWN"); break; } //break; case 1: switch(d) { case 1: select = 2; serial.printf("UP"); break; case 5: select = 0; serial.printf("DOWN"); break; case 2: switch(d) { case 1: select = 0; serial.printf("UP"); break; case 5: select = 1; serial.printf("DOWN"); break; } wait(1); if (select == 0){ lcd.clear(); // Clear Screen serial.printf("Welcome"); lcd.printString(" Welcome ",0,1); // Print Information Screen lcd.printString("Main Menu",0,3); lcd.printString("Page Down",0,5); } if (g_A_flag){ // Condition to change over into new loop g_A_flag = 0; // When the R Flag has been pressed A.rise(&A_isr); serial.printf("A Pressed"); } else if (select == 1){ serial.printf("Page1"); Page1(); if (g_A_flag){ // Condition to change over into new loop g_A_flag = 0; // When the R Flag has been pressed A.rise(&A_isr); serial.printf("A Pressed"); } else if (select == 2){ serial.printf("Page2"); Page2(); if (g_A_flag){ // Condition to change over into new loop g_A_flag = 0; // When the R Flag has been pressed A.rise(&A_isr); serial.printf("A Pressed"); } } } } } */ void Menu() { if (g_R_flag){ // Condition to change over into new loop g_R_flag = 0; // When the R Flag has been pressed R.rise(&R_isr); lcd.clear(); // Clear Screen serial.printf("Welcome"); lcd.printString(" Welcome ",0,1); // Print Information Screen lcd.printString("Main Menu",0,3); lcd.printString("Page Down",0,5); lcd.refresh(); wait(1); } } /*void BP() { Direction d = Joystick.get_direction(); float BP = 0; if (d = 1){ BP + 1; serial.printf("BP = i%",BP); } */