test menu

Dependencies:   Menu RPG SMARTGPU TextLCD Ton mbed

Fork of lcd_menu by Peihsun Yeh

Files at this revision

API Documentation at this revision

Comitter:
pyeh9
Date:
Tue Mar 05 21:29:52 2013 +0000
Parent:
1:eb5750658d93
Child:
3:30dc8952d0ae
Commit message:
2nd version - with comments

Changed in this revision

Menu.lib Show annotated file Show diff for this revision Revisions of this file
Navigator.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
notes.h Show annotated file Show diff for this revision Revisions of this file
--- a/Menu.lib	Thu Feb 28 22:22:31 2013 +0000
+++ b/Menu.lib	Tue Mar 05 21:29:52 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/pyeh9/code/Menu/#577f0ec71f4c
+http://mbed.org/users/pyeh9/code/Menu/#2654dc659298
--- a/Navigator.lib	Thu Feb 28 22:22:31 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/pyeh9/code/Navigator/#8209f74d51a0
--- a/main.cpp	Thu Feb 28 22:22:31 2013 +0000
+++ b/main.cpp	Tue Mar 05 21:29:52 2013 +0000
@@ -1,33 +1,71 @@
 #include "mbed.h"
 #include "TextLCD.h"
-#include "SDFileSystem.h"
 #include "RPG.h"
-#include <vector>
-#include <string>
 #include "Selection.h"
 #include "Menu.h"
 #include "Navigator.h"
+#include <vector>
+#include <string>
 
 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
 TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
 RPG rpg(p21,p22,p23); 
-SDFileSystem sd(p5, p6, p7, p8, "sd"); 
 
 using namespace std;
 
-int direction = 0;
-int cursor = 0;
+// some functions to tie to selections
+void toggleLED1() { led1 = !led1; }
+void toggleLED2() { led2 = !led2; }
+void toggleLED3() { led3 = !led3; }
+void toggleLED4() { led4 = !led4; }
+void resetLED()
+{
+    led1 = 0;
+    led2 = 0;
+    led3 = 0;
+    led4 = 0;
+}
 
 int main() {
-    Menu menu1;
-    menu1.add(Selection(NULL, 0, "Toggle LED1"));
-    menu1.add(Selection(NULL, 1, "Toggle LED2"));
-    menu1.add(Selection(NULL, 2, "Toggle LED3"));
-    menu1.add(Selection(NULL, 3, "Toggle LED4"));
+    // In using this library, the user declares "Menus", which are essentially arrays of "Selections".
+    // Selections describe each individual selectable item. 
+    // Selections can be tied to functions. Functions must output void and take in no arguments.
+    // Selections can also have references to child menus.
+    
+    // It makes sense to declare a root menu first, but you don't have to. 
+    // Menus should have an identifier (the argument in constructor). 
+    Menu rootMenu("root"); 
     
-    Navigator navigator(menu1, rpg, &lcd);
-    navigator.printMenu();
+    // Selections are added to menus through the Menu's "add" method.
+    // If a function is to be executed when the RPG is depressed, make a REFERENCE to it. Otherwise null.
+    // The second argument is its position - the will be deprecated soon.
+    // The last is the text to display. *INCLUDE A SPACE IN THE BEGINNING, this is where the cursor goes. 
+    // *This means the text is limited to 14 characters (not counting the space) with this display. 
+    // **It is 14 not 15 for reasons pertaining to the implementation of the TextLCD library. 
+    Menu ledMenu("LED menu"); 
+    ledMenu.add(Selection(&toggleLED1, 0, NULL, " Toggle LED1")); // The function argument of selection can be added directly
+    ledMenu.add(Selection(NULL, 1, NULL, " Toggle LED2"));        // It can also be set to NULL temporarily and changed later.
+    ledMenu.selections[1].fun = &toggleLED2;                      // Useful for when functions are methods in other classes.
+    ledMenu.add(Selection(&toggleLED3, 2, NULL, " Toggle LED3"));
+    ledMenu.add(Selection(&toggleLED4, 3, NULL, " Toggle LED4"));
+    ledMenu.add(Selection(&resetLED, 4, &rootMenu, " Go back"));  // always add a Selection at the end to point to the parent
+    
+    Menu aboutMenu("About Menu"); // about menu crediting us :)
+    aboutMenu.add(Selection(NULL, 0, NULL, " Authors:"));
+    aboutMenu.add(Selection(NULL, 1, NULL, " Ben Y & Tony T"));
+    aboutMenu.add(Selection(NULL, 2, NULL, " ECE4180"));
+    aboutMenu.add(Selection(NULL, 3, &rootMenu, " Go back"));
+    
+    // Selections to the root menu should be added last
+    rootMenu.add(Selection(NULL, 0, &ledMenu, " LED MENU"));
+    rootMenu.add(Selection(NULL, 1, NULL, " Dummy menu 1"));  // a dummy menu, doesn't do anything
+    rootMenu.add(Selection(NULL, 2, &aboutMenu, " About menu"));   
+    
+    // Here is the heart of the system: the navigator. 
+    // The navigator takes in a reference to the root, an interface, and a reference to an lcd
+    Navigator navigator(&rootMenu, rpg, &lcd);
+    
     while(1){
-        navigator.poll();
+        navigator.poll(); // In a loop, call navigator's poll method to determine if the user is interacting with the rpg. 
     }
 }
\ No newline at end of file
--- a/notes.h	Thu Feb 28 22:22:31 2013 +0000
+++ b/notes.h	Tue Mar 05 21:29:52 2013 +0000
@@ -1,3 +1,5 @@
+//SDFileSystem sd(p5, p6, p7, p8, "sd"); 
+
 /*
 struct dirent *p;
     DIR *d = opendir("/sd/mydir");