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

Dependencies:   N5110 SRF02-JEB mbed

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