Distance Sensor Embedded Systems Project SID: 200864479 James Erringham-Bruce
Dependencies: N5110 SRF02-JEB mbed
Diff: Main/MainMenu.h
- Revision:
- 1:f82359c58eda
- Child:
- 2:01f697b856de
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/MainMenu.h Wed May 04 21:20:21 2016 +0000 @@ -0,0 +1,143 @@ +/* +@file MainMenu.h +@brief Header file containing member functions and variables +@author James Erringham-Bruce +*/ + +#ifndef MAINMENU_H +#define MAINMENU_H + +#include "mbed.h" // mbed library +#include "Radar.h" +#include "Graph.h" +#include "UserSettings.h" + +// creating the class used in plotting the graph +class Menu +{ + // defining the public functions and variables +public: + + void mainMenu(); + + void runSelection(int bank); + + void printText(); + + int getBank(); + + /** + @fn numerical + @brief shows the numerical readings on screen - speed, distance + */ + void numerical(); + + // defining the private functions and variables +private: + +}; + +#endif + +Graph graph; +Radar radar; +UserSettings setting; + +volatile int menu_screen = 0; + +// function to return the value of the bank the potentiometer corresponds to for the menu +int Menu::getBank() +{ + int bankReturn; + if (selectorPot < 0.25f) { + bankReturn = 2; + } + if (selectorPot >= 0.25f && selectorPot < 0.5f) { + bankReturn = 3; + } + if (selectorPot >= 0.5f && selectorPot < 0.75f) { + bankReturn = 4; + } + if (selectorPot >= 0.75f) { + bankReturn = 5; + } + return bankReturn; +} + +// MAIN MENU FUNCTION WHERE THE USER CAN INTERFACE +void Menu::mainMenu() +{ + int bank = 0; // initialise the bank + menu_screen = 1; // declaring the menu screen is active + while (1) { + + lcd.clear(); + bank = getBank(); // get the bank value + printText(); // print the users options and title + // looping through one bank of the screen ( bank 0 in this case) + // similar algorithm to my scrolling method + int tempBank = bank*8; + + for ( int columns = 0; columns < 84; columns++ ) { + // multiply by eight to convert bank value to the rows in that bank + for ( int currentBank = (bank*8) - 1; currentBank < tempBank+8; currentBank++) { + if (lcd.getPixel(columns, currentBank)) { // if the pixel is set + lcd.clearPixel(columns, currentBank); // clear it + } else { // set the other pixels + lcd.setPixel(columns, currentBank); // basically inverting the screen + } + } + } + runSelection(bank); // check if a selection has been made + lcd.refresh(); + wait(0.5); + } +} + +void Menu::runSelection(int bank) +{ + if (bank == 2 && button == 1) { + menu_screen = 0; + setting.printScreen(); + } + if (bank == 3 && button == 1) { + menu_screen = 0; + graph.plotGraph(); + } + if (bank == 4 && button == 1) { + menu_screen = 0; + numerical(); + } + if (bank == 5 && button == 1) { + menu_screen = 0; + radar.radarMode(); + } +} + +// FUNCTION TO PRINT THE DISTANCE ON SCREEN IN NUMERICAL FORM +void Menu::numerical() +{ + while (1) { + int avgCm = getAverageReadingCm(); + int avgInch = getAverageReadingInch(); + + if (g_timer_flag) { // firing the first timer flag + g_timer_flag = 0; + lcd.clear(); // clear the screen ( preparing for the reading to be dispalyed + lcd.printString("DISTANCE", 18, 0); + printReading(avgCm ,avgInch); // printing the reading on the screen calling a previous function + lcd.refresh(); // refresh the screen displaying the average reading + } + sleep(); // sleep before next interrupt + } +} + +void Menu::printText() +{ + lcd.printString("MENU",30,0); // print the title + lcd.drawLine(28,8,54,8,1); // underlining the title + lcd.printString("SETTINGS",17,2); // options + lcd.printString("GRAPH PLOT",12,3); + lcd.printString("NUMERICAL",16,4); + lcd.printString("RADAR MODE",12,5); +} \ No newline at end of file