Working Menu, additions to be made

Dependencies:   mbed

Committer:
jackmcgarley
Date:
Fri Feb 04 17:50:48 2022 +0000
Revision:
13:f2dad2365841
Parent:
12:988bacb1c2a6
Child:
14:ef54ca605b6f
Live data displaying temp;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jackmcgarley 7:51c21f7f6f12 1 /*
jackmcgarley 4:143487eef742 2 * Author - Jack McGarley - 18689007
jackmcgarley 4:143487eef742 3 * Date - January 2022
jackmcgarley 7:51c21f7f6f12 4 * Acknowledgements
jackmcgarley 4:143487eef742 5 * Craig A. Evans, University of Leeds, TMP102 Library, Feb 2016
jackmcgarley 4:143487eef742 6 * Dr Edmond Nurellari, University of Lincoln, Joystick & N5110 Libraries
jackmcgarley 7:51c21f7f6f12 7 */
25574069 1:a87075699085 8
jackmcgarley 4:143487eef742 9 #include "mbed.h" // include the library header, ensure the library has been imported into the project
jackmcgarley 7:51c21f7f6f12 10 #include "Joystick.h"
25574069 2:d3676e11e2c6 11 #include "TMP102.h"
jackmcgarley 4:143487eef742 12 #include "N5110.h"
25574069 0:d4d7e882c87d 13
jackmcgarley 4:143487eef742 14 DigitalOut grn_led1(PTA1); // Designating LEDs from left to right
jackmcgarley 4:143487eef742 15 DigitalOut grn_led2(PTA2);
jackmcgarley 4:143487eef742 16 DigitalOut grn_led3(PTC2);
jackmcgarley 4:143487eef742 17 DigitalOut red_led1(PTC3);
jackmcgarley 4:143487eef742 18 DigitalOut red_led2(PTC4);
jackmcgarley 4:143487eef742 19 DigitalOut red_led3(PTD3);
25574069 0:d4d7e882c87d 20
jackmcgarley 4:143487eef742 21 DigitalIn button_A(PTB9); // Designating Buttons
jackmcgarley 13:f2dad2365841 22 //DigitalIn B(PTD0);
jackmcgarley 4:143487eef742 23 DigitalIn button_X(PTC17);
jackmcgarley 4:143487eef742 24 DigitalIn button_Y(PTC12);
jackmcgarley 4:143487eef742 25 DigitalIn button_L(PTB18);
jackmcgarley 4:143487eef742 26 DigitalIn button_R(PTB3);
jackmcgarley 7:51c21f7f6f12 27 InterruptIn button_back(PTB19);
jackmcgarley 7:51c21f7f6f12 28 InterruptIn button_start(PTC5);
jackmcgarley 7:51c21f7f6f12 29
jackmcgarley 4:143487eef742 30 TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object
25574069 0:d4d7e882c87d 31
jackmcgarley 7:51c21f7f6f12 32 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); //Designating N5110 Display
jackmcgarley 4:143487eef742 33
jackmcgarley 4:143487eef742 34 Joystick joystick(PTB10,PTB11,PTC16); //Designating Joystick
25574069 0:d4d7e882c87d 35
jackmcgarley 4:143487eef742 36 Serial pc(USBTX,USBRX); // UART connection for PC
jackmcgarley 7:51c21f7f6f12 37
jackmcgarley 4:143487eef742 38 InterruptIn sw2(SW2); // K64F on-board switches
jackmcgarley 4:143487eef742 39 InterruptIn sw3(SW3);
jackmcgarley 7:51c21f7f6f12 40 InterruptIn buttonStart(PTC5);
jackmcgarley 13:f2dad2365841 41 InterruptIn B(PTD0);
jackmcgarley 7:51c21f7f6f12 42
jackmcgarley 7:51c21f7f6f12 43 DigitalOut r_led(LED_RED); // K64F on-board LEDs
jackmcgarley 5:bec67fb2b2f9 44 DigitalOut g_led(LED_GREEN);
jackmcgarley 4:143487eef742 45 DigitalOut b_led(LED_BLUE);
jackmcgarley 7:51c21f7f6f12 46
jackmcgarley 11:f1a6cced30cf 47 /** Declare voids before using in the code
jackmcgarley 11:f1a6cced30cf 48 */
jackmcgarley 7:51c21f7f6f12 49 void buttonStart_isr(); // Button Start interrupt service routine
jackmcgarley 7:51c21f7f6f12 50
jackmcgarley 7:51c21f7f6f12 51 void button_start_isr();
jackmcgarley 7:51c21f7f6f12 52
jackmcgarley 13:f2dad2365841 53 void B_isr();
jackmcgarley 13:f2dad2365841 54
jackmcgarley 13:f2dad2365841 55 void init_buttons(); // Initialise buttons
jackmcgarley 7:51c21f7f6f12 56
jackmcgarley 4:143487eef742 57 void error(); // error function hangs flashing an LED
jackmcgarley 4:143487eef742 58
jackmcgarley 4:143487eef742 59 void init_serial(); // Setting up the serial port
25574069 0:d4d7e882c87d 60
jackmcgarley 4:143487eef742 61 void init_K64F(); // Setting up the on-board LEDs and switches
25574069 0:d4d7e882c87d 62
jackmcgarley 12:988bacb1c2a6 63 void init_leds(); // Setting up the LEDs
jackmcgarley 5:bec67fb2b2f9 64
jackmcgarley 12:988bacb1c2a6 65 void welcome(); // Setting up welcome screen
jackmcgarley 8:811fe7529732 66
jackmcgarley 12:988bacb1c2a6 67 void startup(); // Setting up startup
jackmcgarley 5:bec67fb2b2f9 68
jackmcgarley 13:f2dad2365841 69 void display_tmp(); // Tempertature display
jackmcgarley 13:f2dad2365841 70
jackmcgarley 13:f2dad2365841 71 volatile int S_flag; // Global Variables
jackmcgarley 13:f2dad2365841 72
jackmcgarley 13:f2dad2365841 73 volatile int g_buttonStart_flag = 0;
jackmcgarley 13:f2dad2365841 74
jackmcgarley 13:f2dad2365841 75 volatile int g_buttonBack_flag = 0;
jackmcgarley 13:f2dad2365841 76
jackmcgarley 13:f2dad2365841 77 volatile int g_B_flag = 0;
jackmcgarley 8:811fe7529732 78
jackmcgarley 4:143487eef742 79 int main()
jackmcgarley 4:143487eef742 80 {
jackmcgarley 7:51c21f7f6f12 81 button_start.mode(PullDown);
jackmcgarley 7:51c21f7f6f12 82 button_start.rise(button_start_isr);
jackmcgarley 13:f2dad2365841 83 B.fall(&B_isr);
jackmcgarley 13:f2dad2365841 84 B.mode(PullDown);
jackmcgarley 7:51c21f7f6f12 85
jackmcgarley 5:bec67fb2b2f9 86 init_K64F(); // Initialising the board, serial port, LED'S and joystick
jackmcgarley 7:51c21f7f6f12 87 init_serial();
jackmcgarley 5:bec67fb2b2f9 88 init_leds();
jackmcgarley 7:51c21f7f6f12 89 joystick.init();
jackmcgarley 7:51c21f7f6f12 90
jackmcgarley 5:bec67fb2b2f9 91 tmp102.init(); // call the sensor init method using dot syntax
jackmcgarley 7:51c21f7f6f12 92
jackmcgarley 5:bec67fb2b2f9 93 lcd.init(); // initialise display
jackmcgarley 7:51c21f7f6f12 94
jackmcgarley 5:bec67fb2b2f9 95 lcd.setContrast(0.5); // Sets contrast to 0.5
jackmcgarley 12:988bacb1c2a6 96 welcome(); // Initialising Welcome Screen
jackmcgarley 12:988bacb1c2a6 97 startup(); // Initialising Startup
jackmcgarley 7:51c21f7f6f12 98
jackmcgarley 5:bec67fb2b2f9 99 while (1) {
jackmcgarley 5:bec67fb2b2f9 100 // these are settings that I have adjusted
jackmcgarley 7:51c21f7f6f12 101 lcd.normalMode(); // normal colour mode
jackmcgarley 5:bec67fb2b2f9 102 lcd.setBrightness(0.75); // put LED backlight on 75%
jackmcgarley 7:51c21f7f6f12 103
jackmcgarley 5:bec67fb2b2f9 104 float T = tmp102.get_temperature(); // read temperature and print over serial port
jackmcgarley 5:bec67fb2b2f9 105 pc.printf("T = %.1f K\n",T);
jackmcgarley 7:51c21f7f6f12 106
jackmcgarley 5:bec67fb2b2f9 107 if (T > 37.2f) {
jackmcgarley 5:bec67fb2b2f9 108 red_led1.write(0); // LED 1 will flash when you're in High Temp
jackmcgarley 5:bec67fb2b2f9 109 pc.printf("High Temperature \n"); // Printing to the LCD
jackmcgarley 5:bec67fb2b2f9 110 }
jackmcgarley 7:51c21f7f6f12 111
jackmcgarley 5:bec67fb2b2f9 112 else if (T < 36.1f) {
jackmcgarley 5:bec67fb2b2f9 113 red_led2.write(0); // LED 2 will flash when you're in Low Temp
jackmcgarley 5:bec67fb2b2f9 114 printf("Low Temperature \n"); // Printing to the LCD
jackmcgarley 7:51c21f7f6f12 115 }
jackmcgarley 5:bec67fb2b2f9 116 else if (T > 38) {
jackmcgarley 5:bec67fb2b2f9 117 red_led3.write(0); // LED 3 will flash when you're beyond high temperature
jackmcgarley 5:bec67fb2b2f9 118 printf("Call Your GP \n"); // Printing to the LCD
jackmcgarley 5:bec67fb2b2f9 119 }
jackmcgarley 4:143487eef742 120 }
jackmcgarley 7:51c21f7f6f12 121 }
jackmcgarley 13:f2dad2365841 122
jackmcgarley 4:143487eef742 123 void init_serial() {
jackmcgarley 7:51c21f7f6f12 124 pc.baud(9600); // set to highest baud - ensure terminal software matches
25574069 0:d4d7e882c87d 125 }
jackmcgarley 7:51c21f7f6f12 126
jackmcgarley 7:51c21f7f6f12 127 void init_K64F()
25574069 0:d4d7e882c87d 128 {
jackmcgarley 7:51c21f7f6f12 129 r_led = 1; // on-board LEDs are active-low, so set pin high to turn them off.
jackmcgarley 7:51c21f7f6f12 130 g_led = 1;
jackmcgarley 7:51c21f7f6f12 131 b_led = 1;
jackmcgarley 7:51c21f7f6f12 132
jackmcgarley 7:51c21f7f6f12 133 // since the on-board switches have external pull-ups, we should disable the internal pull-down
jackmcgarley 7:51c21f7f6f12 134 // resistors that are enabled by default using InterruptIn
jackmcgarley 7:51c21f7f6f12 135 sw2.mode(PullNone);
jackmcgarley 7:51c21f7f6f12 136 sw3.mode(PullNone);
jackmcgarley 7:51c21f7f6f12 137
25574069 0:d4d7e882c87d 138 }
jackmcgarley 4:143487eef742 139 void init_leds()
jackmcgarley 4:143487eef742 140 {
jackmcgarley 7:51c21f7f6f12 141 red_led1.write(1); // LEDs are common anode (active-low) so writing a 1 will turn them off
jackmcgarley 7:51c21f7f6f12 142 red_led2.write(1);
jackmcgarley 7:51c21f7f6f12 143 red_led3.write(1);
jackmcgarley 13:f2dad2365841 144 grn_led1.write(0);// LED on to show the board is on
jackmcgarley 7:51c21f7f6f12 145 grn_led2.write(1);
jackmcgarley 13:f2dad2365841 146 grn_led3.write(1);
jackmcgarley 5:bec67fb2b2f9 147 }
jackmcgarley 11:f1a6cced30cf 148 void lcd_sett()//LCD Set
jackmcgarley 5:bec67fb2b2f9 149 {
jackmcgarley 7:51c21f7f6f12 150 }
jackmcgarley 11:f1a6cced30cf 151 void startup() // Void function setup
jackmcgarley 7:51c21f7f6f12 152 {
jackmcgarley 7:51c21f7f6f12 153 S_flag = 0;
jackmcgarley 10:f894ac48a342 154 int select = 1;
jackmcgarley 11:f1a6cced30cf 155 /**Menu starting here, using the joystick for navigating the menu.
jackmcgarley 11:f1a6cced30cf 156 */
jackmcgarley 7:51c21f7f6f12 157 while (1) {
jackmcgarley 11:f1a6cced30cf 158 char d = joystick.get_direction(); // Allowing the joystick to navigate the menu
jackmcgarley 7:51c21f7f6f12 159
jackmcgarley 11:f1a6cced30cf 160 switch(select) { // Main switch
jackmcgarley 11:f1a6cced30cf 161 case 1: //Internal case 1 switch
jackmcgarley 10:f894ac48a342 162 switch(d) {
jackmcgarley 10:f894ac48a342 163 case N:
jackmcgarley 10:f894ac48a342 164 select = 4;
jackmcgarley 10:f894ac48a342 165 wait(0.3);
jackmcgarley 10:f894ac48a342 166 // printf("UP");
jackmcgarley 11:f1a6cced30cf 167 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 168 case S:
jackmcgarley 10:f894ac48a342 169 select = 2;
jackmcgarley 10:f894ac48a342 170 wait(0.3);
jackmcgarley 10:f894ac48a342 171 // printf("Down");
jackmcgarley 11:f1a6cced30cf 172 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 173 }
jackmcgarley 11:f1a6cced30cf 174 break; // Break from main switch
jackmcgarley 10:f894ac48a342 175
jackmcgarley 11:f1a6cced30cf 176 case 2: //Internal case 2 switch
jackmcgarley 10:f894ac48a342 177 switch(d) {
jackmcgarley 10:f894ac48a342 178 case N:
jackmcgarley 10:f894ac48a342 179 select = 1;
jackmcgarley 10:f894ac48a342 180 wait(0.3);
jackmcgarley 10:f894ac48a342 181 // printf("UP");
jackmcgarley 11:f1a6cced30cf 182 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 183 case S:
jackmcgarley 10:f894ac48a342 184 select = 3;
jackmcgarley 10:f894ac48a342 185 wait(0.3);
jackmcgarley 10:f894ac48a342 186 // printf("Down");
jackmcgarley 11:f1a6cced30cf 187 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 188 }
jackmcgarley 11:f1a6cced30cf 189 break; // Break from main switch
jackmcgarley 7:51c21f7f6f12 190
jackmcgarley 11:f1a6cced30cf 191 case 3: //Internal case 3 switch
jackmcgarley 10:f894ac48a342 192 switch(d) {
jackmcgarley 10:f894ac48a342 193 case N:
jackmcgarley 10:f894ac48a342 194 select = 2;
jackmcgarley 10:f894ac48a342 195 wait(0.3);
jackmcgarley 10:f894ac48a342 196 // printf("UP");
jackmcgarley 11:f1a6cced30cf 197 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 198 case S:
jackmcgarley 10:f894ac48a342 199 select = 4;
jackmcgarley 10:f894ac48a342 200 wait(0.3);
jackmcgarley 10:f894ac48a342 201 // printf("Down");
jackmcgarley 11:f1a6cced30cf 202 break; // Break from internal switch
jackmcgarley 7:51c21f7f6f12 203 }
jackmcgarley 11:f1a6cced30cf 204 break; // Break from main switch
jackmcgarley 7:51c21f7f6f12 205
jackmcgarley 11:f1a6cced30cf 206 case 4: //Internal case 4 switch
jackmcgarley 10:f894ac48a342 207 switch(d) {
jackmcgarley 10:f894ac48a342 208 case N:
jackmcgarley 10:f894ac48a342 209 select = 3;
jackmcgarley 10:f894ac48a342 210 wait(0.3);
jackmcgarley 10:f894ac48a342 211 // printf("UP");
jackmcgarley 11:f1a6cced30cf 212 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 213 case S:
jackmcgarley 10:f894ac48a342 214 select = 1;
jackmcgarley 10:f894ac48a342 215 wait(0.3);
jackmcgarley 10:f894ac48a342 216 // printf("Down");
jackmcgarley 11:f1a6cced30cf 217 break; // Break from internal switch
jackmcgarley 10:f894ac48a342 218 }
jackmcgarley 11:f1a6cced30cf 219 break; // Break from main switch
jackmcgarley 10:f894ac48a342 220 }
jackmcgarley 10:f894ac48a342 221 wait(0.3);
jackmcgarley 11:f1a6cced30cf 222 /** Menu selection screen printed to LCD
jackmcgarley 11:f1a6cced30cf 223 */
jackmcgarley 10:f894ac48a342 224 if (select == 1){
jackmcgarley 13:f2dad2365841 225 lcd.clear(); // Clear display
jackmcgarley 11:f1a6cced30cf 226 lcd.printString(" >Collection ", 0, 0); // Menu Selection, printing to LCD
jackmcgarley 7:51c21f7f6f12 227 lcd.printString(" View Data ", 0, 1);
jackmcgarley 7:51c21f7f6f12 228 lcd.printString(" Live Data ", 0, 2);
jackmcgarley 7:51c21f7f6f12 229 lcd.printString(" About ", 0, 3);
jackmcgarley 12:988bacb1c2a6 230 lcd.refresh(); // Refresh display
jackmcgarley 7:51c21f7f6f12 231 wait(0.3);}
jackmcgarley 7:51c21f7f6f12 232
jackmcgarley 10:f894ac48a342 233 else if (select == 2) {
jackmcgarley 11:f1a6cced30cf 234 lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD
jackmcgarley 7:51c21f7f6f12 235 lcd.printString(" >View Data ", 0, 1);
jackmcgarley 12:988bacb1c2a6 236 lcd.printString(" Live Data ", 0, 2);
jackmcgarley 13:f2dad2365841 237 lcd.printString(" About ", 0, 3);
jackmcgarley 12:988bacb1c2a6 238 lcd.refresh(); // Refresh display
jackmcgarley 10:f894ac48a342 239 wait(0.3);}
jackmcgarley 7:51c21f7f6f12 240
jackmcgarley 10:f894ac48a342 241 else if (select == 3) {
jackmcgarley 13:f2dad2365841 242 lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD
jackmcgarley 12:988bacb1c2a6 243 lcd.printString(" View Data ", 0, 1);// Menu Selection, Printing to LCD
jackmcgarley 10:f894ac48a342 244 lcd.printString(" >Live Data ", 0, 2);
jackmcgarley 12:988bacb1c2a6 245 lcd.printString(" About ", 0, 3);
jackmcgarley 12:988bacb1c2a6 246 lcd.refresh(); // Refresh display
jackmcgarley 13:f2dad2365841 247 wait(0.3);
jackmcgarley 13:f2dad2365841 248 display_tmp();}
jackmcgarley 10:f894ac48a342 249
jackmcgarley 10:f894ac48a342 250 else if (select == 4){
jackmcgarley 11:f1a6cced30cf 251 lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD
jackmcgarley 13:f2dad2365841 252 lcd.printString(" View Data ", 0, 1);
jackmcgarley 10:f894ac48a342 253 lcd.printString(" Live Data ", 0, 2);
jackmcgarley 10:f894ac48a342 254 lcd.printString(" >About ", 0, 3);
jackmcgarley 12:988bacb1c2a6 255 lcd.refresh(); // Refresh display
jackmcgarley 10:f894ac48a342 256 wait(0.3);}
jackmcgarley 7:51c21f7f6f12 257 }
jackmcgarley 7:51c21f7f6f12 258 }
jackmcgarley 7:51c21f7f6f12 259
jackmcgarley 12:988bacb1c2a6 260 void welcome() // Start Welcome screens
jackmcgarley 11:f1a6cced30cf 261 {
jackmcgarley 5:bec67fb2b2f9 262 lcd.clear();
jackmcgarley 11:f1a6cced30cf 263 lcd.printString(" Jack McGarley ", 0, 0); // Welcome Screen 1, Printing to LCD
jackmcgarley 7:51c21f7f6f12 264 lcd.printString(" 18689007 ", 0, 1);
jackmcgarley 6:e6e7b99198fd 265 lcd.printString(" Schneider ", 0, 2);
jackmcgarley 6:e6e7b99198fd 266 lcd.printString(" Lincoln Uni ", 0, 3);
jackmcgarley 10:f894ac48a342 267 lcd.printString(" February 2022 ", 0, 4);
jackmcgarley 12:988bacb1c2a6 268 lcd.refresh(); // Refresh display
jackmcgarley 6:e6e7b99198fd 269 wait(3);
jackmcgarley 11:f1a6cced30cf 270
jackmcgarley 6:e6e7b99198fd 271 lcd.clear();
jackmcgarley 11:f1a6cced30cf 272 lcd.printString(" Temperature ", 0, 0);// Welcome Screen 2, Printing to LCD
jackmcgarley 6:e6e7b99198fd 273 lcd.printString(" Based ", 0, 1);
jackmcgarley 6:e6e7b99198fd 274 lcd.printString(" Smart Device ", 0, 2);
jackmcgarley 6:e6e7b99198fd 275 lcd.printString(" Health ", 0, 3);
jackmcgarley 6:e6e7b99198fd 276 lcd.printString(" Monitoring ", 0, 4);
jackmcgarley 12:988bacb1c2a6 277 lcd.refresh(); // Refresh display
jackmcgarley 6:e6e7b99198fd 278 wait(3);
jackmcgarley 7:51c21f7f6f12 279 }
jackmcgarley 13:f2dad2365841 280
jackmcgarley 7:51c21f7f6f12 281 void button_start_isr()
jackmcgarley 7:51c21f7f6f12 282 {
jackmcgarley 7:51c21f7f6f12 283 S_flag = 1;
jackmcgarley 7:51c21f7f6f12 284 }
jackmcgarley 7:51c21f7f6f12 285
jackmcgarley 13:f2dad2365841 286 void B_isr()
jackmcgarley 13:f2dad2365841 287 {
jackmcgarley 13:f2dad2365841 288 g_B_flag = 1;
jackmcgarley 13:f2dad2365841 289 }
jackmcgarley 13:f2dad2365841 290
jackmcgarley 13:f2dad2365841 291 void display_tmp() // Displays Temperature on LCD
jackmcgarley 7:51c21f7f6f12 292 {
jackmcgarley 13:f2dad2365841 293
jackmcgarley 13:f2dad2365841 294 char buffer[14]; //each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
jackmcgarley 13:f2dad2365841 295 if (g_B_flag) { // Press button B to display Live data
jackmcgarley 13:f2dad2365841 296 g_B_flag = 0;
jackmcgarley 13:f2dad2365841 297 B.rise(&B_isr);
jackmcgarley 13:f2dad2365841 298 float T = tmp102.get_temperature(); // Get temperature and display
jackmcgarley 13:f2dad2365841 299 int length = sprintf(buffer,"%.1f C",T);
jackmcgarley 13:f2dad2365841 300 if (length <= 14) {
jackmcgarley 13:f2dad2365841 301 lcd.clear(); // Clear display
jackmcgarley 13:f2dad2365841 302 lcd.printString("Temperature",0,1);
jackmcgarley 13:f2dad2365841 303 lcd.printString(buffer,0,2);
jackmcgarley 13:f2dad2365841 304 lcd.refresh();} // Refresh display
jackmcgarley 13:f2dad2365841 305 wait(3);
jackmcgarley 13:f2dad2365841 306 }
jackmcgarley 4:143487eef742 307 }