Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

Committer:
louismarr
Date:
Fri Jan 21 14:37:17 2022 +0000
Revision:
15:73383333229d
Parent:
14:fa5f83f26ed7
Child:
23:655780ba2686
Rev 2.1;

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 13:70f02d5e56f5 32 Ticker joystickDelay;
louismarr 7:ef1dab708752 33
louismarr 7:ef1dab708752 34 DigitalOut RED_led(LED_RED); // On-board K64F LED'S
louismarr 7:ef1dab708752 35 DigitalOut GRN_led(LED_GREEN);
louismarr 7:ef1dab708752 36 DigitalOut BLU_led(LED_BLUE);
louismarr 7:ef1dab708752 37
louismarr 15:73383333229d 38 //DigitalOut Grn1(PTA1);
louismarr 15:73383333229d 39 //DigitalOut Grn2(PTA2);
louismarr 15:73383333229d 40 //DigitalOut Grn3(PTC2);
louismarr 15:73383333229d 41
louismarr 15:73383333229d 42 //DigitalOut Red1(PTD3);
louismarr 15:73383333229d 43 //DigitalOut Red2(PTC4);
louismarr 15:73383333229d 44 //DigitalOut Red3(PTC3);
louismarr 15:73383333229d 45
louismarr 7:ef1dab708752 46 InterruptIn sw2(SW2); // On-board K64F Switches
louismarr 5:138a91e25e1c 47 InterruptIn sw3(SW3);
louismarr 9:77a6ea988e01 48 InterruptIn R(PTB3); // Right Bumper Button
louismarr 9:77a6ea988e01 49 InterruptIn L(PTB18); // Left Bumper Button
louismarr 13:70f02d5e56f5 50 InterruptIn A(PTB9); // Right Bumper Button
louismarr 13:70f02d5e56f5 51 InterruptIn Y(PTC12); // Left Bumper Button
louismarr 0:f8a8c6a8a5c3 52
louismarr 9:77a6ea988e01 53 volatile int g_R_flag = 0; // g_ in order to show it is a global variable.
louismarr 9:77a6ea988e01 54 volatile int g_L_flag = 0; // volatile flag as it will change within the isr
louismarr 13:70f02d5e56f5 55 volatile int g_A_flag = 0; // g_ in order to show it is a global variable.
louismarr 13:70f02d5e56f5 56 volatile int g_Y_flag = 0;
louismarr 7:ef1dab708752 57 /*======================= Void Declaration ===================================*/
louismarr 7:ef1dab708752 58 void error(); // Error Hang Code Function
louismarr 7:ef1dab708752 59 void init_serial(); // Setup serial port Function
louismarr 7:ef1dab708752 60 void init_K64F(); // K64F Disabling Onboard Components Function
louismarr 9:77a6ea988e01 61 void R_isr();
louismarr 9:77a6ea988e01 62 void L_isr();
louismarr 13:70f02d5e56f5 63 void A_isr();
louismarr 13:70f02d5e56f5 64 void Y_isr();
louismarr 10:d98b2dd7ba09 65 void info();
louismarr 12:1c821d6d50f9 66 void temp_SP();
louismarr 14:fa5f83f26ed7 67 void MenuNav();
louismarr 13:70f02d5e56f5 68 void Page1();
louismarr 13:70f02d5e56f5 69 void Page2();
louismarr 1:5cdfc8d78097 70
louismarr 7:ef1dab708752 71 /*======================== Main Function =====================================*/
louismarr 0:f8a8c6a8a5c3 72 int main()
louismarr 0:f8a8c6a8a5c3 73 {
louismarr 6:117edd5dc0a0 74
louismarr 7:ef1dab708752 75 init_K64F(); // Initialise K64F Board
louismarr 7:ef1dab708752 76 init_serial(); // Initialise Serial Port
louismarr 7:ef1dab708752 77 tmp102.init(); // Initialise Temp Sensor
louismarr 7:ef1dab708752 78 lcd.init(); // Initialise LCD
louismarr 12:1c821d6d50f9 79 Joystick.init();
louismarr 15:73383333229d 80
louismarr 9:77a6ea988e01 81 lcd.setContrast(0.4); // Setup the contrast for the LCD Screen
louismarr 9:77a6ea988e01 82 R.fall(&R_isr);
louismarr 9:77a6ea988e01 83 R.mode(PullDown);
louismarr 9:77a6ea988e01 84
louismarr 9:77a6ea988e01 85 L.fall(&L_isr);
louismarr 9:77a6ea988e01 86 L.mode(PullDown);
louismarr 0:f8a8c6a8a5c3 87
louismarr 13:70f02d5e56f5 88 A.fall(&A_isr);
louismarr 13:70f02d5e56f5 89 A.mode(PullDown);
louismarr 13:70f02d5e56f5 90
louismarr 13:70f02d5e56f5 91 Y.fall(&Y_isr);
louismarr 13:70f02d5e56f5 92 Y.mode(PullDown);
louismarr 13:70f02d5e56f5 93
louismarr 12:1c821d6d50f9 94 while (1) {
louismarr 13:70f02d5e56f5 95
louismarr 14:fa5f83f26ed7 96 MenuNav(); // Call the info function
louismarr 13:70f02d5e56f5 97 Page1();
louismarr 13:70f02d5e56f5 98 Page2();
louismarr 13:70f02d5e56f5 99 temp_SP();
louismarr 13:70f02d5e56f5 100
louismarr 12:1c821d6d50f9 101
louismarr 0:f8a8c6a8a5c3 102 }
louismarr 13:70f02d5e56f5 103
louismarr 9:77a6ea988e01 104 }
louismarr 13:70f02d5e56f5 105
louismarr 5:138a91e25e1c 106
louismarr 7:ef1dab708752 107 /*
louismarr 7:ef1dab708752 108 =========================== Void Setup =========================================
louismarr 7:ef1dab708752 109 Custom Function's are called Void's, which are called upon inside the of the
louismarr 7:ef1dab708752 110 Main Function Code
louismarr 7:ef1dab708752 111 */
louismarr 0:f8a8c6a8a5c3 112
louismarr 0:f8a8c6a8a5c3 113 void init_serial() {
louismarr 9:77a6ea988e01 114 // Baud Rate Communication for CoolTerm Debugging
louismarr 7:ef1dab708752 115 serial.baud(9600);
louismarr 0:f8a8c6a8a5c3 116 }
louismarr 0:f8a8c6a8a5c3 117
louismarr 5:138a91e25e1c 118 void init_K64F()
louismarr 0:f8a8c6a8a5c3 119 {
louismarr 7:ef1dab708752 120 // on-board LEDs are active when 0, so setting the pin to 1 turns them off.
louismarr 7:ef1dab708752 121 RED_led = 1;
louismarr 7:ef1dab708752 122 GRN_led = 1;
louismarr 9:77a6ea988e01 123 BLU_led = 1;
louismarr 9:77a6ea988e01 124 /* since the on-board switches have external pull-ups, disable the
louismarr 9:77a6ea988e01 125 * internal pull-down resistors that are enabled by default using
louismarr 9:77a6ea988e01 126 * the InterruptIn Command */
louismarr 5:138a91e25e1c 127 sw2.mode(PullNone);
louismarr 5:138a91e25e1c 128 sw3.mode(PullNone);
louismarr 9:77a6ea988e01 129 }
louismarr 0:f8a8c6a8a5c3 130
louismarr 9:77a6ea988e01 131 void R_isr() // Right Bumper Interrupt Service
louismarr 9:77a6ea988e01 132 {
louismarr 9:77a6ea988e01 133 g_R_flag = 1; // set flag in ISR
louismarr 0:f8a8c6a8a5c3 134 }
louismarr 9:77a6ea988e01 135
louismarr 9:77a6ea988e01 136 void L_isr() // Left Bumper Interrupt Service
louismarr 9:77a6ea988e01 137 {
louismarr 9:77a6ea988e01 138 g_L_flag = 1; // set flag in ISR
louismarr 9:77a6ea988e01 139 }
louismarr 13:70f02d5e56f5 140 void A_isr() // Left Bumper Interrupt Service
louismarr 13:70f02d5e56f5 141 {
louismarr 13:70f02d5e56f5 142 g_A_flag = 1; // set flag in ISR
louismarr 13:70f02d5e56f5 143 }
louismarr 13:70f02d5e56f5 144 void Y_isr() // Left Bumper Interrupt Service
louismarr 13:70f02d5e56f5 145 {
louismarr 13:70f02d5e56f5 146 g_Y_flag = 1; // set flag in ISR
louismarr 13:70f02d5e56f5 147 }
louismarr 10:d98b2dd7ba09 148 void info()
louismarr 10:d98b2dd7ba09 149 {
louismarr 14:fa5f83f26ed7 150
louismarr 10:d98b2dd7ba09 151 serial.printf(" Information Page Selected "); // Debugging Print
louismarr 10:d98b2dd7ba09 152 lcd.clear(); // Clear Screen
louismarr 10:d98b2dd7ba09 153 lcd.printString("Info Page",0,0); // Print Information Screen
louismarr 10:d98b2dd7ba09 154 lcd.printString("Author:",0,1);
louismarr 10:d98b2dd7ba09 155 lcd.printString("Louis M",0,2);
louismarr 10:d98b2dd7ba09 156 lcd.printString("18689006",0,3);
louismarr 13:70f02d5e56f5 157 lcd.printString("Version 1.9.1",0,4);
louismarr 14:fa5f83f26ed7 158 lcd.refresh();
louismarr 14:fa5f83f26ed7 159 wait(1);
louismarr 12:1c821d6d50f9 160 }
louismarr 12:1c821d6d50f9 161 void Page1()
louismarr 7:ef1dab708752 162 {
louismarr 12:1c821d6d50f9 163 serial.printf(" Page 1 "); // Debugging Print
louismarr 12:1c821d6d50f9 164 lcd.clear(); // Clear Screen
louismarr 14:fa5f83f26ed7 165 lcd.printString("< Page 1 >",0,0); // Print Information Screen
louismarr 12:1c821d6d50f9 166 lcd.printString("Temperature",0,1);
louismarr 12:1c821d6d50f9 167 lcd.printString("Logging",0,2);
louismarr 14:fa5f83f26ed7 168 lcd.printString("Press A",0,3);
louismarr 14:fa5f83f26ed7 169
louismarr 13:70f02d5e56f5 170 lcd.refresh();
louismarr 14:fa5f83f26ed7 171 wait(1);
louismarr 9:77a6ea988e01 172 }
louismarr 12:1c821d6d50f9 173 void Page2()
louismarr 14:fa5f83f26ed7 174 {
louismarr 12:1c821d6d50f9 175 serial.printf(" Page 2 "); // Debugging Print
louismarr 12:1c821d6d50f9 176 lcd.clear(); // Clear Screen
louismarr 14:fa5f83f26ed7 177 lcd.printString("< Page 2 ",0,0); // Print Information Screen
louismarr 15:73383333229d 178 lcd.printString("Outside Air Mode",0,1);
louismarr 15:73383333229d 179 lcd.printString("=",0,2);
louismarr 14:fa5f83f26ed7 180 lcd.printString("Press A",0,3);
louismarr 14:fa5f83f26ed7 181
louismarr 13:70f02d5e56f5 182 lcd.refresh();
louismarr 14:fa5f83f26ed7 183 wait(1);
louismarr 14:fa5f83f26ed7 184 }
louismarr 12:1c821d6d50f9 185 void temp_SP()
louismarr 12:1c821d6d50f9 186 {
louismarr 13:70f02d5e56f5 187
louismarr 12:1c821d6d50f9 188 float T = tmp102.get_temperature(); // Reading Temperature as a floating variable
louismarr 12:1c821d6d50f9 189 float Set = SP * 100; // Reading Potentiometer as a floating variable. Multiplied by 100 to give larger range
louismarr 12:1c821d6d50f9 190
louismarr 12:1c821d6d50f9 191 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 192 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 193 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters)
louismarr 13:70f02d5e56f5 194 Direction d = Joystick.get_direction();
louismarr 12:1c821d6d50f9 195
louismarr 12:1c821d6d50f9 196 int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T
louismarr 12:1c821d6d50f9 197 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 198 lcd.printString(buffer,0,1); // display on screen
louismarr 12:1c821d6d50f9 199 serial.printf("T = %f C\n",T); // Printing the Temperature over Serial Port
louismarr 12:1c821d6d50f9 200
louismarr 12:1c821d6d50f9 201 length = sprintf(buffer,"SP=%.2F 'C",Set); // Print the Setpoint from the Float Variable Set
louismarr 12:1c821d6d50f9 202 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 12:1c821d6d50f9 203 lcd.printString(buffer,0,2); // display on screen
louismarr 12:1c821d6d50f9 204 serial.printf(" SP = %f", Set); //
louismarr 13:70f02d5e56f5 205 lcd.refresh();
louismarr 15:73383333229d 206 wait(10);
louismarr 12:1c821d6d50f9 207 if (Set < T){ // Condition to change over into new loop
louismarr 12:1c821d6d50f9 208 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 12:1c821d6d50f9 209 lcd.printString("Over Heating",3,2); // Print New Message
louismarr 12:1c821d6d50f9 210 serial.printf("OverTemp"); // Debugging Print
louismarr 13:70f02d5e56f5 211 lcd.refresh();
louismarr 15:73383333229d 212 if (g_Y_flag){ // Condition to change over into new loop
louismarr 15:73383333229d 213 g_Y_flag = 0; // When the R Flag has been pressed
louismarr 15:73383333229d 214 Y.rise(&Y_isr);
louismarr 15:73383333229d 215 serial.printf("Y Pressed");
louismarr 15:73383333229d 216 //Page1();
louismarr 15:73383333229d 217 wait(3);
louismarr 13:70f02d5e56f5 218 }
louismarr 14:fa5f83f26ed7 219
louismarr 15:73383333229d 220 }
louismarr 15:73383333229d 221 }
louismarr 14:fa5f83f26ed7 222 void MenuNav()
louismarr 14:fa5f83f26ed7 223 {
louismarr 15:73383333229d 224 lcd.clear();
louismarr 14:fa5f83f26ed7 225 lcd.refresh();
louismarr 14:fa5f83f26ed7 226
louismarr 14:fa5f83f26ed7 227 int select = 0;
louismarr 13:70f02d5e56f5 228 while (1){
louismarr 13:70f02d5e56f5 229
louismarr 14:fa5f83f26ed7 230
louismarr 13:70f02d5e56f5 231 //serial.printf("Direction = %i ",d);
louismarr 14:fa5f83f26ed7 232 Direction d = Joystick.get_direction();
louismarr 14:fa5f83f26ed7 233
louismarr 13:70f02d5e56f5 234 //while (1) {
louismarr 12:1c821d6d50f9 235 switch(select) {
louismarr 12:1c821d6d50f9 236 case 0:
louismarr 12:1c821d6d50f9 237 switch(d) {
louismarr 14:fa5f83f26ed7 238 case W:
louismarr 14:fa5f83f26ed7 239 wait(0.5);
louismarr 14:fa5f83f26ed7 240 select = 0;
louismarr 14:fa5f83f26ed7 241 serial.printf("LEFT.0");
louismarr 12:1c821d6d50f9 242 break;
louismarr 14:fa5f83f26ed7 243 case E:
louismarr 14:fa5f83f26ed7 244 wait(0.5);
louismarr 14:fa5f83f26ed7 245 select = 1;
louismarr 14:fa5f83f26ed7 246 serial.printf("RIGHT.0");
louismarr 12:1c821d6d50f9 247 break;
louismarr 12:1c821d6d50f9 248 }
louismarr 14:fa5f83f26ed7 249 break;
louismarr 12:1c821d6d50f9 250 case 1:
louismarr 12:1c821d6d50f9 251 switch(d) {
louismarr 14:fa5f83f26ed7 252 case W:
louismarr 14:fa5f83f26ed7 253 wait(0.5);
louismarr 14:fa5f83f26ed7 254 select = 0;
louismarr 14:fa5f83f26ed7 255 serial.printf("LEFT.1");
louismarr 12:1c821d6d50f9 256 break;
louismarr 14:fa5f83f26ed7 257 case E:
louismarr 14:fa5f83f26ed7 258 wait(0.5);
louismarr 14:fa5f83f26ed7 259 select = 2;
louismarr 14:fa5f83f26ed7 260 serial.printf("RIGHT.1");
louismarr 12:1c821d6d50f9 261 break;
louismarr 14:fa5f83f26ed7 262 }
louismarr 14:fa5f83f26ed7 263 break;
louismarr 12:1c821d6d50f9 264 case 2:
louismarr 12:1c821d6d50f9 265 switch(d) {
louismarr 14:fa5f83f26ed7 266 case W:
louismarr 14:fa5f83f26ed7 267 wait(0.5);
louismarr 14:fa5f83f26ed7 268 select = 1;
louismarr 14:fa5f83f26ed7 269 serial.printf("LEFT.2");
louismarr 12:1c821d6d50f9 270 break;
louismarr 14:fa5f83f26ed7 271 case E:
louismarr 14:fa5f83f26ed7 272 wait(0.5);
louismarr 14:fa5f83f26ed7 273 select = 2;
louismarr 14:fa5f83f26ed7 274 serial.printf("RIGHT.2");
louismarr 12:1c821d6d50f9 275 break;
louismarr 14:fa5f83f26ed7 276 }
louismarr 14:fa5f83f26ed7 277 break;
louismarr 12:1c821d6d50f9 278 }
louismarr 14:fa5f83f26ed7 279 wait(0.1);
louismarr 12:1c821d6d50f9 280
louismarr 12:1c821d6d50f9 281 if (select == 0){
louismarr 12:1c821d6d50f9 282 lcd.clear(); // Clear Screen
louismarr 14:fa5f83f26ed7 283 serial.printf("WelcomeMENU");
louismarr 14:fa5f83f26ed7 284 lcd.printString(" Navigate >",0,0);
louismarr 14:fa5f83f26ed7 285 lcd.printString(" Welcome ",0,2); // Print Information Screen
louismarr 14:fa5f83f26ed7 286 lcd.printString(" Main ",0,3);
louismarr 14:fa5f83f26ed7 287 lcd.printString(" Menu ",0,4);
louismarr 14:fa5f83f26ed7 288 lcd.printString(" Y for Info ",0,5);
louismarr 14:fa5f83f26ed7 289 lcd.refresh();
louismarr 14:fa5f83f26ed7 290 wait(1);
louismarr 14:fa5f83f26ed7 291 }
louismarr 14:fa5f83f26ed7 292 if (g_Y_flag){ // Condition to change over into new loop
louismarr 14:fa5f83f26ed7 293 g_Y_flag = 0; // When the R Flag has been pressed
louismarr 14:fa5f83f26ed7 294 Y.rise(&Y_isr);
louismarr 14:fa5f83f26ed7 295 serial.printf("Y Pressed");
louismarr 14:fa5f83f26ed7 296 info();
louismarr 12:1c821d6d50f9 297 }
louismarr 14:fa5f83f26ed7 298
louismarr 14:fa5f83f26ed7 299 if (select == 1){
louismarr 12:1c821d6d50f9 300 Page1();
louismarr 14:fa5f83f26ed7 301 if (g_A_flag){ // Condition to change over into new loop
louismarr 13:70f02d5e56f5 302 g_A_flag = 0; // When the R Flag has been pressed
louismarr 13:70f02d5e56f5 303 A.rise(&A_isr);
louismarr 13:70f02d5e56f5 304 serial.printf("A Pressed");
louismarr 14:fa5f83f26ed7 305 temp_SP();
louismarr 12:1c821d6d50f9 306 }
louismarr 14:fa5f83f26ed7 307 }
louismarr 14:fa5f83f26ed7 308
louismarr 14:fa5f83f26ed7 309 if (select == 2){
louismarr 12:1c821d6d50f9 310 Page2();
louismarr 14:fa5f83f26ed7 311 if (g_A_flag){ // Condition to change over into new loop
louismarr 13:70f02d5e56f5 312 g_A_flag = 0; // When the R Flag has been pressed
louismarr 13:70f02d5e56f5 313 A.rise(&A_isr);
louismarr 14:fa5f83f26ed7 314 serial.printf("Y Pressed");
louismarr 14:fa5f83f26ed7 315 info();
louismarr 14:fa5f83f26ed7 316 }
louismarr 12:1c821d6d50f9 317 }
louismarr 12:1c821d6d50f9 318 }
louismarr 14:fa5f83f26ed7 319 }
louismarr 15:73383333229d 320 //}
louismarr 13:70f02d5e56f5 321 void Menu()
louismarr 13:70f02d5e56f5 322 {
louismarr 13:70f02d5e56f5 323 if (g_R_flag){ // Condition to change over into new loop
louismarr 13:70f02d5e56f5 324 g_R_flag = 0; // When the R Flag has been pressed
louismarr 13:70f02d5e56f5 325 R.rise(&R_isr);
louismarr 13:70f02d5e56f5 326
louismarr 13:70f02d5e56f5 327 lcd.clear(); // Clear Screen
louismarr 13:70f02d5e56f5 328 serial.printf("Welcome");
louismarr 13:70f02d5e56f5 329 lcd.printString(" Welcome ",0,1); // Print Information Screen
louismarr 13:70f02d5e56f5 330 lcd.printString("Main Menu",0,3);
louismarr 13:70f02d5e56f5 331 lcd.printString("Page Down",0,5);
louismarr 13:70f02d5e56f5 332 lcd.refresh();
louismarr 13:70f02d5e56f5 333 wait(1);
louismarr 13:70f02d5e56f5 334 }
louismarr 13:70f02d5e56f5 335 }