Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

Committer:
louismarr
Date:
Sat Jan 15 19:39:12 2022 +0000
Revision:
12:1c821d6d50f9
Parent:
11:d8bd197a5e7b
Child:
13:70f02d5e56f5
V1.9

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 7:ef1dab708752 32
louismarr 7:ef1dab708752 33 DigitalOut RED_led(LED_RED); // On-board K64F LED'S
louismarr 7:ef1dab708752 34 DigitalOut GRN_led(LED_GREEN);
louismarr 7:ef1dab708752 35 DigitalOut BLU_led(LED_BLUE);
louismarr 7:ef1dab708752 36
louismarr 7:ef1dab708752 37 InterruptIn sw2(SW2); // On-board K64F Switches
louismarr 5:138a91e25e1c 38 InterruptIn sw3(SW3);
louismarr 9:77a6ea988e01 39 InterruptIn R(PTB3); // Right Bumper Button
louismarr 9:77a6ea988e01 40 InterruptIn L(PTB18); // Left Bumper Button
louismarr 0:f8a8c6a8a5c3 41
louismarr 9:77a6ea988e01 42 volatile int g_R_flag = 0; // g_ in order to show it is a global variable.
louismarr 9:77a6ea988e01 43 volatile int g_L_flag = 0; // volatile flag as it will change within the isr
louismarr 8:9c5ef970de26 44
louismarr 7:ef1dab708752 45 /*======================= Void Declaration ===================================*/
louismarr 7:ef1dab708752 46 void error(); // Error Hang Code Function
louismarr 7:ef1dab708752 47 void init_serial(); // Setup serial port Function
louismarr 7:ef1dab708752 48 void init_K64F(); // K64F Disabling Onboard Components Function
louismarr 9:77a6ea988e01 49 void R_isr();
louismarr 9:77a6ea988e01 50 void L_isr();
louismarr 10:d98b2dd7ba09 51 void info();
louismarr 12:1c821d6d50f9 52 void temp_SP();
louismarr 1:5cdfc8d78097 53
louismarr 7:ef1dab708752 54 /*======================== Main Function =====================================*/
louismarr 0:f8a8c6a8a5c3 55 int main()
louismarr 0:f8a8c6a8a5c3 56 {
louismarr 6:117edd5dc0a0 57
louismarr 7:ef1dab708752 58 init_K64F(); // Initialise K64F Board
louismarr 7:ef1dab708752 59 init_serial(); // Initialise Serial Port
louismarr 7:ef1dab708752 60 tmp102.init(); // Initialise Temp Sensor
louismarr 7:ef1dab708752 61 lcd.init(); // Initialise LCD
louismarr 12:1c821d6d50f9 62 Joystick.init();
louismarr 7:ef1dab708752 63
louismarr 9:77a6ea988e01 64 lcd.setContrast(0.4); // Setup the contrast for the LCD Screen
louismarr 9:77a6ea988e01 65 R.fall(&R_isr);
louismarr 9:77a6ea988e01 66 R.mode(PullDown);
louismarr 9:77a6ea988e01 67
louismarr 9:77a6ea988e01 68 L.fall(&L_isr);
louismarr 9:77a6ea988e01 69 L.mode(PullDown);
louismarr 0:f8a8c6a8a5c3 70
louismarr 12:1c821d6d50f9 71 while (1) {
louismarr 8:9c5ef970de26 72 //timer.start();
louismarr 8:9c5ef970de26 73 //for(i = 0; i < 10; i++){
louismarr 5:138a91e25e1c 74 // read temperature and print over serial port
louismarr 12:1c821d6d50f9 75
louismarr 12:1c821d6d50f9 76 if (g_R_flag){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 77 g_R_flag = 0; // When the R Flag has been pressed
louismarr 12:1c821d6d50f9 78 R.rise(&R_isr);
louismarr 12:1c821d6d50f9 79 info(); // Call the info function
louismarr 10:d98b2dd7ba09 80 }
louismarr 10:d98b2dd7ba09 81 lcd.refresh();
louismarr 10:d98b2dd7ba09 82 wait(1.0);
louismarr 10:d98b2dd7ba09 83
louismarr 9:77a6ea988e01 84 if (g_L_flag){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 85 g_L_flag = 0;
louismarr 12:1c821d6d50f9 86 L.fall(&L_isr);
louismarr 12:1c821d6d50f9 87 temp_SP();
louismarr 9:77a6ea988e01 88 lcd.refresh();
louismarr 9:77a6ea988e01 89 wait(1.0);
louismarr 12:1c821d6d50f9 90
louismarr 0:f8a8c6a8a5c3 91 }
louismarr 9:77a6ea988e01 92 }
louismarr 9:77a6ea988e01 93 }
louismarr 5:138a91e25e1c 94
louismarr 7:ef1dab708752 95 /*
louismarr 7:ef1dab708752 96 =========================== Void Setup =========================================
louismarr 7:ef1dab708752 97 Custom Function's are called Void's, which are called upon inside the of the
louismarr 7:ef1dab708752 98 Main Function Code
louismarr 7:ef1dab708752 99 */
louismarr 0:f8a8c6a8a5c3 100
louismarr 0:f8a8c6a8a5c3 101 void init_serial() {
louismarr 9:77a6ea988e01 102 // Baud Rate Communication for CoolTerm Debugging
louismarr 7:ef1dab708752 103 serial.baud(9600);
louismarr 0:f8a8c6a8a5c3 104 }
louismarr 0:f8a8c6a8a5c3 105
louismarr 5:138a91e25e1c 106 void init_K64F()
louismarr 0:f8a8c6a8a5c3 107 {
louismarr 7:ef1dab708752 108 // on-board LEDs are active when 0, so setting the pin to 1 turns them off.
louismarr 7:ef1dab708752 109 RED_led = 1;
louismarr 7:ef1dab708752 110 GRN_led = 1;
louismarr 9:77a6ea988e01 111 BLU_led = 1;
louismarr 9:77a6ea988e01 112 /* since the on-board switches have external pull-ups, disable the
louismarr 9:77a6ea988e01 113 * internal pull-down resistors that are enabled by default using
louismarr 9:77a6ea988e01 114 * the InterruptIn Command */
louismarr 5:138a91e25e1c 115 sw2.mode(PullNone);
louismarr 5:138a91e25e1c 116 sw3.mode(PullNone);
louismarr 9:77a6ea988e01 117 }
louismarr 0:f8a8c6a8a5c3 118
louismarr 9:77a6ea988e01 119 void R_isr() // Right Bumper Interrupt Service
louismarr 9:77a6ea988e01 120 {
louismarr 9:77a6ea988e01 121 g_R_flag = 1; // set flag in ISR
louismarr 0:f8a8c6a8a5c3 122 }
louismarr 9:77a6ea988e01 123
louismarr 9:77a6ea988e01 124 void L_isr() // Left Bumper Interrupt Service
louismarr 9:77a6ea988e01 125 {
louismarr 9:77a6ea988e01 126 g_L_flag = 1; // set flag in ISR
louismarr 9:77a6ea988e01 127 }
louismarr 10:d98b2dd7ba09 128 void info()
louismarr 10:d98b2dd7ba09 129 {
louismarr 10:d98b2dd7ba09 130 serial.printf(" Information Page Selected "); // Debugging Print
louismarr 10:d98b2dd7ba09 131 lcd.clear(); // Clear Screen
louismarr 10:d98b2dd7ba09 132 lcd.printString("Info Page",0,0); // Print Information Screen
louismarr 10:d98b2dd7ba09 133 lcd.printString("Author:",0,1);
louismarr 10:d98b2dd7ba09 134 lcd.printString("Louis M",0,2);
louismarr 10:d98b2dd7ba09 135 lcd.printString("18689006",0,3);
louismarr 12:1c821d6d50f9 136 lcd.printString("Version 1.9",0,4);
louismarr 10:d98b2dd7ba09 137
louismarr 12:1c821d6d50f9 138 }
louismarr 12:1c821d6d50f9 139 void Page1()
louismarr 7:ef1dab708752 140 {
louismarr 12:1c821d6d50f9 141 serial.printf(" Page 1 "); // Debugging Print
louismarr 12:1c821d6d50f9 142 lcd.clear(); // Clear Screen
louismarr 12:1c821d6d50f9 143 lcd.printString(" Page 1 ",0,0); // Print Information Screen
louismarr 12:1c821d6d50f9 144 lcd.printString("Temperature",0,1);
louismarr 12:1c821d6d50f9 145 lcd.printString("Logging",0,2);
louismarr 12:1c821d6d50f9 146 lcd.printString("Press A",0,3);
louismarr 12:1c821d6d50f9 147 lcd.printString("Page Down",0,5);
louismarr 7:ef1dab708752 148
louismarr 9:77a6ea988e01 149 }
louismarr 12:1c821d6d50f9 150 void Page2()
louismarr 12:1c821d6d50f9 151 {
louismarr 12:1c821d6d50f9 152 serial.printf(" Page 2 "); // Debugging Print
louismarr 12:1c821d6d50f9 153 lcd.clear(); // Clear Screen
louismarr 12:1c821d6d50f9 154 lcd.printString(" Page 2 ",0,1); // Print Information Screen
louismarr 12:1c821d6d50f9 155 lcd.printString("Blood Pressure",0,2);
louismarr 12:1c821d6d50f9 156 lcd.printString("Logging",0,3);
louismarr 12:1c821d6d50f9 157 lcd.printString("Press A",0,5);
louismarr 12:1c821d6d50f9 158 lcd.printString("Page Up",0,0);
louismarr 12:1c821d6d50f9 159
louismarr 12:1c821d6d50f9 160 }
louismarr 12:1c821d6d50f9 161 void temp_SP()
louismarr 12:1c821d6d50f9 162 {
louismarr 12:1c821d6d50f9 163 float T = tmp102.get_temperature(); // Reading Temperature as a floating variable
louismarr 12:1c821d6d50f9 164 float Set = SP * 100; // Reading Potentiometer as a floating variable. Multiplied by 100 to give larger range
louismarr 12:1c821d6d50f9 165
louismarr 12:1c821d6d50f9 166 //serial.printf("%2.2fs: %3.1f deg C\n\r", timer.read(), T);
louismarr 12:1c821d6d50f9 167
louismarr 12:1c821d6d50f9 168 //if (T > Set){
louismarr 12:1c821d6d50f9 169 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 170 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 171 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters)
louismarr 12:1c821d6d50f9 172 // Therefor strings csn not exceed the 14 Character Limit
louismarr 12:1c821d6d50f9 173
louismarr 12:1c821d6d50f9 174 int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T
louismarr 12:1c821d6d50f9 175 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 176 lcd.printString(buffer,0,1); // display on screen
louismarr 12:1c821d6d50f9 177 serial.printf("T = %f C\n",T); // Printing the Temperature over Serial Port
louismarr 12:1c821d6d50f9 178
louismarr 12:1c821d6d50f9 179 length = sprintf(buffer,"SP=%.2F 'C",Set); // Print the Setpoint from the Float Variable Set
louismarr 12:1c821d6d50f9 180 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 181 lcd.printString(buffer,0,2); // display on screen
louismarr 12:1c821d6d50f9 182 serial.printf(" SP = %f", Set); //
louismarr 12:1c821d6d50f9 183
louismarr 12:1c821d6d50f9 184 if (Set < T){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 185 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 186 lcd.printString("Over Heating",3,2); // Print New Message
louismarr 12:1c821d6d50f9 187 serial.printf("OverTemp"); // Debugging Print
louismarr 12:1c821d6d50f9 188 }
louismarr 12:1c821d6d50f9 189 }
louismarr 12:1c821d6d50f9 190 void init_Menu()
louismarr 12:1c821d6d50f9 191 {
louismarr 12:1c821d6d50f9 192 Joystick.init();
louismarr 12:1c821d6d50f9 193 Direction d = Joystick.get_direction();
louismarr 12:1c821d6d50f9 194 serial.printf("Direction = %i/n ",d);
louismarr 12:1c821d6d50f9 195
louismarr 12:1c821d6d50f9 196 int select = 0;
louismarr 12:1c821d6d50f9 197 while (1) {
louismarr 12:1c821d6d50f9 198 switch(select) {
louismarr 12:1c821d6d50f9 199 case 0:
louismarr 12:1c821d6d50f9 200 switch(d) {
louismarr 12:1c821d6d50f9 201 case N:
louismarr 12:1c821d6d50f9 202 select = 1;
louismarr 12:1c821d6d50f9 203 serial.printf("UP");
louismarr 12:1c821d6d50f9 204 break;
louismarr 12:1c821d6d50f9 205 case S:
louismarr 12:1c821d6d50f9 206 select = 2;
louismarr 12:1c821d6d50f9 207 serial.printf("DOWN");
louismarr 12:1c821d6d50f9 208 break;
louismarr 12:1c821d6d50f9 209 }
louismarr 12:1c821d6d50f9 210 break;
louismarr 12:1c821d6d50f9 211 case 1:
louismarr 12:1c821d6d50f9 212 switch(d) {
louismarr 12:1c821d6d50f9 213 case N:
louismarr 12:1c821d6d50f9 214 select = 2;
louismarr 12:1c821d6d50f9 215 serial.printf("UP");
louismarr 12:1c821d6d50f9 216 break;
louismarr 12:1c821d6d50f9 217 case S:
louismarr 12:1c821d6d50f9 218 select = 0;
louismarr 12:1c821d6d50f9 219 serial.printf("DOWN");
louismarr 12:1c821d6d50f9 220 break;
louismarr 12:1c821d6d50f9 221 case 2:
louismarr 12:1c821d6d50f9 222 switch(d) {
louismarr 12:1c821d6d50f9 223 case N:
louismarr 12:1c821d6d50f9 224 select = 0;
louismarr 12:1c821d6d50f9 225 serial.printf("UP");
louismarr 12:1c821d6d50f9 226 break;
louismarr 12:1c821d6d50f9 227 case S:
louismarr 12:1c821d6d50f9 228 select = 1;
louismarr 12:1c821d6d50f9 229 serial.printf("DOWN");
louismarr 12:1c821d6d50f9 230 break;
louismarr 12:1c821d6d50f9 231 }
louismarr 12:1c821d6d50f9 232 wait(1);
louismarr 12:1c821d6d50f9 233
louismarr 12:1c821d6d50f9 234 if (select == 0){
louismarr 12:1c821d6d50f9 235 lcd.clear(); // Clear Screen
louismarr 12:1c821d6d50f9 236 serial.printf("Welcome");
louismarr 12:1c821d6d50f9 237 lcd.printString(" Welcome ",0,1); // Print Information Screen
louismarr 12:1c821d6d50f9 238 lcd.printString("Main Menu",0,3);
louismarr 12:1c821d6d50f9 239 lcd.printString("Page Down",0,5);
louismarr 12:1c821d6d50f9 240 }
louismarr 12:1c821d6d50f9 241 if (g_R_flag){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 242 g_R_flag = 0; // When the R Flag has been pressed
louismarr 12:1c821d6d50f9 243 R.rise(&R_isr);
louismarr 12:1c821d6d50f9 244 serial.printf("R Pressed");
louismarr 12:1c821d6d50f9 245 }
louismarr 12:1c821d6d50f9 246 else if (select == 1){
louismarr 12:1c821d6d50f9 247 serial.printf("Page1");
louismarr 12:1c821d6d50f9 248 Page1();
louismarr 12:1c821d6d50f9 249 }
louismarr 12:1c821d6d50f9 250 if (g_R_flag){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 251 g_R_flag = 0; // When the R Flag has been pressed
louismarr 12:1c821d6d50f9 252 R.rise(&R_isr);
louismarr 12:1c821d6d50f9 253 serial.printf("R Pressed");
louismarr 12:1c821d6d50f9 254 }
louismarr 12:1c821d6d50f9 255 else if (select == 2){
louismarr 12:1c821d6d50f9 256 serial.printf("Page2");
louismarr 12:1c821d6d50f9 257 Page2();
louismarr 12:1c821d6d50f9 258 }
louismarr 12:1c821d6d50f9 259
louismarr 12:1c821d6d50f9 260 }
louismarr 12:1c821d6d50f9 261 }
louismarr 12:1c821d6d50f9 262 }
louismarr 12:1c821d6d50f9 263 }