![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Working Menu, additions to be made
Dependencies: mbed
main.cpp@7:51c21f7f6f12, 2022-01-28 (annotated)
- Committer:
- jackmcgarley
- Date:
- Fri Jan 28 16:34:08 2022 +0000
- Revision:
- 7:51c21f7f6f12
- Parent:
- 6:e6e7b99198fd
- Child:
- 8:811fe7529732
Starting Menu;
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:143487eef742 | 22 | DigitalIn button_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 | 7:51c21f7f6f12 | 41 | InterruptIn buttonBack(PTB19); |
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 | 5:bec67fb2b2f9 | 47 | // DECLARE VOIDS BEING USED IN CODE |
25574069 | 0:d4d7e882c87d | 48 | |
jackmcgarley | 7:51c21f7f6f12 | 49 | void buttonStart_isr(); // Button Start interrupt service routine |
jackmcgarley | 7:51c21f7f6f12 | 50 | |
jackmcgarley | 7:51c21f7f6f12 | 51 | void buttonBack_isr(); // Button Back interrupt service routine |
jackmcgarley | 7:51c21f7f6f12 | 52 | |
jackmcgarley | 7:51c21f7f6f12 | 53 | void button_start_isr(); |
jackmcgarley | 7:51c21f7f6f12 | 54 | |
jackmcgarley | 7:51c21f7f6f12 | 55 | void button_back_isr(); |
jackmcgarley | 7:51c21f7f6f12 | 56 | |
jackmcgarley | 7:51c21f7f6f12 | 57 | volatile int S_flag, B_flag; |
jackmcgarley | 7:51c21f7f6f12 | 58 | volatile int g_buttonStart_flag = 0; |
jackmcgarley | 7:51c21f7f6f12 | 59 | volatile int g_buttonBack_flag = 0; |
jackmcgarley | 7:51c21f7f6f12 | 60 | |
jackmcgarley | 4:143487eef742 | 61 | void error(); // error function hangs flashing an LED |
jackmcgarley | 4:143487eef742 | 62 | |
jackmcgarley | 4:143487eef742 | 63 | void init_serial(); // Setting up the serial port |
25574069 | 0:d4d7e882c87d | 64 | |
jackmcgarley | 4:143487eef742 | 65 | void init_K64F(); // Setting up the on-board LEDs and switches |
25574069 | 0:d4d7e882c87d | 66 | |
jackmcgarley | 4:143487eef742 | 67 | void init_leds(); //Setting up the LEDs |
jackmcgarley | 5:bec67fb2b2f9 | 68 | |
jackmcgarley | 5:bec67fb2b2f9 | 69 | void startup(); |
jackmcgarley | 5:bec67fb2b2f9 | 70 | |
jackmcgarley | 4:143487eef742 | 71 | int main() |
jackmcgarley | 4:143487eef742 | 72 | { |
jackmcgarley | 7:51c21f7f6f12 | 73 | button_start.mode(PullDown); |
jackmcgarley | 7:51c21f7f6f12 | 74 | button_start.rise(button_start_isr); |
jackmcgarley | 7:51c21f7f6f12 | 75 | button_back.mode(PullDown); |
jackmcgarley | 7:51c21f7f6f12 | 76 | button_back.rise(button_back_isr); |
jackmcgarley | 7:51c21f7f6f12 | 77 | |
jackmcgarley | 5:bec67fb2b2f9 | 78 | init_K64F(); // Initialising the board, serial port, LED'S and joystick |
jackmcgarley | 7:51c21f7f6f12 | 79 | init_serial(); |
jackmcgarley | 5:bec67fb2b2f9 | 80 | init_leds(); |
jackmcgarley | 7:51c21f7f6f12 | 81 | joystick.init(); |
jackmcgarley | 7:51c21f7f6f12 | 82 | |
jackmcgarley | 5:bec67fb2b2f9 | 83 | tmp102.init(); // call the sensor init method using dot syntax |
jackmcgarley | 7:51c21f7f6f12 | 84 | |
jackmcgarley | 5:bec67fb2b2f9 | 85 | lcd.init(); // initialise display |
jackmcgarley | 7:51c21f7f6f12 | 86 | |
jackmcgarley | 5:bec67fb2b2f9 | 87 | lcd.setContrast(0.5); // Sets contrast to 0.5 |
jackmcgarley | 7:51c21f7f6f12 | 88 | |
jackmcgarley | 7:51c21f7f6f12 | 89 | startup(); // USE VOID NOW |
jackmcgarley | 7:51c21f7f6f12 | 90 | |
jackmcgarley | 5:bec67fb2b2f9 | 91 | while (1) { |
jackmcgarley | 7:51c21f7f6f12 | 92 | |
jackmcgarley | 5:bec67fb2b2f9 | 93 | // these are settings that I have adjusted |
jackmcgarley | 7:51c21f7f6f12 | 94 | lcd.normalMode(); // normal colour mode |
jackmcgarley | 5:bec67fb2b2f9 | 95 | lcd.setBrightness(0.75); // put LED backlight on 75% |
jackmcgarley | 7:51c21f7f6f12 | 96 | |
jackmcgarley | 5:bec67fb2b2f9 | 97 | float T = tmp102.get_temperature(); // read temperature and print over serial port |
jackmcgarley | 5:bec67fb2b2f9 | 98 | pc.printf("T = %.1f K\n",T); |
jackmcgarley | 7:51c21f7f6f12 | 99 | |
jackmcgarley | 5:bec67fb2b2f9 | 100 | if (T > 37.2f) { |
jackmcgarley | 5:bec67fb2b2f9 | 101 | red_led1.write(0); // LED 1 will flash when you're in High Temp |
jackmcgarley | 5:bec67fb2b2f9 | 102 | pc.printf("High Temperature \n"); // Printing to the LCD |
jackmcgarley | 5:bec67fb2b2f9 | 103 | } |
jackmcgarley | 7:51c21f7f6f12 | 104 | |
jackmcgarley | 5:bec67fb2b2f9 | 105 | else if (T < 36.1f) { |
jackmcgarley | 5:bec67fb2b2f9 | 106 | red_led2.write(0); // LED 2 will flash when you're in Low Temp |
jackmcgarley | 5:bec67fb2b2f9 | 107 | printf("Low Temperature \n"); // Printing to the LCD |
jackmcgarley | 7:51c21f7f6f12 | 108 | } |
jackmcgarley | 5:bec67fb2b2f9 | 109 | else if (T > 38) { |
jackmcgarley | 5:bec67fb2b2f9 | 110 | red_led3.write(0); // LED 3 will flash when you're beyond high temperature |
jackmcgarley | 5:bec67fb2b2f9 | 111 | printf("Call Your GP \n"); // Printing to the LCD |
jackmcgarley | 5:bec67fb2b2f9 | 112 | } |
jackmcgarley | 7:51c21f7f6f12 | 113 | |
jackmcgarley | 4:143487eef742 | 114 | } |
jackmcgarley | 7:51c21f7f6f12 | 115 | } |
jackmcgarley | 4:143487eef742 | 116 | void init_serial() { |
jackmcgarley | 7:51c21f7f6f12 | 117 | pc.baud(9600); // set to highest baud - ensure terminal software matches |
25574069 | 0:d4d7e882c87d | 118 | } |
jackmcgarley | 7:51c21f7f6f12 | 119 | |
jackmcgarley | 7:51c21f7f6f12 | 120 | void init_K64F() |
25574069 | 0:d4d7e882c87d | 121 | { |
jackmcgarley | 7:51c21f7f6f12 | 122 | r_led = 1; // on-board LEDs are active-low, so set pin high to turn them off. |
jackmcgarley | 7:51c21f7f6f12 | 123 | g_led = 1; |
jackmcgarley | 7:51c21f7f6f12 | 124 | b_led = 1; |
jackmcgarley | 7:51c21f7f6f12 | 125 | |
jackmcgarley | 7:51c21f7f6f12 | 126 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
jackmcgarley | 7:51c21f7f6f12 | 127 | // resistors that are enabled by default using InterruptIn |
jackmcgarley | 7:51c21f7f6f12 | 128 | sw2.mode(PullNone); |
jackmcgarley | 7:51c21f7f6f12 | 129 | sw3.mode(PullNone); |
jackmcgarley | 7:51c21f7f6f12 | 130 | |
25574069 | 0:d4d7e882c87d | 131 | } |
jackmcgarley | 4:143487eef742 | 132 | void init_leds() |
jackmcgarley | 4:143487eef742 | 133 | { |
jackmcgarley | 7:51c21f7f6f12 | 134 | red_led1.write(1); // LEDs are common anode (active-low) so writing a 1 will turn them off |
jackmcgarley | 7:51c21f7f6f12 | 135 | red_led2.write(1); |
jackmcgarley | 7:51c21f7f6f12 | 136 | red_led3.write(1); |
jackmcgarley | 7:51c21f7f6f12 | 137 | grn_led1.write(1); |
jackmcgarley | 7:51c21f7f6f12 | 138 | grn_led2.write(1); |
jackmcgarley | 7:51c21f7f6f12 | 139 | grn_led3.write(0); // LED on to show the board is on |
jackmcgarley | 5:bec67fb2b2f9 | 140 | } |
jackmcgarley | 5:bec67fb2b2f9 | 141 | void lcd_sett() |
jackmcgarley | 5:bec67fb2b2f9 | 142 | { |
jackmcgarley | 7:51c21f7f6f12 | 143 | //LCD SET |
jackmcgarley | 7:51c21f7f6f12 | 144 | } |
jackmcgarley | 7:51c21f7f6f12 | 145 | void startup() // VOID FUNCTION SETUP |
jackmcgarley | 7:51c21f7f6f12 | 146 | { |
jackmcgarley | 7:51c21f7f6f12 | 147 | S_flag = 0; |
jackmcgarley | 7:51c21f7f6f12 | 148 | int select = 0; |
jackmcgarley | 7:51c21f7f6f12 | 149 | |
jackmcgarley | 7:51c21f7f6f12 | 150 | while (1) { |
jackmcgarley | 7:51c21f7f6f12 | 151 | char d = joystick.get_direction(); |
jackmcgarley | 7:51c21f7f6f12 | 152 | |
jackmcgarley | 7:51c21f7f6f12 | 153 | switch(select) { |
jackmcgarley | 7:51c21f7f6f12 | 154 | case 0: |
jackmcgarley | 7:51c21f7f6f12 | 155 | switch(d) { |
jackmcgarley | 7:51c21f7f6f12 | 156 | case N: |
jackmcgarley | 7:51c21f7f6f12 | 157 | select = 1; |
jackmcgarley | 7:51c21f7f6f12 | 158 | // printf("UP"); |
jackmcgarley | 7:51c21f7f6f12 | 159 | break; |
jackmcgarley | 7:51c21f7f6f12 | 160 | case S: |
jackmcgarley | 7:51c21f7f6f12 | 161 | select = 1; |
jackmcgarley | 7:51c21f7f6f12 | 162 | // printf("Down"); |
jackmcgarley | 7:51c21f7f6f12 | 163 | break; |
jackmcgarley | 7:51c21f7f6f12 | 164 | } |
jackmcgarley | 7:51c21f7f6f12 | 165 | break; |
jackmcgarley | 7:51c21f7f6f12 | 166 | |
jackmcgarley | 7:51c21f7f6f12 | 167 | case 1: |
jackmcgarley | 7:51c21f7f6f12 | 168 | switch(d) { |
jackmcgarley | 7:51c21f7f6f12 | 169 | case N: |
jackmcgarley | 7:51c21f7f6f12 | 170 | select = 0; |
jackmcgarley | 7:51c21f7f6f12 | 171 | // printf("UP"); |
jackmcgarley | 7:51c21f7f6f12 | 172 | break; |
jackmcgarley | 7:51c21f7f6f12 | 173 | case S: |
jackmcgarley | 7:51c21f7f6f12 | 174 | select = 0; |
jackmcgarley | 7:51c21f7f6f12 | 175 | // printf("Down"); |
jackmcgarley | 7:51c21f7f6f12 | 176 | break; |
jackmcgarley | 7:51c21f7f6f12 | 177 | } |
jackmcgarley | 7:51c21f7f6f12 | 178 | break; |
jackmcgarley | 7:51c21f7f6f12 | 179 | } |
jackmcgarley | 7:51c21f7f6f12 | 180 | // Menu |
jackmcgarley | 7:51c21f7f6f12 | 181 | |
jackmcgarley | 7:51c21f7f6f12 | 182 | if (select == 0){ |
jackmcgarley | 7:51c21f7f6f12 | 183 | lcd.clear(); |
jackmcgarley | 7:51c21f7f6f12 | 184 | lcd.printString(" >Collection ", 0, 0); |
jackmcgarley | 7:51c21f7f6f12 | 185 | lcd.printString(" View Data ", 0, 1); |
jackmcgarley | 7:51c21f7f6f12 | 186 | lcd.printString(" Live Data ", 0, 2); |
jackmcgarley | 7:51c21f7f6f12 | 187 | lcd.printString(" About ", 0, 3); |
jackmcgarley | 7:51c21f7f6f12 | 188 | lcd.refresh(); |
jackmcgarley | 7:51c21f7f6f12 | 189 | wait(0.3);} |
jackmcgarley | 7:51c21f7f6f12 | 190 | |
jackmcgarley | 7:51c21f7f6f12 | 191 | |
jackmcgarley | 7:51c21f7f6f12 | 192 | else if (select == 1) { |
jackmcgarley | 7:51c21f7f6f12 | 193 | // Menu Selection |
jackmcgarley | 7:51c21f7f6f12 | 194 | lcd.printString(" Collection ", 0, 0); |
jackmcgarley | 7:51c21f7f6f12 | 195 | lcd.printString(" >View Data ", 0, 1); |
jackmcgarley | 7:51c21f7f6f12 | 196 | |
jackmcgarley | 7:51c21f7f6f12 | 197 | lcd.refresh(); |
jackmcgarley | 7:51c21f7f6f12 | 198 | wait(0.3); |
jackmcgarley | 7:51c21f7f6f12 | 199 | } |
jackmcgarley | 7:51c21f7f6f12 | 200 | } |
jackmcgarley | 7:51c21f7f6f12 | 201 | } |
jackmcgarley | 7:51c21f7f6f12 | 202 | |
jackmcgarley | 7:51c21f7f6f12 | 203 | void welcome() |
jackmcgarley | 7:51c21f7f6f12 | 204 | { |
jackmcgarley | 7:51c21f7f6f12 | 205 | // Welcome Screen 1 |
jackmcgarley | 5:bec67fb2b2f9 | 206 | lcd.clear(); |
jackmcgarley | 5:bec67fb2b2f9 | 207 | lcd.printString(" Jack McGarley ", 0, 0); |
jackmcgarley | 7:51c21f7f6f12 | 208 | lcd.printString(" 18689007 ", 0, 1); |
jackmcgarley | 6:e6e7b99198fd | 209 | lcd.printString(" Schneider ", 0, 2); |
jackmcgarley | 6:e6e7b99198fd | 210 | lcd.printString(" Lincoln Uni ", 0, 3); |
jackmcgarley | 6:e6e7b99198fd | 211 | lcd.printString(" January 2022 ", 0, 4); |
jackmcgarley | 5:bec67fb2b2f9 | 212 | lcd.refresh(); |
jackmcgarley | 6:e6e7b99198fd | 213 | wait(3); |
jackmcgarley | 6:e6e7b99198fd | 214 | // Welcome Screen 2 |
jackmcgarley | 6:e6e7b99198fd | 215 | lcd.clear(); |
jackmcgarley | 6:e6e7b99198fd | 216 | lcd.printString(" Temperature ", 0, 0); |
jackmcgarley | 6:e6e7b99198fd | 217 | lcd.printString(" Based ", 0, 1); |
jackmcgarley | 6:e6e7b99198fd | 218 | lcd.printString(" Smart Device ", 0, 2); |
jackmcgarley | 6:e6e7b99198fd | 219 | lcd.printString(" Health ", 0, 3); |
jackmcgarley | 6:e6e7b99198fd | 220 | lcd.printString(" Monitoring ", 0, 4); |
jackmcgarley | 6:e6e7b99198fd | 221 | lcd.refresh(); |
jackmcgarley | 6:e6e7b99198fd | 222 | wait(3); |
jackmcgarley | 7:51c21f7f6f12 | 223 | } |
jackmcgarley | 7:51c21f7f6f12 | 224 | void button_start_isr() |
jackmcgarley | 7:51c21f7f6f12 | 225 | { |
jackmcgarley | 7:51c21f7f6f12 | 226 | S_flag = 1; |
jackmcgarley | 7:51c21f7f6f12 | 227 | } |
jackmcgarley | 7:51c21f7f6f12 | 228 | |
jackmcgarley | 7:51c21f7f6f12 | 229 | void button_back_isr() |
jackmcgarley | 7:51c21f7f6f12 | 230 | { |
jackmcgarley | 7:51c21f7f6f12 | 231 | B_flag = 1; |
jackmcgarley | 4:143487eef742 | 232 | } |