Final tidy of code following installation of new sensor, more comments added prior to submission

Dependencies:   mbed

Committer:
legstar85
Date:
Fri Feb 04 09:20:18 2022 +0000
Revision:
18:fc63b51a0302
Parent:
17:793f819e1df6
Final tidy of code following installation of new sensor, more comments added prior to submission

Who changed what in which revision?

UserRevisionLine numberNew contents of line
legstar85 4:0090145b3286 1 /*
legstar85 13:5ad65a688f3f 2 * Prints a string of characters to the screen buffer, string is cut off after the 83rd pixel.
legstar85 13:5ad65a688f3f 3 * @param x - the column number (0 to 83)
legstar85 13:5ad65a688f3f 4 * @param y - the row number (0-5) - the display is split into 6 banks - each bank can be considered a row
legstar85 13:5ad65a688f3f 5 *
legstar85 2:e0091b5311f1 6 * @ File main.cpp
legstar85 4:0090145b3286 7 * @ Author - David Leaming - 25574043
legstar85 9:d71b92c916f8 8 * @ Date - January 2022
legstar85 13:5ad65a688f3f 9 *
legstar85 2:e0091b5311f1 10 * Acknowledgements
legstar85 14:3e9991fe64e5 11 * Craig A. Evans, University of Leeds, TMP102 Library, Feb 2016
legstar85 14:3e9991fe64e5 12 * Dr Edmond Nurellari, University of Lincoln, Joystick, N5110 Libraries & SD Card Libraries
legstar85 13:5ad65a688f3f 13 * Paul Staron, Piezo Buzzer utility, April 2019
eencae 0:21a200b880d7 14 */
eencae 0:21a200b880d7 15
legstar85 16:c63a5d084db0 16 #include "mbed.h" // Include the library header, ensure the library has been imported into the project
legstar85 18:fc63b51a0302 17 #include "TMP102.h" // Inclusion of library to allow use of code within them as necessary
legstar85 18:fc63b51a0302 18 #include "N5110.h" // Inclusion of library to allow use of code within them as necessary
legstar85 18:fc63b51a0302 19 #include "Joystick.h" // Inclusion of library to allow use of code within them as necessary
legstar85 18:fc63b51a0302 20 #include "Bitmap.h" // Inclusion of library to allow use of code within them as necessary
legstar85 18:fc63b51a0302 21 #include "SDFileSystem.h" // Inclusion of library to allow use of code within them as necessary
legstar85 16:c63a5d084db0 22 //
legstar85 2:e0091b5311f1 23 TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object
legstar85 16:c63a5d084db0 24 //
legstar85 16:c63a5d084db0 25 // VCC,SCE,RST,D/C,MOSI,SCLK,LED //
legstar85 2:e0091b5311f1 26 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // Create Screen Object - K64F - pwr from 3V3, GND Pin also needs connecting
legstar85 16:c63a5d084db0 27 //
legstar85 16:c63a5d084db0 28 // y x button //
legstar85 3:80c1eba78f9b 29 Joystick joystick(PTB10,PTB11,PTC16); // Define Joystick Object
legstar85 16:c63a5d084db0 30 //
legstar85 14:3e9991fe64e5 31 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS - Connections to SD card holder on K64F (SPI interface)
legstar85 16:c63a5d084db0 32 //
legstar85 2:e0091b5311f1 33 Serial pc(USBTX,USBRX); // UART connection for PC
legstar85 16:c63a5d084db0 34 //
legstar85 11:a6eec09b546e 35 struct State { // Struct for state
legstar85 11:a6eec09b546e 36 int output; // output value
legstar85 11:a6eec09b546e 37 float time; // time in state
legstar85 11:a6eec09b546e 38 int nextState[9]; // array of next states
legstar85 16:c63a5d084db0 39 }; //
legstar85 16:c63a5d084db0 40 //
legstar85 16:c63a5d084db0 41 State fsm[11] = { //
legstar85 12:5046b7515d5c 42 {15,0.5,{0,1,0,0,0,10,0,0,0}}, // State 0 - 15 Degrees
legstar85 12:5046b7515d5c 43 {16,0.5,{1,2,1,1,1,0,1,1,1}}, // State 1 - 16 Degrees
legstar85 12:5046b7515d5c 44 {17,0.5,{2,3,2,2,2,1,2,2,2}}, // State 2 - 17 Degrees
legstar85 12:5046b7515d5c 45 {18,0.5,{3,4,3,3,3,2,3,3,3}}, // State 3 - 18 Degrees
legstar85 12:5046b7515d5c 46 {19,0.5,{4,5,4,4,4,3,4,4,4}}, // State 4 - 19 Degrees
legstar85 12:5046b7515d5c 47 {20,0.5,{5,6,5,5,5,4,5,5,5}}, // State 5 - 20 Degrees
legstar85 12:5046b7515d5c 48 {21,0.5,{6,7,6,6,6,5,6,6,6}}, // State 6 - 21 Degrees
legstar85 12:5046b7515d5c 49 {22,0.5,{7,8,7,7,7,6,7,7,7}}, // State 7 - 22 Degrees
legstar85 12:5046b7515d5c 50 {23,0.5,{8,9,8,8,8,7,8,8,8}}, // State 8 - 23 Degrees
legstar85 12:5046b7515d5c 51 {24,0.5,{9,10,9,9,9,8,9,9,9}}, // State 9 - 24 Degrees
legstar85 13:5ad65a688f3f 52 {25,0.5,{10,1,10,10,10,9,10,10,10}} // State 10 - 25 Degrees
legstar85 16:c63a5d084db0 53 }; //
legstar85 16:c63a5d084db0 54 //
legstar85 5:eebd36a47049 55 Ticker ticker_menu; // Create Menu ticker object
legstar85 16:c63a5d084db0 56 //
legstar85 2:e0091b5311f1 57 DigitalOut r_led(LED_RED); // K64F on-board LEDs
legstar85 2:e0091b5311f1 58 DigitalOut g_led(LED_GREEN); // K64F on-board LEDs
legstar85 2:e0091b5311f1 59 DigitalOut b_led(LED_BLUE); // K64F on-board LEDs
legstar85 16:c63a5d084db0 60 //
legstar85 8:07323fcab6d1 61 PwmOut LED01 (PTA1); // PCB Surface Mounted LED's - LED1
legstar85 8:07323fcab6d1 62 PwmOut LED02 (PTA2); // PCB Surface Mounted LED's - LED2
legstar85 8:07323fcab6d1 63 PwmOut LED03 (PTC2); // PCB Surface Mounted LED's - LED3
legstar85 8:07323fcab6d1 64 PwmOut LED04 (PTC3); // PCB Surface Mounted LED's - LED4
legstar85 8:07323fcab6d1 65 PwmOut LED05 (PTC4); // PCB Surface Mounted LED's - LED5
legstar85 8:07323fcab6d1 66 PwmOut LED06 (PTD3); // PCB Surface Mounted LED's - LED6
legstar85 16:c63a5d084db0 67 //
legstar85 8:07323fcab6d1 68 PwmOut Buzzer (PTC10); // PCB Surface Mounted Piezo Buzzer
legstar85 16:c63a5d084db0 69 //
legstar85 2:e0091b5311f1 70 InterruptIn sw2(SW2); // K64F on-board switches
legstar85 2:e0091b5311f1 71 InterruptIn sw3(SW3); // K64F on-board switches
legstar85 3:80c1eba78f9b 72 InterruptIn ButtonA (PTB9); // PCB Button - A
legstar85 3:80c1eba78f9b 73 InterruptIn ButtonB (PTD0); // PCB Button - B
legstar85 7:d77e95505e43 74 InterruptIn ButtonBack (PTB10); // PCB Button - Back
legstar85 16:c63a5d084db0 75 //
legstar85 12:5046b7515d5c 76 volatile int g_ButtonA_flag = 0; // Flag - must be volatile as changes within ISR - g_ prefix makes it easier to distinguish it as global
legstar85 12:5046b7515d5c 77 volatile int g_ButtonB_flag = 0; // Flag - must be volatile as changes within ISR - g_ prefix makes it easier to distinguish it as global
legstar85 12:5046b7515d5c 78 volatile int g_ButtonBack_flag = 0; // Flag - must be volatile as changes within ISR - g_ prefix makes it easier to distinguish it as global
legstar85 12:5046b7515d5c 79 volatile int g_sw2_flag = 0; // Flag - must be volatile as changes within ISR - g_ prefix makes it easier to distinguish it as global
legstar85 12:5046b7515d5c 80 volatile int g_menu_timer_flag = 0; // Flag - must be volatile as changes within ISR - g_ prefix makes it easier to distinguish it as global
legstar85 5:eebd36a47049 81 volatile int option = 0; // Menu option selection based on joystick direction
legstar85 11:a6eec09b546e 82 volatile int g_state = 0; //
legstar85 11:a6eec09b546e 83 volatile int g_StartTemp = 0; //
legstar85 16:c63a5d084db0 84 volatile float g_TempReading = 0.0f; //
legstar85 16:c63a5d084db0 85 //
legstar85 18:fc63b51a0302 86 void error(); // Error function hangs flashing an LED
legstar85 18:fc63b51a0302 87 void init_serial(); // Setup serial port
legstar85 18:fc63b51a0302 88 void init_K64F(); // Set-up the on-board LEDs and switches
legstar85 18:fc63b51a0302 89 void init_PCB(); // Set-up the PCB LEDs and buttons
legstar85 18:fc63b51a0302 90 void ButtonA_isr(); // Set-up Button A Interrupt
legstar85 18:fc63b51a0302 91 void ButtonB_isr(); // Set-up Button B Interrupt
legstar85 18:fc63b51a0302 92 void ButtonBack_isr(); // Set-up Button Back Interrupt
legstar85 18:fc63b51a0302 93 void sw2_isr(); // Set-up Switch 2 Interrupt
legstar85 18:fc63b51a0302 94 void menu_timer_isr(); // Set-up menu timer
legstar85 18:fc63b51a0302 95 void OnStartup(); // Set up function to run Welcom Screens
legstar85 18:fc63b51a0302 96 void Run(); // Set up function to run main programme
legstar85 18:fc63b51a0302 97 void StartTemp(); // Set up function to run and control temperature selection
legstar85 18:fc63b51a0302 98 void delete_file(char filename[]); // Set up function to delete files saved fromovernight temperature readings
legstar85 18:fc63b51a0302 99 void HighTemp(); // Set up function that gives warning of temperature 2 to 4 degrees over starting temp
legstar85 18:fc63b51a0302 100 void SuperHighTemp(); // Set up function that gives warning of temperature 4 to 6 degrees over starting temp
legstar85 18:fc63b51a0302 101 void UltraHighTemp(); // Set up function that gives warning of temperature >= 6 degrees over starting temp
legstar85 18:fc63b51a0302 102 void LowTemp(); // Set up function that gives warning of temperature 2 to 4 degrees below starting temp
legstar85 18:fc63b51a0302 103 void SuperLowTemp(); // Set up function that gives warning of temperature 4 to 6 degrees below starting temp
legstar85 18:fc63b51a0302 104 void UltraLowTemp(); // Set up function that gives warning of temperature <= 6 degrees below starting temp
legstar85 18:fc63b51a0302 105 void PeripheralsOffHigh(); // Set up function that turn off all Low Temp warnings
legstar85 18:fc63b51a0302 106 void PeripheralsOffLow(); // Set up function that turn off all Low Temp warnings
legstar85 17:793f819e1df6 107 //
legstar85 16:c63a5d084db0 108 int main() //
legstar85 16:c63a5d084db0 109 { //
legstar85 16:c63a5d084db0 110 init_K64F(); // Initialise the board
legstar85 2:e0091b5311f1 111 init_serial(); // initialise the serial port
legstar85 16:c63a5d084db0 112 init_PCB(); // Initialise the PCB
legstar85 16:c63a5d084db0 113 //
legstar85 16:c63a5d084db0 114 tmp102.init(); // Call the sensor init method using dot syntax
legstar85 16:c63a5d084db0 115 lcd.init(); // Initialise display
legstar85 16:c63a5d084db0 116 joystick.init(); // Initialise joystick
legstar85 16:c63a5d084db0 117 //
legstar85 5:eebd36a47049 118 ticker_menu.attach(&menu_timer_isr,0.2); // Attach ticker for the Joystick
legstar85 16:c63a5d084db0 119 //
legstar85 3:80c1eba78f9b 120 sw2.fall(&sw2_isr); // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default and fall to 0 V when pressed. We therefore need to look for a falling edge on the pin to fire the interrupt
legstar85 3:80c1eba78f9b 121 ButtonA.rise(&ButtonA_isr); // External push button, pin set to 0V by pull down command, means a rising edge is looked for
legstar85 3:80c1eba78f9b 122 ButtonB.rise(&ButtonB_isr); // External push button, pin set to 0V by pull down command, means a rising edge is looked for
legstar85 16:c63a5d084db0 123 //
legstar85 2:e0091b5311f1 124 lcd.setContrast(0.5); // change set contrast in range 0.0 to 1.0
legstar85 16:c63a5d084db0 125 //
legstar85 11:a6eec09b546e 126 OnStartup(); // Call intro screen
legstar85 9:d71b92c916f8 127 Run(); // Call main-menu and functions
legstar85 16:c63a5d084db0 128 } //
legstar85 16:c63a5d084db0 129 //
legstar85 16:c63a5d084db0 130 void init_serial() { //
legstar85 2:e0091b5311f1 131 pc.baud(115200); // set to highest baud - ensure terminal software matches
legstar85 16:c63a5d084db0 132 } //
legstar85 16:c63a5d084db0 133 //
legstar85 16:c63a5d084db0 134 void init_K64F() //
legstar85 16:c63a5d084db0 135 { //
legstar85 2:e0091b5311f1 136 r_led = 1; // on-board LEDs are active-low, so set pin high to turn them off.
legstar85 2:e0091b5311f1 137 g_led = 1; // on-board LEDs are active-low, so set pin high to turn them off.
legstar85 2:e0091b5311f1 138 b_led = 1; // on-board LEDs are active-low, so set pin high to turn them off.
legstar85 16:c63a5d084db0 139 //
legstar85 2:e0091b5311f1 140 sw2.mode(PullNone); // since the on-board switches have external pull-ups, we should disable the internal pull-down
legstar85 2:e0091b5311f1 141 sw3.mode(PullNone); // resistors that are enabled by default using InterruptIn
legstar85 16:c63a5d084db0 142 } //
legstar85 16:c63a5d084db0 143 //
legstar85 16:c63a5d084db0 144 void init_PCB () //
legstar85 16:c63a5d084db0 145 { //
legstar85 3:80c1eba78f9b 146 LED01 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 9:d71b92c916f8 147 LED02 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 9:d71b92c916f8 148 LED03 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 9:d71b92c916f8 149 LED04 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 9:d71b92c916f8 150 LED05 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 9:d71b92c916f8 151 LED06 = 1; // PCB surface mounted LED's are active low - write a 1 to turn them off initiallly
legstar85 16:c63a5d084db0 152 //
legstar85 9:d71b92c916f8 153 Buzzer = 0; // Ensure Piezo Buzzer is off
legstar85 16:c63a5d084db0 154 //
legstar85 3:80c1eba78f9b 155 ButtonA.mode(PullDown); // Set pin to Pull Down to OV, meaning that a rising edge is looked for when button is pressed
legstar85 3:80c1eba78f9b 156 ButtonB.mode(PullDown); // Set pin to Pull Down to OV, meaning that a rising edge is looked for when button is pressed
legstar85 16:c63a5d084db0 157 } //
legstar85 16:c63a5d084db0 158 //
legstar85 3:80c1eba78f9b 159 void ButtonA_isr() // ButtonA event-triggered interrupt
legstar85 16:c63a5d084db0 160 { //
legstar85 3:80c1eba78f9b 161 g_ButtonA_flag = 1; // set flag in ISR
legstar85 16:c63a5d084db0 162 } //
legstar85 16:c63a5d084db0 163 //
legstar85 3:80c1eba78f9b 164 void ButtonB_isr() // ButtonB event-triggered interrupt
legstar85 16:c63a5d084db0 165 { //
legstar85 3:80c1eba78f9b 166 g_ButtonB_flag = 1; // set flag in ISR
legstar85 16:c63a5d084db0 167 } //
legstar85 16:c63a5d084db0 168 //
legstar85 7:d77e95505e43 169 void ButtonBack_isr() // ButtonB event-triggered interrupt
legstar85 16:c63a5d084db0 170 { //
legstar85 7:d77e95505e43 171 g_ButtonBack_flag = 1; // set flag in ISR
legstar85 16:c63a5d084db0 172 } //
legstar85 16:c63a5d084db0 173 //
legstar85 3:80c1eba78f9b 174 void sw2_isr() // SW2 event-triggered interrupt
legstar85 16:c63a5d084db0 175 { //
legstar85 3:80c1eba78f9b 176 g_sw2_flag = 1; // set flag in ISR
legstar85 16:c63a5d084db0 177 } //
legstar85 16:c63a5d084db0 178 //
legstar85 16:c63a5d084db0 179 void menu_timer_isr() //
legstar85 16:c63a5d084db0 180 { //
legstar85 6:ebf4784ce92b 181 g_menu_timer_flag = 1; // set flag in ISR
legstar85 16:c63a5d084db0 182 } //
legstar85 16:c63a5d084db0 183 //
legstar85 9:d71b92c916f8 184 void OnStartup() // Run some start up display
legstar85 16:c63a5d084db0 185 { //
legstar85 18:fc63b51a0302 186 Buzzer.period(1.0/659.0); // Welcome sounds from Piezo buzzer
legstar85 12:5046b7515d5c 187 Buzzer = 0.5; //
legstar85 12:5046b7515d5c 188 wait(0.5); //
legstar85 18:fc63b51a0302 189 Buzzer.period(1.0/494.0); // Welcome sounds from Piezo buzzer
legstar85 12:5046b7515d5c 190 Buzzer = 0.5; //
legstar85 12:5046b7515d5c 191 wait(0.5); //
legstar85 18:fc63b51a0302 192 Buzzer.period(1.0/554.0); // Welcome sounds from Piezo buzzer
legstar85 12:5046b7515d5c 193 Buzzer = 0.5; //
legstar85 12:5046b7515d5c 194 wait(0.5); //
legstar85 12:5046b7515d5c 195 Buzzer = 0; // Turn off welcome sounds
legstar85 9:d71b92c916f8 196 lcd.clear(); // Clear buffer at start of every loop
legstar85 9:d71b92c916f8 197 lcd.printString("--------------",0,0); // Can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display)
legstar85 7:d77e95505e43 198 lcd.printString(" Smart Cold",0,1); // Just a welcome message before auto moving to main menu
legstar85 7:d77e95505e43 199 lcd.printString(" Storage",0,2); //
legstar85 7:d77e95505e43 200 lcd.printString(" Monitoring",0,3); //
legstar85 18:fc63b51a0302 201 lcd.printString("V19 - Jan 2022",0,4); //
legstar85 7:d77e95505e43 202 lcd.printString("--------------",0,5); //
legstar85 9:d71b92c916f8 203 lcd.refresh(); // Need to refresh display after setting pixels or writing strings
legstar85 9:d71b92c916f8 204 wait(5.0); // Leave welcome screen on for designated amount of time
legstar85 9:d71b92c916f8 205 lcd.clear(); // Clear buffer at start of every loop
legstar85 9:d71b92c916f8 206 lcd.refresh(); // Need to refresh display after setting pixels or writing strings
legstar85 8:07323fcab6d1 207 lcd.printString("--------------",0,0); //
legstar85 8:07323fcab6d1 208 lcd.printString(" Use Joystick",0,1); // Instruction for use of menu
legstar85 8:07323fcab6d1 209 lcd.printString(" To Navigate",0,2); //
legstar85 8:07323fcab6d1 210 lcd.printString("",0,3); // Blank Line
legstar85 8:07323fcab6d1 211 lcd.printString(" A = Select",0,4); //
legstar85 8:07323fcab6d1 212 lcd.printString("--------------",0,5); //
legstar85 9:d71b92c916f8 213 lcd.refresh(); // Need to refresh display after setting pixels or writing strings
legstar85 7:d77e95505e43 214 wait(5.0); //
legstar85 9:d71b92c916f8 215 init_PCB(); // Ran again to ensure all LED's etc are turned off
legstar85 13:5ad65a688f3f 216 printf("Transition to Temp Selection %i\n",StartTemp); // Observe on serial port - ensure transition to correct screen
legstar85 16:c63a5d084db0 217 } //
legstar85 16:c63a5d084db0 218 //
legstar85 9:d71b92c916f8 219 enum EMenuState // An enum controlling the current state of the display.
legstar85 16:c63a5d084db0 220 { //
legstar85 16:c63a5d084db0 221 MENUSTATE_StartTemp, // Defining each menu state to be called upon later (Integer Value of 0)
legstar85 16:c63a5d084db0 222 MENUSTATE_Main, // Defining each menu state to be called upon later (Integer Value of 1)
legstar85 16:c63a5d084db0 223 MENUSTATE_Monitor, // Defining each menu state to be called upon later (Integer Value of 2)
legstar85 16:c63a5d084db0 224 MENUSTATE_OneOff, // Defining each menu state to be called upon later (Integer Value of 3)
legstar85 16:c63a5d084db0 225 MENUSTATE_Results, // Defining each menu state to be called upon later (Integer Value of 4)
legstar85 16:c63a5d084db0 226 MENUSTATE_About, // Defining each menu state to be called upon later (Integer Value of 5)
legstar85 16:c63a5d084db0 227 MENUSTATE_Author, // Defining each menu state to be called upon later (Integer Value of 6)
legstar85 16:c63a5d084db0 228 //
legstar85 16:c63a5d084db0 229 MENUSTATTE_Num, // This is a special enum value that allows us to check and see how many menus we have, +1 of menu integer value
legstar85 16:c63a5d084db0 230 }; //
legstar85 16:c63a5d084db0 231 //
legstar85 18:fc63b51a0302 232 void Run() //
legstar85 16:c63a5d084db0 233 { //
legstar85 15:0cd78b44ea83 234 int MenuState = MENUSTATE_StartTemp; // Ensuring that the first Menu State to be brought up is the Temperature Selection Page
legstar85 9:d71b92c916f8 235 int SelectedItem = 0; //
legstar85 9:d71b92c916f8 236 int NumMenuItems = 1; //
legstar85 16:c63a5d084db0 237 int NumFramesInState = 0; // How many frames have we been in the current menu state.
legstar85 16:c63a5d084db0 238 //
legstar85 15:0cd78b44ea83 239 char buffer[14]; // Each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
legstar85 16:c63a5d084db0 240 //
legstar85 16:c63a5d084db0 241 FILE *fp = NULL; // This is our file pointer
legstar85 16:c63a5d084db0 242 //
legstar85 16:c63a5d084db0 243 while(1){ // Project infinite while loop
legstar85 9:d71b92c916f8 244 if (g_menu_timer_flag){ //
legstar85 9:d71b92c916f8 245 g_menu_timer_flag = 0; //
legstar85 16:c63a5d084db0 246 //
legstar85 6:ebf4784ce92b 247 bool bAButtonWasPressed = g_ButtonA_flag; // Get the value of the input flags and reset them
legstar85 9:d71b92c916f8 248 bool bBButtonWasPressed = g_ButtonB_flag; // Get the value of the input flags and reset them
legstar85 9:d71b92c916f8 249 g_ButtonA_flag = 0; //
legstar85 9:d71b92c916f8 250 g_ButtonB_flag = 0; //
legstar85 16:c63a5d084db0 251 //
legstar85 16:c63a5d084db0 252 lcd.clear(); // Clear buffer at start of every loop
legstar85 16:c63a5d084db0 253 //
legstar85 6:ebf4784ce92b 254 int NewMenuState = MENUSTATTE_Num; // The new menu we want to transition to, if any.
legstar85 16:c63a5d084db0 255 //
legstar85 6:ebf4784ce92b 256 switch(MenuState) // Update and Draw whichever menu we're on.
legstar85 16:c63a5d084db0 257 { //
legstar85 12:5046b7515d5c 258 case MENUSTATE_StartTemp: //
legstar85 16:c63a5d084db0 259 { //
legstar85 15:0cd78b44ea83 260 NumMenuItems = 1; // Details number of items in the menu. We need this to wrap the selection around properly etc.
legstar85 11:a6eec09b546e 261 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 262 { //
legstar85 11:a6eec09b546e 263 SelectedItem = 0; // Something has gone wrong, reset selected item.
legstar85 16:c63a5d084db0 264 } //
legstar85 18:fc63b51a0302 265 Direction d = joystick.get_direction(); // Get direction of joystick and set it as 'd'
legstar85 16:c63a5d084db0 266 //
legstar85 18:fc63b51a0302 267 StartTemp(); // Run Start Temp function
legstar85 16:c63a5d084db0 268 //
legstar85 16:c63a5d084db0 269 float g_StartTemp = fsm[g_state].output; // Read temperature from FSM and print selection to LCD
legstar85 12:5046b7515d5c 270 pc.printf("T = %f C\n",g_StartTemp); // Print to serial - allows testing without device attached
legstar85 11:a6eec09b546e 271 printf ("Joystick Direction Points = %i\n",d); //
legstar85 12:5046b7515d5c 272 printf ("State selected = %i\n", g_state); //
legstar85 16:c63a5d084db0 273 int length = sprintf(buffer," T = %.2f C",g_StartTemp); // Print formatted data to buffer - it is important the format specifier ensures the length will fit in the buffer
legstar85 16:c63a5d084db0 274 if (length <= 14){ // If string will fit on display (assuming printing at x=0)
legstar85 13:5ad65a688f3f 275 lcd.printString("- Set Target -",0,0); //
legstar85 13:5ad65a688f3f 276 lcd.printString("---- Temp ----",0,1); //
legstar85 16:c63a5d084db0 277 lcd.printString(buffer,0,3); // Display on screen
legstar85 13:5ad65a688f3f 278 lcd.printString("'A' to Select",0,5); //
legstar85 16:c63a5d084db0 279 lcd.refresh(); //
legstar85 13:5ad65a688f3f 280 } // need to refresh display after setting pixels or writing strings
legstar85 16:c63a5d084db0 281 //
legstar85 11:a6eec09b546e 282 if(bAButtonWasPressed) // If A was pressed then we transition to the selected screen.
legstar85 16:c63a5d084db0 283 { //
legstar85 11:a6eec09b546e 284 if(SelectedItem == 0) // If 0 line is selected, move to detailed menu
legstar85 11:a6eec09b546e 285 { // Actually 0 line + 1, see circle draw and selection below
legstar85 11:a6eec09b546e 286 NewMenuState = MENUSTATE_Main; //
legstar85 16:c63a5d084db0 287 } //
legstar85 16:c63a5d084db0 288 } //
legstar85 16:c63a5d084db0 289 } //
legstar85 11:a6eec09b546e 290 break; //
legstar85 9:d71b92c916f8 291 case MENUSTATE_Main: //
legstar85 16:c63a5d084db0 292 { //
legstar85 15:0cd78b44ea83 293 NumMenuItems = 5; // Details number of items in the menu. We need this to wrap the selection around properly etc.
legstar85 9:d71b92c916f8 294 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 295 { //
legstar85 6:ebf4784ce92b 296 SelectedItem = 0; // Something has gone wrong, reset selected item.
legstar85 16:c63a5d084db0 297 } //
legstar85 18:fc63b51a0302 298 lcd.printString("---- MENU ----",0,0); // Menu title and selectable options Printed to the LCD screen
legstar85 18:fc63b51a0302 299 lcd.printString("M1 - Monitor",0,1); // Selectable menu option
legstar85 18:fc63b51a0302 300 lcd.printString("M2 - One-off",0,2); // Selectable menu option
legstar85 18:fc63b51a0302 301 lcd.printString("Results",0,3); // Selectable menu option
legstar85 18:fc63b51a0302 302 lcd.printString("About",0,4); // Selectable menu option
legstar85 18:fc63b51a0302 303 lcd.printString("Author",0,5); // Selectable menu option
legstar85 16:c63a5d084db0 304 //
legstar85 6:ebf4784ce92b 305 if(bAButtonWasPressed) // If A was pressed then we transition to the selected screen.
legstar85 16:c63a5d084db0 306 { //
legstar85 8:07323fcab6d1 307 if(SelectedItem == 0) // If 0 line is selected, move to detailed menu
legstar85 8:07323fcab6d1 308 { // Actually 0 line + 1, see circle draw and selection below
legstar85 9:d71b92c916f8 309 NewMenuState = MENUSTATE_Monitor; //
legstar85 16:c63a5d084db0 310 } //
legstar85 8:07323fcab6d1 311 else if(SelectedItem == 1) // If 1 line is selected, move to detailed menu
legstar85 8:07323fcab6d1 312 { // Actually 1 line + 1, see circle draw and selection below
legstar85 9:d71b92c916f8 313 NewMenuState = MENUSTATE_OneOff; //
legstar85 16:c63a5d084db0 314 } //
legstar85 8:07323fcab6d1 315 else if(SelectedItem == 2) // If 2 line is selected, move to detailed menu
legstar85 8:07323fcab6d1 316 { // Actually 2 line + 1, see circle draw and selection below
legstar85 14:3e9991fe64e5 317 NewMenuState = MENUSTATE_Results; //
legstar85 16:c63a5d084db0 318 } //
legstar85 15:0cd78b44ea83 319 else if(SelectedItem == 3) // If 3 line is selected, move to detailed menu
legstar85 15:0cd78b44ea83 320 { // Actually 3 line + 1, see circle draw and selection below
legstar85 9:d71b92c916f8 321 NewMenuState = MENUSTATE_About; //
legstar85 16:c63a5d084db0 322 } //
legstar85 15:0cd78b44ea83 323 else if(SelectedItem == 4) // If 4 line is selected, move to detailed menu
legstar85 15:0cd78b44ea83 324 { // Actually 4 line + 1, see circle draw and selection below
legstar85 9:d71b92c916f8 325 NewMenuState = MENUSTATE_Author; //
legstar85 16:c63a5d084db0 326 } //
legstar85 16:c63a5d084db0 327 } //
legstar85 16:c63a5d084db0 328 } //
legstar85 9:d71b92c916f8 329 break; //
legstar85 9:d71b92c916f8 330 case MENUSTATE_Monitor: // Call constant measurement menu following top menu selection
legstar85 16:c63a5d084db0 331 { //
legstar85 8:07323fcab6d1 332 NumMenuItems = 1; // Detail the number of items in Menu - need this to wrap the selection around properly etc.
legstar85 16:c63a5d084db0 333 //
legstar85 9:d71b92c916f8 334 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 335 { //
legstar85 6:ebf4784ce92b 336 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 337 } //
legstar85 16:c63a5d084db0 338 //
legstar85 7:d77e95505e43 339 float T = tmp102.get_temperature(); // read temperature and print to lcd
legstar85 17:793f819e1df6 340 pc.printf("T = %f C\n",T); // Print to serial - allows testing without device attached
legstar85 7:d77e95505e43 341 int length = sprintf(buffer," T = %.2f C",T); // print formatted data to buffer - it is important the format specifier ensures the length will fit in the buffer
legstar85 7:d77e95505e43 342 if (length <= 14) // if string will fit on display (assuming printing at x=0)
legstar85 9:d71b92c916f8 343 lcd.printString("-- Constant --",0,0); //
legstar85 9:d71b92c916f8 344 lcd.printString("- Monitoring -",0,1); //
legstar85 7:d77e95505e43 345 lcd.printString(buffer,0,3); // display on screen
legstar85 9:d71b92c916f8 346 lcd.printString(" 'A' to Menu",0,5); //
legstar85 7:d77e95505e43 347 lcd.refresh(); // need to refresh display after setting pixels or writing strings
legstar85 9:d71b92c916f8 348 wait(0.5); //
legstar85 16:c63a5d084db0 349 //
legstar85 17:793f819e1df6 350 if (T >= g_StartTemp + 2 and T < g_StartTemp + 4) { // High temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 351 HighTemp(); // Run High temp function if temperture is 2 to 4 degrees over selected start temp
legstar85 16:c63a5d084db0 352 } //
legstar85 16:c63a5d084db0 353 else { //
legstar85 18:fc63b51a0302 354 PeripheralsOffHigh(); // Run function to turn off all high temp peripherals
legstar85 17:793f819e1df6 355 } //
legstar85 18:fc63b51a0302 356 if (T >= g_StartTemp + 4 and T < g_StartTemp + 6) { // Super High temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 357 SuperHighTemp(); // Run Super High temp function if temperture is 4 to 6 degrees over selected start temp
legstar85 16:c63a5d084db0 358 } //
legstar85 17:793f819e1df6 359 else { //
legstar85 18:fc63b51a0302 360 PeripheralsOffHigh(); // Run function to turn off all high temp peripherals
legstar85 17:793f819e1df6 361 } //
legstar85 18:fc63b51a0302 362 if (T >= g_StartTemp + 6) { // Ultra High temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 363 UltraHighTemp(); // Run Ultra High temp function if temperture is 6 degrees or more over selected start temp
legstar85 17:793f819e1df6 364 } //
legstar85 17:793f819e1df6 365 else { //
legstar85 18:fc63b51a0302 366 PeripheralsOffHigh(); // Run function to turn off all high temp peripherals
legstar85 17:793f819e1df6 367 } //
legstar85 17:793f819e1df6 368 if (T <= g_StartTemp - 2 and T > g_StartTemp - 4) { // Low temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 369 LowTemp(); // Run Low Temp function if temperture is 2 to 4 degrees below selected start temp
legstar85 18:fc63b51a0302 370 } //
legstar85 18:fc63b51a0302 371 else { //
legstar85 18:fc63b51a0302 372 PeripheralsOffLow(); // Run function to turn off all low temp peripherals
legstar85 18:fc63b51a0302 373 } //
legstar85 18:fc63b51a0302 374 if (T <= g_StartTemp - 4 and T > g_StartTemp - 6) { // Super low temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 375 SuperLowTemp(); // Run Super Low Temp function if temperture is 2 to 4 degrees below selected start temp
legstar85 16:c63a5d084db0 376 } //
legstar85 16:c63a5d084db0 377 else { //
legstar85 18:fc63b51a0302 378 PeripheralsOffLow(); // Run function to turn off all low temp peripherals
legstar85 18:fc63b51a0302 379 } //
legstar85 18:fc63b51a0302 380 if (T <= g_StartTemp - 6) { // Ultra low temp alarm condition - in real world would be lot lower!!
legstar85 18:fc63b51a0302 381 UltraLowTemp(); // Run Ultra Low Temp function if temperture is 2 to 4 degrees below selected start temp
legstar85 16:c63a5d084db0 382 } //
legstar85 18:fc63b51a0302 383 else { //
legstar85 18:fc63b51a0302 384 PeripheralsOffLow(); // Run function to turn off all low temp peripherals
legstar85 18:fc63b51a0302 385 }
legstar85 9:d71b92c916f8 386 if(bAButtonWasPressed) // Check if button was pressed
legstar85 16:c63a5d084db0 387 { //
legstar85 9:d71b92c916f8 388 if(SelectedItem == 0) //
legstar85 16:c63a5d084db0 389 { //
legstar85 9:d71b92c916f8 390 NewMenuState = MENUSTATE_Main; // Transition back to the main menu
legstar85 17:793f819e1df6 391 PeripheralsOffHigh(); //
legstar85 17:793f819e1df6 392 PeripheralsOffLow(); //
legstar85 16:c63a5d084db0 393 } //
legstar85 16:c63a5d084db0 394 } //
legstar85 16:c63a5d084db0 395 } //
legstar85 16:c63a5d084db0 396 break; //
legstar85 11:a6eec09b546e 397 case MENUSTATE_OneOff: // Call a one off measurement menu following top menu selection
legstar85 16:c63a5d084db0 398 { //
legstar85 8:07323fcab6d1 399 NumMenuItems = 1; // Detail the number of items in Menu - need this to wrap the selection around properly etc.
legstar85 9:d71b92c916f8 400 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 401 { //
legstar85 7:d77e95505e43 402 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 403 } //
legstar85 16:c63a5d084db0 404 //
legstar85 16:c63a5d084db0 405 if(NumFramesInState == 0) //
legstar85 16:c63a5d084db0 406 { //
legstar85 16:c63a5d084db0 407 g_TempReading = tmp102.get_temperature(); // Gather the temp readings only on the frame we enter this state and keep printing this same temp, not to refresh and read new temp.
legstar85 16:c63a5d084db0 408 } //
legstar85 16:c63a5d084db0 409 //
legstar85 18:fc63b51a0302 410 pc.printf("T = %f C\n",g_TempReading); // Print to serial - allows testing without device attached
legstar85 16:c63a5d084db0 411 int length = sprintf(buffer," T = %.2f C",g_TempReading); // print formatted data to buffer - it is important the format specifier ensures the length will fit in the buffer
legstar85 16:c63a5d084db0 412 if (length <= 14){ // if string will fit on display (assuming printing at x=0)
legstar85 16:c63a5d084db0 413 lcd.printString("-- One-Off --",0,0); //
legstar85 16:c63a5d084db0 414 lcd.printString("-- Measure --",0,1); //
legstar85 16:c63a5d084db0 415 lcd.printString(buffer,0,3); // display on screen
legstar85 16:c63a5d084db0 416 lcd.printString(" 'A' to Menu",0,5); //
legstar85 16:c63a5d084db0 417 } //
legstar85 16:c63a5d084db0 418 //
legstar85 9:d71b92c916f8 419 if(bAButtonWasPressed) // Check if button was pressed
legstar85 16:c63a5d084db0 420 { //
legstar85 9:d71b92c916f8 421 if(SelectedItem == 0) //
legstar85 16:c63a5d084db0 422 { //
legstar85 8:07323fcab6d1 423 NewMenuState = MENUSTATE_Main; // Take us back to top menu
legstar85 16:c63a5d084db0 424 } //
legstar85 16:c63a5d084db0 425 } //
legstar85 16:c63a5d084db0 426 } //
legstar85 16:c63a5d084db0 427 break; //
legstar85 15:0cd78b44ea83 428 case MENUSTATE_Results: // Call results menu following top menu selection
legstar85 16:c63a5d084db0 429 { //
legstar85 14:3e9991fe64e5 430 NumMenuItems = 1; // Detail the number of items in Menu - need this to wrap the selection around properly etc.
legstar85 14:3e9991fe64e5 431 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 432 { //
legstar85 16:c63a5d084db0 433 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 434 } //
legstar85 16:c63a5d084db0 435 //
legstar85 18:fc63b51a0302 436 if(NumFramesInState == 0) //
legstar85 16:c63a5d084db0 437 { //
legstar85 16:c63a5d084db0 438 if(fp != NULL){ //
legstar85 16:c63a5d084db0 439 printf("Error! File already open!\n"); //
legstar85 16:c63a5d084db0 440 fclose(fp); //
legstar85 16:c63a5d084db0 441 } //
legstar85 16:c63a5d084db0 442 //
legstar85 16:c63a5d084db0 443 fp = fopen("/sd/overnighttemp.csv", "w"); // Open our file handle on the first frame.
legstar85 16:c63a5d084db0 444 } //
legstar85 16:c63a5d084db0 445 //
legstar85 16:c63a5d084db0 446 if (fp == NULL) { // if it can't open the file then print error message
legstar85 17:793f819e1df6 447 printf("Error! Unable to open file! Returning to main menu.\n"); //
legstar85 14:3e9991fe64e5 448 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 449 } //
legstar85 16:c63a5d084db0 450 else //
legstar85 16:c63a5d084db0 451 { //
legstar85 16:c63a5d084db0 452 float T = tmp102.get_temperature(); // Read temperature and print to lcd
legstar85 18:fc63b51a0302 453 pc.printf("T = %f C\n",T); // Print to serial - allows testing without device attached
legstar85 16:c63a5d084db0 454 fprintf(fp, "%d,%f\n",NumFramesInState,T); // Print formatted string to file (CSV)
legstar85 16:c63a5d084db0 455 //
legstar85 18:fc63b51a0302 456 lcd.printString("-- Results --",0,0); // Menu Title
legstar85 18:fc63b51a0302 457 lcd.printString(" Writing",0,1); // Instructions showing what the function is doing - displayed on screen
legstar85 18:fc63b51a0302 458 lcd.printString(" results to ",0,2); // Instructions showing what the function is doing - displayed on screen
legstar85 18:fc63b51a0302 459 lcd.printString(" file...",0,3); // Instructions showing what the function is doing - displayed on screen
legstar85 18:fc63b51a0302 460 lcd.printString(" ",0,4); // Blank Line
legstar85 18:fc63b51a0302 461 lcd.printString(" 'A' to Menu",0,5); // Instructions to return to main
legstar85 16:c63a5d084db0 462 } //
legstar85 16:c63a5d084db0 463 //
legstar85 14:3e9991fe64e5 464 if(bAButtonWasPressed) // Check if button was pressed
legstar85 16:c63a5d084db0 465 { //
legstar85 14:3e9991fe64e5 466 if(SelectedItem == 0) //
legstar85 16:c63a5d084db0 467 { //
legstar85 14:3e9991fe64e5 468 NewMenuState = MENUSTATE_Main; // Take us back to top menu
legstar85 16:c63a5d084db0 469 } //
legstar85 16:c63a5d084db0 470 } //
legstar85 16:c63a5d084db0 471 } //
legstar85 16:c63a5d084db0 472 break; //
legstar85 9:d71b92c916f8 473 case MENUSTATE_About: // Call About menu following top menu selection
legstar85 16:c63a5d084db0 474 { //
legstar85 8:07323fcab6d1 475 NumMenuItems = 1; // Detail the number of items in Menu - need this to wrap the selection around properly etc.
legstar85 9:d71b92c916f8 476 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 477 { //
legstar85 6:ebf4784ce92b 478 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 479 } //
legstar85 16:c63a5d084db0 480 //
legstar85 18:fc63b51a0302 481 lcd.printString("--- About ---",0,0); // Menu Title
legstar85 18:fc63b51a0302 482 lcd.printString("ELE3006M - IoT",0,1); // Data within menu
legstar85 18:fc63b51a0302 483 lcd.printString(" Project",0,2); // Data within menu
legstar85 18:fc63b51a0302 484 lcd.printString("Uni of Lincoln",0,3); // Data within menu
legstar85 18:fc63b51a0302 485 lcd.printString(" 'A' to Menu",0,5); // Instructions to return to Main menu
legstar85 9:d71b92c916f8 486 lcd.refresh(); //
legstar85 16:c63a5d084db0 487 //
legstar85 9:d71b92c916f8 488 if(bAButtonWasPressed) // Check if button was pressed
legstar85 16:c63a5d084db0 489 { //
legstar85 9:d71b92c916f8 490 if(SelectedItem == 0) //
legstar85 16:c63a5d084db0 491 { //
legstar85 9:d71b92c916f8 492 NewMenuState = MENUSTATE_Main; // Transition back to Main Menu
legstar85 16:c63a5d084db0 493 } //
legstar85 16:c63a5d084db0 494 } //
legstar85 16:c63a5d084db0 495 } //
legstar85 16:c63a5d084db0 496 break; //
legstar85 9:d71b92c916f8 497 case MENUSTATE_Author: // Call Author menu following top menu selection
legstar85 16:c63a5d084db0 498 { //
legstar85 8:07323fcab6d1 499 NumMenuItems = 1; // Detail the number of items in Menu - need this to wrap the selection around properly etc.
legstar85 9:d71b92c916f8 500 if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 501 { //
legstar85 7:d77e95505e43 502 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 503 } //
legstar85 16:c63a5d084db0 504 //
legstar85 18:fc63b51a0302 505 lcd.printString("--- Author ---",0,0); // Menu Title
legstar85 18:fc63b51a0302 506 lcd.printString("David Leaming ",0,1); // Data within menu
legstar85 18:fc63b51a0302 507 lcd.printString(" 25574043 ",0,2); // Data within menu
legstar85 18:fc63b51a0302 508 lcd.printString(" VolkerRail",0,3); // Data within menu
legstar85 18:fc63b51a0302 509 lcd.printString(" 'A' to Menu",0,5); // Instructions to return to Main menu
legstar85 16:c63a5d084db0 510 //
legstar85 9:d71b92c916f8 511 if(bAButtonWasPressed) // Check if button was pressed
legstar85 16:c63a5d084db0 512 { //
legstar85 9:d71b92c916f8 513 if(SelectedItem == 0) //
legstar85 16:c63a5d084db0 514 { //
legstar85 8:07323fcab6d1 515 NewMenuState = MENUSTATE_Main; // Take us back to top menu
legstar85 16:c63a5d084db0 516 } //
legstar85 16:c63a5d084db0 517 } //
legstar85 16:c63a5d084db0 518 } //
legstar85 16:c63a5d084db0 519 break; //
legstar85 16:c63a5d084db0 520 default: //
legstar85 16:c63a5d084db0 521 { //
legstar85 6:ebf4784ce92b 522 NewMenuState = MENUSTATE_Main; // Something has gone wrong, drop back to the main menu.
legstar85 16:c63a5d084db0 523 } //
legstar85 16:c63a5d084db0 524 }; //
legstar85 16:c63a5d084db0 525 //
legstar85 6:ebf4784ce92b 526 if(NewMenuState != MENUSTATTE_Num) // If we have requested a new menu state.
legstar85 16:c63a5d084db0 527 { //
legstar85 8:07323fcab6d1 528 printf("Transitioning to MenuState: %i\n", NewMenuState); // Observe on serial port - ensure transition to correct screen
legstar85 16:c63a5d084db0 529 //
legstar85 6:ebf4784ce92b 530 MenuState = NewMenuState; // We want to transition the menu to a new state.
legstar85 16:c63a5d084db0 531 //
legstar85 6:ebf4784ce92b 532 // Do any bookkeeping needed when moving to new state.
legstar85 16:c63a5d084db0 533 SelectedItem = 0; // Reset the selected item.
legstar85 16:c63a5d084db0 534 NumFramesInState = 0; // Reset the frames in current state count.
legstar85 16:c63a5d084db0 535 //
legstar85 16:c63a5d084db0 536 if(fp){ //
legstar85 16:c63a5d084db0 537 fclose(fp); // Ensure we close the file if the current state had one open.
legstar85 16:c63a5d084db0 538 fp = NULL; //
legstar85 16:c63a5d084db0 539 } //
legstar85 6:ebf4784ce92b 540 lcd.clear(); // Clear the display for one frame on state transition.
legstar85 16:c63a5d084db0 541 } //
legstar85 16:c63a5d084db0 542 else //
legstar85 16:c63a5d084db0 543 { //
legstar85 16:c63a5d084db0 544 ++NumFramesInState; //
legstar85 16:c63a5d084db0 545
legstar85 13:5ad65a688f3f 546 unsigned int SelectionMarkerRadius = 4; // If we have not selected to move to a new menu.
legstar85 13:5ad65a688f3f 547 unsigned int SelectionMarkerX = WIDTH - (2 * SelectionMarkerRadius); // Draw a marker circle at end of line to show which is the currently selected item.
legstar85 13:5ad65a688f3f 548 unsigned int SelectionMarkerY = (HEIGHT / 5) * (SelectedItem + 1); // +1 because of the menu title being on first row
legstar85 13:5ad65a688f3f 549 lcd.drawCircle(SelectionMarkerX, SelectionMarkerY, SelectionMarkerRadius, FILL_BLACK); // Fill the circle black so it can be seen easily
legstar85 6:ebf4784ce92b 550
legstar85 6:ebf4784ce92b 551 // Handle Joystick Input
legstar85 16:c63a5d084db0 552 Direction d = joystick.get_direction(); //
legstar85 16:c63a5d084db0 553 printf("Direction = %i\n", d); //
legstar85 13:5ad65a688f3f 554 switch (joystick.get_direction()) { // Call to check direction joystick is pointing
legstar85 16:c63a5d084db0 555 case N: //
legstar85 16:c63a5d084db0 556 { //
legstar85 16:c63a5d084db0 557 SelectedItem--; //
legstar85 18:fc63b51a0302 558 printf("Selection decremented to %i\n", SelectedItem); // Selection pointer move down
legstar85 16:c63a5d084db0 559 } //
legstar85 6:ebf4784ce92b 560 break; //
legstar85 16:c63a5d084db0 561 case S: //
legstar85 16:c63a5d084db0 562 { //
legstar85 16:c63a5d084db0 563 SelectedItem++; //
legstar85 18:fc63b51a0302 564 printf("Selection incremented to %i\n", SelectedItem); // Selection pointer move up
legstar85 16:c63a5d084db0 565 } //
legstar85 6:ebf4784ce92b 566 break; //
legstar85 16:c63a5d084db0 567 } //
legstar85 9:d71b92c916f8 568 if(SelectedItem < 0) // Wrap the selection around to the start/end of the menu if it goes below 0 or above NumMenuItems.
legstar85 16:c63a5d084db0 569 { //
legstar85 18:fc63b51a0302 570 SelectedItem = NumMenuItems - 1; // Move to bottom of menu
legstar85 16:c63a5d084db0 571 } //
legstar85 18:fc63b51a0302 572 else if(SelectedItem >= NumMenuItems) //
legstar85 16:c63a5d084db0 573 { //
legstar85 18:fc63b51a0302 574 SelectedItem = 0; // Move to top of menu
legstar85 16:c63a5d084db0 575 } //
legstar85 16:c63a5d084db0 576 } //
legstar85 15:0cd78b44ea83 577 lcd.refresh(); // Finally update the display.
legstar85 16:c63a5d084db0 578 } //
legstar85 16:c63a5d084db0 579 } //
legstar85 16:c63a5d084db0 580 } //
legstar85 16:c63a5d084db0 581 //
legstar85 11:a6eec09b546e 582 void StartTemp() //
legstar85 16:c63a5d084db0 583 { //
legstar85 11:a6eec09b546e 584 Direction d = joystick.get_direction(); //
legstar85 16:c63a5d084db0 585 //
legstar85 17:793f819e1df6 586 g_StartTemp = fsm[g_state].output; // Set ouput depending on current state
legstar85 17:793f819e1df6 587 wait(fsm[g_state].time); // Wait in that state for desired time
legstar85 17:793f819e1df6 588 g_state = fsm[g_state].nextState[d]; // Read input and update curent state
legstar85 17:793f819e1df6 589 } //
legstar85 17:793f819e1df6 590 //
legstar85 17:793f819e1df6 591 void HighTemp() //
legstar85 17:793f819e1df6 592 { //
legstar85 18:fc63b51a0302 593 LED01 = 0; // LED01 on if temperature is over specified - Simulated starting of cold blowers
legstar85 17:793f819e1df6 594 printf("WARNING - High Temp!! \n"); //
legstar85 17:793f819e1df6 595 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely high
legstar85 17:793f819e1df6 596 Buzzer = 0.5; //
legstar85 17:793f819e1df6 597 wait(0.5); //
legstar85 17:793f819e1df6 598 Buzzer = 0; //
legstar85 17:793f819e1df6 599 } //
legstar85 17:793f819e1df6 600 //
legstar85 17:793f819e1df6 601 void SuperHighTemp() //
legstar85 17:793f819e1df6 602 { //
legstar85 18:fc63b51a0302 603 LED01 = 0; // LED01 on if temperature is over specified - Simulated starting of cold blowers
legstar85 18:fc63b51a0302 604 LED02 = 0; // LED02 on if temperature is over specified - Simulated starting of cold blowers
legstar85 17:793f819e1df6 605 printf("WARNING - Super High Temp!! \n"); //
legstar85 17:793f819e1df6 606 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely high
legstar85 17:793f819e1df6 607 Buzzer = 0.5; //
legstar85 17:793f819e1df6 608 wait(0.5); //
legstar85 17:793f819e1df6 609 Buzzer = 0; //
legstar85 17:793f819e1df6 610 } //
legstar85 17:793f819e1df6 611 //
legstar85 17:793f819e1df6 612 void UltraHighTemp() //
legstar85 17:793f819e1df6 613 { //
legstar85 18:fc63b51a0302 614 LED01 = 0; // LED01 on if temperature is over specified - Simulated starting of cold blowers
legstar85 18:fc63b51a0302 615 LED02 = 0; // LED02 on if temperature is over specified - Simulated starting of cold blowers
legstar85 18:fc63b51a0302 616 LED03 = 0; // LED02 on if temperature is over specified - Simulated starting of cold blowers
legstar85 17:793f819e1df6 617 printf("WARNING - Ultra High Temp!! \n"); //
legstar85 17:793f819e1df6 618 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely high
legstar85 17:793f819e1df6 619 Buzzer = 0.5; //
legstar85 17:793f819e1df6 620 wait(0.5); //
legstar85 17:793f819e1df6 621 Buzzer = 0; //
legstar85 16:c63a5d084db0 622 } //
legstar85 17:793f819e1df6 623 //
legstar85 17:793f819e1df6 624 void LowTemp() //
legstar85 17:793f819e1df6 625 { //
legstar85 18:fc63b51a0302 626 LED04 = 0; // LED04 on if temperature is over specified - Simulated starting of heaters
legstar85 17:793f819e1df6 627 printf("WARNING - Low Temp!! \n"); //
legstar85 17:793f819e1df6 628 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely low
legstar85 17:793f819e1df6 629 wait(0.5); //
legstar85 17:793f819e1df6 630 Buzzer = 0; //
legstar85 17:793f819e1df6 631 } //
legstar85 17:793f819e1df6 632 // //
legstar85 17:793f819e1df6 633 void SuperLowTemp() //
legstar85 17:793f819e1df6 634 { //
legstar85 18:fc63b51a0302 635 LED04 = 0; // LED04 on if temperature is over specified - Simulated starting of heaters
legstar85 18:fc63b51a0302 636 LED05 = 0; // LED05 on if temperature is over specified - Simulated starting of heaters
legstar85 17:793f819e1df6 637 printf("WARNING - Super Low Temp!! \n"); //
legstar85 17:793f819e1df6 638 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely low
legstar85 17:793f819e1df6 639 wait(0.5); //
legstar85 17:793f819e1df6 640 Buzzer = 0; //
legstar85 17:793f819e1df6 641 } //
legstar85 17:793f819e1df6 642 //
legstar85 17:793f819e1df6 643 void UltraLowTemp() //
legstar85 17:793f819e1df6 644 { //
legstar85 18:fc63b51a0302 645 LED04 = 0; // LED04 on if temperature is over specified - Simulated starting of heaters
legstar85 18:fc63b51a0302 646 LED05 = 0; // LED05 on if temperature is over specified - Simulated starting of heaters
legstar85 18:fc63b51a0302 647 LED06 = 0; // LED06 on if temperature is over specified - Simulated starting of heaters
legstar85 17:793f819e1df6 648 printf("WARNING - Ultra Low Temp!! \n"); //
legstar85 17:793f819e1df6 649 Buzzer.period(1.0/554.0); // Warning Buzzer to extremely low
legstar85 17:793f819e1df6 650 wait(0.5); //
legstar85 17:793f819e1df6 651 Buzzer = 0; //
legstar85 17:793f819e1df6 652 } //
legstar85 17:793f819e1df6 653 //
legstar85 17:793f819e1df6 654 void PeripheralsOffHigh() //
legstar85 17:793f819e1df6 655 { //
legstar85 17:793f819e1df6 656 LED01 = 1; // LED01 off if temperature is below specified - Simulated stopping of cold blowers
legstar85 17:793f819e1df6 657 LED02 = 1; // LED02 off if temperature is below specified - Simulated stopping of cold blowers
legstar85 17:793f819e1df6 658 LED03 = 1; // LED03 off if temperature is below specified - Simulated stopping of cold blowers
legstar85 17:793f819e1df6 659 Buzzer = 0; // Buzzer off if temperature is below specified - Simulated stopping of cold blowers
legstar85 18:fc63b51a0302 660 printf("All High Temp Peripherals = OFF \n"); //
legstar85 17:793f819e1df6 661 } //
legstar85 17:793f819e1df6 662 //
legstar85 17:793f819e1df6 663 void PeripheralsOffLow() //
legstar85 17:793f819e1df6 664 { //
legstar85 17:793f819e1df6 665 LED04 = 1; // LED04 off if temperature is below specified - Simulated stopping of heaters
legstar85 17:793f819e1df6 666 LED05 = 1; // LED05 off if temperature is below specified - Simulated stopping of heaters
legstar85 17:793f819e1df6 667 LED06 = 1; // LED06 off if temperature is below specified - Simulated stopping of heaters
legstar85 17:793f819e1df6 668 Buzzer = 0; // Buzzer off if temperature is below specified - Simulated stopping of heaters
legstar85 18:fc63b51a0302 669 printf("All LOW Temp Peripherals = OFF \n"); //
legstar85 17:793f819e1df6 670 } //