![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Working Menu, additions to be made
Dependencies: mbed
Diff: main.cpp
- Revision:
- 14:ef54ca605b6f
- Parent:
- 13:f2dad2365841
diff -r f2dad2365841 -r ef54ca605b6f main.cpp --- a/main.cpp Fri Feb 04 17:50:48 2022 +0000 +++ b/main.cpp Wed Aug 24 18:45:06 2022 +0000 @@ -1,6 +1,6 @@ /* * Author - Jack McGarley - 18689007 -* Date - January 2022 +* Date - August 2022 * Acknowledgements * Craig A. Evans, University of Leeds, TMP102 Library, Feb 2016 * Dr Edmond Nurellari, University of Lincoln, Joystick & N5110 Libraries @@ -11,22 +11,6 @@ #include "TMP102.h" #include "N5110.h" -DigitalOut grn_led1(PTA1); // Designating LEDs from left to right -DigitalOut grn_led2(PTA2); -DigitalOut grn_led3(PTC2); -DigitalOut red_led1(PTC3); -DigitalOut red_led2(PTC4); -DigitalOut red_led3(PTD3); - -DigitalIn button_A(PTB9); // Designating Buttons -//DigitalIn B(PTD0); -DigitalIn button_X(PTC17); -DigitalIn button_Y(PTC12); -DigitalIn button_L(PTB18); -DigitalIn button_R(PTB3); -InterruptIn button_back(PTB19); -InterruptIn button_start(PTC5); - TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); //Designating N5110 Display @@ -35,80 +19,164 @@ Serial pc(USBTX,USBRX); // UART connection for PC +DigitalOut grn_led1(PTA1); // Designating LEDs from left to right +DigitalOut grn_led2(PTA2); +DigitalOut grn_led3(PTC2); +DigitalOut red_led1(PTC3); +DigitalOut red_led2(PTC4); +DigitalOut red_led3(PTD3); +DigitalIn button_A(PTB9); // Designating Buttons +//DigitalIn B(PTD0); +DigitalIn button_X(PTC17); +DigitalIn button_Y(PTC12); +DigitalIn button_L(PTB18); +DigitalIn button_R(PTB3); +InterruptIn button_back(PTB19); +InterruptIn button_start(PTC5); InterruptIn sw2(SW2); // K64F on-board switches InterruptIn sw3(SW3); -InterruptIn buttonStart(PTC5); InterruptIn B(PTD0); - +InterruptIn R(PTB3); // Right Bumper Button +InterruptIn L(PTB18); // Left Bumper Button +InterruptIn A(PTB9); // A Button +InterruptIn Y(PTC12); // Y Button DigitalOut r_led(LED_RED); // K64F on-board LEDs DigitalOut g_led(LED_GREEN); DigitalOut b_led(LED_BLUE); -/** Declare voids before using in the code -*/ -void buttonStart_isr(); // Button Start interrupt service routine + + +float Morning, Afternoon, Evening, Night ; + + + +/** Declare voids before using in the code*/ -void button_start_isr(); +void button_start_isr(); // Button Start interrupt service routine +void button_back_isr(); -void B_isr(); - +void B_isr(); // Interrupt Voidsvoid R_isr(); +void L_isr(); +void A_isr(); +void Y_isr(); void init_buttons(); // Initialise buttons + void error(); // error function hangs flashing an LED + void init_serial(); // Setting up the serial port + void init_K64F(); // Setting up the on-board LEDs and switches + void init_leds(); // Setting up the LEDs + void welcome(); // Setting up welcome screen + void startup(); // Setting up startup + +void collection(); //temp collection + + +void view_data(); //view saved data + + + void display_tmp(); // Tempertature display -volatile int S_flag; // Global Variables + + +void morning(); //morning temp reading + + + +void afternoon(); //afternoon temp reading + + + +void evening(); //evening temp reading -volatile int g_buttonStart_flag = 0; + + +void night(); //night temp reading + + -volatile int g_buttonBack_flag = 0; - +volatile int button_start_flag; // Global Variables +volatile int button_back_flag; // Global Variables +volatile int g_R_flag = 0; +volatile int g_L_flag = 0; +volatile int g_A_flag = 0; +volatile int g_Y_flag = 0; volatile int g_B_flag = 0; + + + +/**Main Function*/ int main() { button_start.mode(PullDown); button_start.rise(button_start_isr); -B.fall(&B_isr); -B.mode(PullDown); +button_back.mode(PullDown); +button_back.rise(button_back_isr); +B.fall(&B_isr); // Flipping the Interrupt Function +B.mode(PullDown); // When the PCB Button is Pulled Down +/**R.fall(&R_isr); +R.mode(PullDown); +L.fall(&L_isr); +L.mode(PullDown); +A.fall(&A_isr);A.mode(PullDown); +Y.fall(&Y_isr); +Y.mode(PullDown);**/ + + init_K64F(); // Initialising the board, serial port, LED'S and joystick init_serial(); init_leds(); joystick.init(); + + tmp102.init(); // call the sensor init method using dot syntax + + lcd.init(); // initialise display + + lcd.setContrast(0.5); // Sets contrast to 0.5 welcome(); // Initialising Welcome Screen startup(); // Initialising Startup + + while (1) { // these are settings that I have adjusted lcd.normalMode(); // normal colour mode lcd.setBrightness(0.75); // put LED backlight on 75% + + float T = tmp102.get_temperature(); // read temperature and print over serial port pc.printf("T = %.1f K\n",T); + + if (T > 37.2f) { red_led1.write(0); // LED 1 will flash when you're in High Temp pc.printf("High Temperature \n"); // Printing to the LCD } + + else if (T < 36.1f) { red_led2.write(0); // LED 2 will flash when you're in Low Temp printf("Low Temperature \n"); // Printing to the LCD @@ -120,21 +188,29 @@ } } + + void init_serial() { pc.baud(9600); // set to highest baud - ensure terminal software matches } + + void init_K64F() { r_led = 1; // on-board LEDs are active-low, so set pin high to turn them off. g_led = 1; b_led = 1; + + // since the on-board switches have external pull-ups, we should disable the internal pull-down // resistors that are enabled by default using InterruptIn sw2.mode(PullNone); sw3.mode(PullNone); + + } void init_leds() { @@ -143,20 +219,23 @@ red_led3.write(1); grn_led1.write(0);// LED on to show the board is on grn_led2.write(1); -grn_led3.write(1); +grn_led3.write(1); } void lcd_sett()//LCD Set { } void startup() // Void function setup { -S_flag = 0; +button_start_flag = 0; +button_back_flag = 0; int select = 1; /**Menu starting here, using the joystick for navigating the menu. */ while (1) { char d = joystick.get_direction(); // Allowing the joystick to navigate the menu + + switch(select) { // Main switch case 1: //Internal case 1 switch switch(d) { @@ -173,6 +252,8 @@ } break; // Break from main switch + + case 2: //Internal case 2 switch switch(d) { case N: @@ -188,6 +269,8 @@ } break; // Break from main switch + + case 3: //Internal case 3 switch switch(d) { case N: @@ -203,6 +286,8 @@ } break; // Break from main switch + + case 4: //Internal case 4 switch switch(d) { case N: @@ -219,8 +304,8 @@ break; // Break from main switch } wait(0.3); -/** Menu selection screen printed to LCD -*/ +/** Menu selection screen printed to LCD*/ + if (select == 1){ lcd.clear(); // Clear display lcd.printString(" >Collection ", 0, 0); // Menu Selection, printing to LCD @@ -228,7 +313,16 @@ lcd.printString(" Live Data ", 0, 2); lcd.printString(" About ", 0, 3); lcd.refresh(); // Refresh display -wait(0.3);} +wait(0.3); + +if (button_start_flag==1){ + printf("start button"); + button_start_flag=0; + collection(); +} +} + + else if (select == 2) { lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD @@ -236,7 +330,14 @@ lcd.printString(" Live Data ", 0, 2); lcd.printString(" About ", 0, 3); lcd.refresh(); // Refresh display -wait(0.3);} +wait(0.3); +if (button_start_flag==1){ + button_start_flag=0; + view_data(); +} +} + + else if (select == 3) { lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD @@ -247,6 +348,8 @@ wait(0.3); display_tmp();} + + else if (select == 4){ lcd.printString(" Collection ", 0, 0);// Menu Selection, Printing to LCD lcd.printString(" View Data ", 0, 1); @@ -257,10 +360,11 @@ } } + void welcome() // Start Welcome screens -{ +{ lcd.clear(); -lcd.printString(" Jack McGarley ", 0, 0); // Welcome Screen 1, Printing to LCD +lcd.printString(" Jack McGarley ", 0, 0); // Welcome Screen 1, Printing to LCD lcd.printString(" 18689007 ", 0, 1); lcd.printString(" Schneider ", 0, 2); lcd.printString(" Lincoln Uni ", 0, 3); @@ -268,6 +372,7 @@ lcd.refresh(); // Refresh display wait(3); + lcd.clear(); lcd.printString(" Temperature ", 0, 0);// Welcome Screen 2, Printing to LCD lcd.printString(" Based ", 0, 1); @@ -278,30 +383,103 @@ wait(3); } -void button_start_isr() -{ -S_flag = 1; +void B_isr() // Right Bumper Interrupt Service +{g_B_flag = 1; // set flag in ISR +} +void R_isr() // Right Bumper Interrupt Service +{ g_R_flag = 1; // set flag in ISR } - -void B_isr() -{ -g_B_flag = 1; +void L_isr() // Left Bumper Interrupt Service +{ g_L_flag = 1; // set flag in ISR +} +void A_isr() // A Button Interrupt Service +{ g_A_flag = 1; // set flag in ISR +} +void Y_isr() // Y Button Interrupt Service +{ g_Y_flag = 1; // set flag in ISR } + + void display_tmp() // Displays Temperature on LCD -{ - -char buffer[14]; //each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) +{ +char buffer[14]; //each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) if (g_B_flag) { // Press button B to display Live data -g_B_flag = 0; +g_B_flag = 0; B.rise(&B_isr); -float T = tmp102.get_temperature(); // Get temperature and display -int length = sprintf(buffer,"%.1f C",T); +float T = tmp102.get_temperature(); // Get temperature and display +int length = sprintf(buffer,"%.1f C",T); // Displays to .1 decimal place if (length <= 14) { lcd.clear(); // Clear display lcd.printString("Temperature",0,1); lcd.printString(buffer,0,2); -lcd.refresh();} // Refresh display +lcd.refresh();} // Refresh display wait(3); } +} + + + +void collection(){ + + int state = 0; + + while(1) + { + switch(state){ + case 0: + { +lcd.clear(); // Clear display +lcd.printString(" >Morning", 0, 0); // Menu Selection, printing to LCD +lcd.printString(" Afternoon ", 0, 1); +lcd.printString(" Evening ", 0, 2); +lcd.printString(" Night ", 0, 3); +lcd.refresh(); // Refresh display +wait(0.3);} + + + +if (button_start_flag==1){ + button_start_flag=0; + morning(); +} +else if (button_back_flag==1){ + button_back_flag=0; + startup(); +} +} +} +} + +void view_data() +{ + + lcd.clear(); + char buffer[14]; + int length = sprintf(buffer,"%.1f C", Morning); + if (length <= 14) + lcd.printString("Morning Temp",0,0); + lcd.printString(buffer,24,3); + lcd.refresh(); + wait(1); + + if (button_back_flag==1){ + button_back_flag=0; + startup(); +} +} +void morning(){ + + Morning = tmp102.get_temperature(); + printf("morning temp = %i\n",Morning); + } + +void button_start_isr() +{ +button_start_flag = 1; +} + +void button_back_isr() +{ +button_back_flag = 1; } \ No newline at end of file