Distance Sensor Embedded Systems Project SID: 200864479 James Erringham-Bruce

Dependencies:   N5110 SRF02-JEB mbed

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?

UserRevisionLine numberNew 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 }