
Distance Sensor Embedded Systems Project SID: 200864479 James Erringham-Bruce
Dependencies: N5110 SRF02-JEB mbed
Main/MainMenu.h@1:f82359c58eda, 2016-05-04 (annotated)
- Committer:
- ll13j7b
- Date:
- Wed May 04 21:20:21 2016 +0000
- Revision:
- 1:f82359c58eda
- Child:
- 2:01f697b856de
working version before adding classes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ll13j7b | 1:f82359c58eda | 1 | /* |
ll13j7b | 1:f82359c58eda | 2 | @file MainMenu.h |
ll13j7b | 1:f82359c58eda | 3 | @brief Header file containing member functions and variables |
ll13j7b | 1:f82359c58eda | 4 | @author James Erringham-Bruce |
ll13j7b | 1:f82359c58eda | 5 | */ |
ll13j7b | 1:f82359c58eda | 6 | |
ll13j7b | 1:f82359c58eda | 7 | #ifndef MAINMENU_H |
ll13j7b | 1:f82359c58eda | 8 | #define MAINMENU_H |
ll13j7b | 1:f82359c58eda | 9 | |
ll13j7b | 1:f82359c58eda | 10 | #include "mbed.h" // mbed library |
ll13j7b | 1:f82359c58eda | 11 | #include "Radar.h" |
ll13j7b | 1:f82359c58eda | 12 | #include "Graph.h" |
ll13j7b | 1:f82359c58eda | 13 | #include "UserSettings.h" |
ll13j7b | 1:f82359c58eda | 14 | |
ll13j7b | 1:f82359c58eda | 15 | // creating the class used in plotting the graph |
ll13j7b | 1:f82359c58eda | 16 | class Menu |
ll13j7b | 1:f82359c58eda | 17 | { |
ll13j7b | 1:f82359c58eda | 18 | // defining the public functions and variables |
ll13j7b | 1:f82359c58eda | 19 | public: |
ll13j7b | 1:f82359c58eda | 20 | |
ll13j7b | 1:f82359c58eda | 21 | void mainMenu(); |
ll13j7b | 1:f82359c58eda | 22 | |
ll13j7b | 1:f82359c58eda | 23 | void runSelection(int bank); |
ll13j7b | 1:f82359c58eda | 24 | |
ll13j7b | 1:f82359c58eda | 25 | void printText(); |
ll13j7b | 1:f82359c58eda | 26 | |
ll13j7b | 1:f82359c58eda | 27 | int getBank(); |
ll13j7b | 1:f82359c58eda | 28 | |
ll13j7b | 1:f82359c58eda | 29 | /** |
ll13j7b | 1:f82359c58eda | 30 | @fn numerical |
ll13j7b | 1:f82359c58eda | 31 | @brief shows the numerical readings on screen - speed, distance |
ll13j7b | 1:f82359c58eda | 32 | */ |
ll13j7b | 1:f82359c58eda | 33 | void numerical(); |
ll13j7b | 1:f82359c58eda | 34 | |
ll13j7b | 1:f82359c58eda | 35 | // defining the private functions and variables |
ll13j7b | 1:f82359c58eda | 36 | private: |
ll13j7b | 1:f82359c58eda | 37 | |
ll13j7b | 1:f82359c58eda | 38 | }; |
ll13j7b | 1:f82359c58eda | 39 | |
ll13j7b | 1:f82359c58eda | 40 | #endif |
ll13j7b | 1:f82359c58eda | 41 | |
ll13j7b | 1:f82359c58eda | 42 | Graph graph; |
ll13j7b | 1:f82359c58eda | 43 | Radar radar; |
ll13j7b | 1:f82359c58eda | 44 | UserSettings setting; |
ll13j7b | 1:f82359c58eda | 45 | |
ll13j7b | 1:f82359c58eda | 46 | volatile int menu_screen = 0; |
ll13j7b | 1:f82359c58eda | 47 | |
ll13j7b | 1:f82359c58eda | 48 | // function to return the value of the bank the potentiometer corresponds to for the menu |
ll13j7b | 1:f82359c58eda | 49 | int Menu::getBank() |
ll13j7b | 1:f82359c58eda | 50 | { |
ll13j7b | 1:f82359c58eda | 51 | int bankReturn; |
ll13j7b | 1:f82359c58eda | 52 | if (selectorPot < 0.25f) { |
ll13j7b | 1:f82359c58eda | 53 | bankReturn = 2; |
ll13j7b | 1:f82359c58eda | 54 | } |
ll13j7b | 1:f82359c58eda | 55 | if (selectorPot >= 0.25f && selectorPot < 0.5f) { |
ll13j7b | 1:f82359c58eda | 56 | bankReturn = 3; |
ll13j7b | 1:f82359c58eda | 57 | } |
ll13j7b | 1:f82359c58eda | 58 | if (selectorPot >= 0.5f && selectorPot < 0.75f) { |
ll13j7b | 1:f82359c58eda | 59 | bankReturn = 4; |
ll13j7b | 1:f82359c58eda | 60 | } |
ll13j7b | 1:f82359c58eda | 61 | if (selectorPot >= 0.75f) { |
ll13j7b | 1:f82359c58eda | 62 | bankReturn = 5; |
ll13j7b | 1:f82359c58eda | 63 | } |
ll13j7b | 1:f82359c58eda | 64 | return bankReturn; |
ll13j7b | 1:f82359c58eda | 65 | } |
ll13j7b | 1:f82359c58eda | 66 | |
ll13j7b | 1:f82359c58eda | 67 | // MAIN MENU FUNCTION WHERE THE USER CAN INTERFACE |
ll13j7b | 1:f82359c58eda | 68 | void Menu::mainMenu() |
ll13j7b | 1:f82359c58eda | 69 | { |
ll13j7b | 1:f82359c58eda | 70 | int bank = 0; // initialise the bank |
ll13j7b | 1:f82359c58eda | 71 | menu_screen = 1; // declaring the menu screen is active |
ll13j7b | 1:f82359c58eda | 72 | while (1) { |
ll13j7b | 1:f82359c58eda | 73 | |
ll13j7b | 1:f82359c58eda | 74 | lcd.clear(); |
ll13j7b | 1:f82359c58eda | 75 | bank = getBank(); // get the bank value |
ll13j7b | 1:f82359c58eda | 76 | printText(); // print the users options and title |
ll13j7b | 1:f82359c58eda | 77 | // looping through one bank of the screen ( bank 0 in this case) |
ll13j7b | 1:f82359c58eda | 78 | // similar algorithm to my scrolling method |
ll13j7b | 1:f82359c58eda | 79 | int tempBank = bank*8; |
ll13j7b | 1:f82359c58eda | 80 | |
ll13j7b | 1:f82359c58eda | 81 | for ( int columns = 0; columns < 84; columns++ ) { |
ll13j7b | 1:f82359c58eda | 82 | // multiply by eight to convert bank value to the rows in that bank |
ll13j7b | 1:f82359c58eda | 83 | for ( int currentBank = (bank*8) - 1; currentBank < tempBank+8; currentBank++) { |
ll13j7b | 1:f82359c58eda | 84 | if (lcd.getPixel(columns, currentBank)) { // if the pixel is set |
ll13j7b | 1:f82359c58eda | 85 | lcd.clearPixel(columns, currentBank); // clear it |
ll13j7b | 1:f82359c58eda | 86 | } else { // set the other pixels |
ll13j7b | 1:f82359c58eda | 87 | lcd.setPixel(columns, currentBank); // basically inverting the screen |
ll13j7b | 1:f82359c58eda | 88 | } |
ll13j7b | 1:f82359c58eda | 89 | } |
ll13j7b | 1:f82359c58eda | 90 | } |
ll13j7b | 1:f82359c58eda | 91 | runSelection(bank); // check if a selection has been made |
ll13j7b | 1:f82359c58eda | 92 | lcd.refresh(); |
ll13j7b | 1:f82359c58eda | 93 | wait(0.5); |
ll13j7b | 1:f82359c58eda | 94 | } |
ll13j7b | 1:f82359c58eda | 95 | } |
ll13j7b | 1:f82359c58eda | 96 | |
ll13j7b | 1:f82359c58eda | 97 | void Menu::runSelection(int bank) |
ll13j7b | 1:f82359c58eda | 98 | { |
ll13j7b | 1:f82359c58eda | 99 | if (bank == 2 && button == 1) { |
ll13j7b | 1:f82359c58eda | 100 | menu_screen = 0; |
ll13j7b | 1:f82359c58eda | 101 | setting.printScreen(); |
ll13j7b | 1:f82359c58eda | 102 | } |
ll13j7b | 1:f82359c58eda | 103 | if (bank == 3 && button == 1) { |
ll13j7b | 1:f82359c58eda | 104 | menu_screen = 0; |
ll13j7b | 1:f82359c58eda | 105 | graph.plotGraph(); |
ll13j7b | 1:f82359c58eda | 106 | } |
ll13j7b | 1:f82359c58eda | 107 | if (bank == 4 && button == 1) { |
ll13j7b | 1:f82359c58eda | 108 | menu_screen = 0; |
ll13j7b | 1:f82359c58eda | 109 | numerical(); |
ll13j7b | 1:f82359c58eda | 110 | } |
ll13j7b | 1:f82359c58eda | 111 | if (bank == 5 && button == 1) { |
ll13j7b | 1:f82359c58eda | 112 | menu_screen = 0; |
ll13j7b | 1:f82359c58eda | 113 | radar.radarMode(); |
ll13j7b | 1:f82359c58eda | 114 | } |
ll13j7b | 1:f82359c58eda | 115 | } |
ll13j7b | 1:f82359c58eda | 116 | |
ll13j7b | 1:f82359c58eda | 117 | // FUNCTION TO PRINT THE DISTANCE ON SCREEN IN NUMERICAL FORM |
ll13j7b | 1:f82359c58eda | 118 | void Menu::numerical() |
ll13j7b | 1:f82359c58eda | 119 | { |
ll13j7b | 1:f82359c58eda | 120 | while (1) { |
ll13j7b | 1:f82359c58eda | 121 | int avgCm = getAverageReadingCm(); |
ll13j7b | 1:f82359c58eda | 122 | int avgInch = getAverageReadingInch(); |
ll13j7b | 1:f82359c58eda | 123 | |
ll13j7b | 1:f82359c58eda | 124 | if (g_timer_flag) { // firing the first timer flag |
ll13j7b | 1:f82359c58eda | 125 | g_timer_flag = 0; |
ll13j7b | 1:f82359c58eda | 126 | lcd.clear(); // clear the screen ( preparing for the reading to be dispalyed |
ll13j7b | 1:f82359c58eda | 127 | lcd.printString("DISTANCE", 18, 0); |
ll13j7b | 1:f82359c58eda | 128 | printReading(avgCm ,avgInch); // printing the reading on the screen calling a previous function |
ll13j7b | 1:f82359c58eda | 129 | lcd.refresh(); // refresh the screen displaying the average reading |
ll13j7b | 1:f82359c58eda | 130 | } |
ll13j7b | 1:f82359c58eda | 131 | sleep(); // sleep before next interrupt |
ll13j7b | 1:f82359c58eda | 132 | } |
ll13j7b | 1:f82359c58eda | 133 | } |
ll13j7b | 1:f82359c58eda | 134 | |
ll13j7b | 1:f82359c58eda | 135 | void Menu::printText() |
ll13j7b | 1:f82359c58eda | 136 | { |
ll13j7b | 1:f82359c58eda | 137 | lcd.printString("MENU",30,0); // print the title |
ll13j7b | 1:f82359c58eda | 138 | lcd.drawLine(28,8,54,8,1); // underlining the title |
ll13j7b | 1:f82359c58eda | 139 | lcd.printString("SETTINGS",17,2); // options |
ll13j7b | 1:f82359c58eda | 140 | lcd.printString("GRAPH PLOT",12,3); |
ll13j7b | 1:f82359c58eda | 141 | lcd.printString("NUMERICAL",16,4); |
ll13j7b | 1:f82359c58eda | 142 | lcd.printString("RADAR MODE",12,5); |
ll13j7b | 1:f82359c58eda | 143 | } |