Zoltan Hudak / Mbed 2 deprecated Menu_Hello

Dependencies:   Menu mbed

Committer:
hudakz
Date:
Fri Jan 05 14:49:58 2018 +0000
Revision:
3:9b11b0e69ff4
Parent:
2:92f4dad1b937
Rather than polling digital inputs, buttons are implemented utilizng interrupts.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:f7514c3f33b6 1 /*
hudakz 0:f7514c3f33b6 2 * An example of using the Menu library - Simple Menu system with push buttons.
hudakz 0:f7514c3f33b6 3 *
hudakz 0:f7514c3f33b6 4 * The Menu library was created to facilitate designs with a display and push buttons.
hudakz 0:f7514c3f33b6 5 * - number of menus and push buttons is practically not limited by the software
hudakz 0:f7514c3f33b6 6 * - function of individual push buttons varies depending on the selected menu
hudakz 0:f7514c3f33b6 7 *
hudakz 0:f7514c3f33b6 8 * ---------------------------------
hudakz 0:f7514c3f33b6 9 * | |
hudakz 0:f7514c3f33b6 10 * | ---------------------------- |
hudakz 0:f7514c3f33b6 11 * | | | |
hudakz 0:f7514c3f33b6 12 * | | | |
hudakz 0:f7514c3f33b6 13 * | | | |
hudakz 0:f7514c3f33b6 14 * | | Display | |
hudakz 0:f7514c3f33b6 15 * | | | |
hudakz 0:f7514c3f33b6 16 * | | | |
hudakz 0:f7514c3f33b6 17 * | | | |
hudakz 0:f7514c3f33b6 18 * | ---------------------------- |
hudakz 0:f7514c3f33b6 19 * | O O O O |
hudakz 0:f7514c3f33b6 20 * | Btn1 Btn2 Btn3 Btn4 |
hudakz 0:f7514c3f33b6 21 * | |
hudakz 0:f7514c3f33b6 22 * ----------------------------------
hudakz 3:9b11b0e69ff4 23 *
hudakz 0:f7514c3f33b6 24 * Each push button must be connected to an mbed digital input pin and the ground.
hudakz 0:f7514c3f33b6 25 *
hudakz 0:f7514c3f33b6 26 *
hudakz 0:f7514c3f33b6 27 * -------------------------
hudakz 0:f7514c3f33b6 28 * |
hudakz 0:f7514c3f33b6 29 * | mbed board
hudakz 0:f7514c3f33b6 30 * |
hudakz 0:f7514c3f33b6 31 * -------------------------
hudakz 0:f7514c3f33b6 32 * | Input pin
hudakz 0:f7514c3f33b6 33 * |
hudakz 0:f7514c3f33b6 34 * o
hudakz 0:f7514c3f33b6 35 * / Button ...
hudakz 0:f7514c3f33b6 36 * o
hudakz 0:f7514c3f33b6 37 * |
hudakz 0:f7514c3f33b6 38 * ---
hudakz 0:f7514c3f33b6 39 * GND
hudakz 0:f7514c3f33b6 40 *
hudakz 0:f7514c3f33b6 41 *
hudakz 3:9b11b0e69ff4 42 * NOTE: When creating a MenuSystem the constructor automatically connects
hudakz 3:9b11b0e69ff4 43 * an internal pull-up resistor to each PushButton input used by the MenuSytem.
hudakz 0:f7514c3f33b6 44 */
hudakz 0:f7514c3f33b6 45
hudakz 0:f7514c3f33b6 46 #include "mbed.h"
hudakz 0:f7514c3f33b6 47 #include "Menu.h"
hudakz 0:f7514c3f33b6 48
hudakz 0:f7514c3f33b6 49 Serial pc(USBTX, USBRX);
hudakz 0:f7514c3f33b6 50
hudakz 0:f7514c3f33b6 51 /*
hudakz 3:9b11b0e69ff4 52 * Variables used in this example
hudakz 0:f7514c3f33b6 53 */
hudakz 0:f7514c3f33b6 54 int setpoint;
hudakz 0:f7514c3f33b6 55 int* p_setpoint;
hudakz 0:f7514c3f33b6 56 int loSetpoint = 20;
hudakz 0:f7514c3f33b6 57 int hiSetpoint = 50;
hudakz 0:f7514c3f33b6 58
hudakz 0:f7514c3f33b6 59 /*
hudakz 3:9b11b0e69ff4 60 * Define push buttons to be used in menu.
hudakz 0:f7514c3f33b6 61 */
hudakz 0:f7514c3f33b6 62 #if defined(TARGET_LPC1768)
hudakz 3:9b11b0e69ff4 63 PushButton btnMode(p21), btnMore(p22), btnLess(p23), btnSave(p24);
hudakz 3:9b11b0e69ff4 64 #else
hudakz 3:9b11b0e69ff4 65 PushButton btnMode(D2), btnMore(D3), btnLess(D4), btnSave(D5);
hudakz 0:f7514c3f33b6 66 #endif
hudakz 0:f7514c3f33b6 67
hudakz 3:9b11b0e69ff4 68
hudakz 0:f7514c3f33b6 69 /*
hudakz 3:9b11b0e69ff4 70 * Define an array of PushButton pointers initialized with push buttons created above.
hudakz 0:f7514c3f33b6 71 */
hudakz 3:9b11b0e69ff4 72 PushButton* buttons[] = {&btnMode, &btnMore, &btnLess, &btnSave};
hudakz 3:9b11b0e69ff4 73
hudakz 0:f7514c3f33b6 74
hudakz 0:f7514c3f33b6 75 /*
hudakz 0:f7514c3f33b6 76 * Create a menu system object associated with the push buttons
hudakz 0:f7514c3f33b6 77 */
hudakz 3:9b11b0e69ff4 78 MenuSystem menuSystem(buttons, 4 /*, 300 */); // name of the array, number of buttons, (debounce time in ms)
hudakz 0:f7514c3f33b6 79
hudakz 0:f7514c3f33b6 80 /*
hudakz 0:f7514c3f33b6 81 * Create as many menus as you need.
hudakz 0:f7514c3f33b6 82 *
hudakz 0:f7514c3f33b6 83 * In this example we create the following three menus:
hudakz 3:9b11b0e69ff4 84 * 1. Main
hudakz 3:9b11b0e69ff4 85 * 2. Set high setpoint
hudakz 3:9b11b0e69ff4 86 * 3. Set low setpoint
hudakz 0:f7514c3f33b6 87 *
hudakz 3:9b11b0e69ff4 88 * NOTE: The function of individual push buttons will vary depending on the actually opened menu.
hudakz 0:f7514c3f33b6 89 */
hudakz 0:f7514c3f33b6 90 Menu menuMain(menuSystem);
hudakz 0:f7514c3f33b6 91 Menu menuSetHiSetpoint(menuSystem);
hudakz 0:f7514c3f33b6 92 Menu menuSetLoSetpoint(menuSystem);
hudakz 0:f7514c3f33b6 93
hudakz 0:f7514c3f33b6 94 /*
hudakz 0:f7514c3f33b6 95 * Declare all functions to be called on 'button pressed' events
hudakz 0:f7514c3f33b6 96 */
hudakz 0:f7514c3f33b6 97 void openMenu_Main(void);
hudakz 0:f7514c3f33b6 98 void openMenu_SetHiSetpoint(void);
hudakz 0:f7514c3f33b6 99 void openMenu_SetLoSetpoint(void);
hudakz 0:f7514c3f33b6 100 void incrementSetpoint(void);
hudakz 0:f7514c3f33b6 101 void decrementSetpoint(void);
hudakz 0:f7514c3f33b6 102 void saveSetpoint(void);
hudakz 0:f7514c3f33b6 103
hudakz 0:f7514c3f33b6 104 /**
hudakz 0:f7514c3f33b6 105 * @brief
hudakz 0:f7514c3f33b6 106 * @note
hudakz 0:f7514c3f33b6 107 * @param
hudakz 0:f7514c3f33b6 108 * @retval
hudakz 0:f7514c3f33b6 109 */
hudakz 0:f7514c3f33b6 110 int main(void) {
hudakz 0:f7514c3f33b6 111
hudakz 0:f7514c3f33b6 112 // Attach 'button pressed' event handler functions to the individual push buttons.
hudakz 1:cc0fa853f718 113 // NOTE: It is not compulsory to attach a function to all push buttons in each menu.
hudakz 0:f7514c3f33b6 114 //
hudakz 0:f7514c3f33b6 115
hudakz 0:f7514c3f33b6 116 // 'Main' menu:
hudakz 3:9b11b0e69ff4 117 menuMain.attach(buttons[0], openMenu_SetHiSetpoint);
hudakz 0:f7514c3f33b6 118
hudakz 0:f7514c3f33b6 119 //
hudakz 0:f7514c3f33b6 120 // 'Set High Setpoint' menu:
hudakz 3:9b11b0e69ff4 121 menuSetHiSetpoint.attach(buttons[0], openMenu_SetLoSetpoint);
hudakz 3:9b11b0e69ff4 122 menuSetHiSetpoint.attach(buttons[1], incrementSetpoint);
hudakz 3:9b11b0e69ff4 123 menuSetHiSetpoint.attach(buttons[2], decrementSetpoint);
hudakz 3:9b11b0e69ff4 124 menuSetHiSetpoint.attach(buttons[3], saveSetpoint);
hudakz 0:f7514c3f33b6 125
hudakz 0:f7514c3f33b6 126 //
hudakz 0:f7514c3f33b6 127 // 'Set Low Setpoint' menu:
hudakz 3:9b11b0e69ff4 128 menuSetLoSetpoint.attach(buttons[0], openMenu_Main);
hudakz 3:9b11b0e69ff4 129 menuSetLoSetpoint.attach(buttons[1], incrementSetpoint);
hudakz 3:9b11b0e69ff4 130 menuSetLoSetpoint.attach(buttons[2], decrementSetpoint);
hudakz 3:9b11b0e69ff4 131 menuSetLoSetpoint.attach(buttons[3], saveSetpoint);
hudakz 0:f7514c3f33b6 132
hudakz 3:9b11b0e69ff4 133 openMenu_Main(); // open 'Main' menu
hudakz 0:f7514c3f33b6 134
hudakz 0:f7514c3f33b6 135 while(1) {
hudakz 3:9b11b0e69ff4 136 // When a button is pressed a flag is set immediately via an interrupt service routine.
hudakz 3:9b11b0e69ff4 137 // But the assigned handler is called later on here by the 'handleButtons()' function.
hudakz 3:9b11b0e69ff4 138 menuSystem.handleButtons();
hudakz 0:f7514c3f33b6 139
hudakz 3:9b11b0e69ff4 140 //.. Your main code
hudakz 0:f7514c3f33b6 141 }
hudakz 0:f7514c3f33b6 142 }
hudakz 0:f7514c3f33b6 143
hudakz 0:f7514c3f33b6 144 /*
hudakz 0:f7514c3f33b6 145 * Lets define te menu functions:
hudakz 0:f7514c3f33b6 146
hudakz 0:f7514c3f33b6 147 * NOTE: For the sake of simplicity, in this example we do not connect any display to the mbed.
hudakz 0:f7514c3f33b6 148 * Instead we'll utilize a serial terminal running on the connected PC.
hudakz 0:f7514c3f33b6 149 */
hudakz 0:f7514c3f33b6 150
hudakz 0:f7514c3f33b6 151 /**
hudakz 0:f7514c3f33b6 152 * @brief
hudakz 0:f7514c3f33b6 153 * @note None
hudakz 0:f7514c3f33b6 154 * @param None
hudakz 0:f7514c3f33b6 155 * @retval None
hudakz 0:f7514c3f33b6 156 */
hudakz 0:f7514c3f33b6 157 void openMenu_Main(void) {
hudakz 0:f7514c3f33b6 158 menuSystem.open(menuMain); // activate the menu
hudakz 0:f7514c3f33b6 159 pc.printf("---------------------------------------------------\r\n");
hudakz 3:9b11b0e69ff4 160 pc.printf("Main menu:\r\n");
hudakz 3:9b11b0e69ff4 161 pc.printf("Press 'Mode' to open 'High setpoint' menu.\r\n");
hudakz 0:f7514c3f33b6 162 pc.printf("hiSetpoint = %i\r\n", hiSetpoint);
hudakz 3:9b11b0e69ff4 163 pc.printf("loSetpoint = %i\r\n", loSetpoint);
hudakz 0:f7514c3f33b6 164 pc.printf("\r\n");
hudakz 0:f7514c3f33b6 165 }
hudakz 0:f7514c3f33b6 166
hudakz 0:f7514c3f33b6 167 /**
hudakz 0:f7514c3f33b6 168 * @brief
hudakz 0:f7514c3f33b6 169 * @note
hudakz 0:f7514c3f33b6 170 * @param
hudakz 0:f7514c3f33b6 171 * @retval
hudakz 0:f7514c3f33b6 172 */
hudakz 0:f7514c3f33b6 173 void openMenu_SetHiSetpoint(void) {
hudakz 0:f7514c3f33b6 174 menuSystem.open(menuSetHiSetpoint); // activate the menu
hudakz 0:f7514c3f33b6 175 pc.printf("---------------------------------------------------\r\n");
hudakz 0:f7514c3f33b6 176 pc.printf("High setpoint menu:\r\n");
hudakz 3:9b11b0e69ff4 177 pc.printf("Press 'Mode' to open 'Low setpoint' menu.\r\n");
hudakz 0:f7514c3f33b6 178 pc.printf("Press 'More' to increment high setpoint.\r\n");
hudakz 0:f7514c3f33b6 179 pc.printf("Press 'Less' to decrement high setpoint.\r\n");
hudakz 0:f7514c3f33b6 180 pc.printf("Press 'Save' to save the setoint.\r\n");
hudakz 0:f7514c3f33b6 181 pc.printf("\r\n");
hudakz 0:f7514c3f33b6 182
hudakz 0:f7514c3f33b6 183 p_setpoint = &hiSetpoint;
hudakz 0:f7514c3f33b6 184 setpoint = hiSetpoint;
hudakz 0:f7514c3f33b6 185 }
hudakz 0:f7514c3f33b6 186
hudakz 0:f7514c3f33b6 187 /**
hudakz 0:f7514c3f33b6 188 * @brief
hudakz 0:f7514c3f33b6 189 * @note
hudakz 0:f7514c3f33b6 190 * @param
hudakz 0:f7514c3f33b6 191 * @retval
hudakz 0:f7514c3f33b6 192 */
hudakz 0:f7514c3f33b6 193 void openMenu_SetLoSetpoint(void) {
hudakz 0:f7514c3f33b6 194 menuSystem.open(menuSetLoSetpoint); // activate the menu
hudakz 0:f7514c3f33b6 195 pc.printf("---------------------------------------------------\r\n");
hudakz 0:f7514c3f33b6 196 pc.printf("Low setpoint menu:\r\n");
hudakz 3:9b11b0e69ff4 197 pc.printf("Press 'Mode' to open 'Main' menu.\r\n");
hudakz 0:f7514c3f33b6 198 pc.printf("Press 'More' to increment low setpoint.\r\n");
hudakz 0:f7514c3f33b6 199 pc.printf("Press 'Less' to decrement low setpoint.\r\n");
hudakz 0:f7514c3f33b6 200 pc.printf("Press 'Save' to save the setpoint.\r\n");
hudakz 0:f7514c3f33b6 201 pc.printf("\r\n");
hudakz 0:f7514c3f33b6 202
hudakz 0:f7514c3f33b6 203 p_setpoint = &loSetpoint;
hudakz 0:f7514c3f33b6 204 setpoint = loSetpoint;
hudakz 0:f7514c3f33b6 205 }
hudakz 0:f7514c3f33b6 206
hudakz 0:f7514c3f33b6 207 /**
hudakz 0:f7514c3f33b6 208 * @brief
hudakz 0:f7514c3f33b6 209 * @note
hudakz 0:f7514c3f33b6 210 * @param
hudakz 0:f7514c3f33b6 211 * @retval
hudakz 0:f7514c3f33b6 212 */
hudakz 0:f7514c3f33b6 213 void incrementSetpoint(void) {
hudakz 0:f7514c3f33b6 214 setpoint++;
hudakz 0:f7514c3f33b6 215 pc.printf("Setpoint incremented\r\n");
hudakz 0:f7514c3f33b6 216 pc.printf("setpoint = %i\r\n", setpoint);
hudakz 0:f7514c3f33b6 217 }
hudakz 0:f7514c3f33b6 218
hudakz 0:f7514c3f33b6 219 /**
hudakz 0:f7514c3f33b6 220 * @brief
hudakz 0:f7514c3f33b6 221 * @note
hudakz 0:f7514c3f33b6 222 * @param
hudakz 0:f7514c3f33b6 223 * @retval
hudakz 0:f7514c3f33b6 224 */
hudakz 0:f7514c3f33b6 225 void decrementSetpoint(void) {
hudakz 0:f7514c3f33b6 226 setpoint--;
hudakz 0:f7514c3f33b6 227 pc.printf("Setpoint decremented\r\n");
hudakz 0:f7514c3f33b6 228 pc.printf("setpoint = %i\r\n", setpoint);
hudakz 0:f7514c3f33b6 229 }
hudakz 0:f7514c3f33b6 230
hudakz 0:f7514c3f33b6 231
hudakz 0:f7514c3f33b6 232 /**
hudakz 0:f7514c3f33b6 233 * @brief
hudakz 0:f7514c3f33b6 234 * @note
hudakz 0:f7514c3f33b6 235 * @param
hudakz 0:f7514c3f33b6 236 * @retval
hudakz 0:f7514c3f33b6 237 */
hudakz 0:f7514c3f33b6 238 void saveSetpoint(void) {
hudakz 0:f7514c3f33b6 239 *p_setpoint = setpoint;
hudakz 0:f7514c3f33b6 240 pc.printf("Setpoint saved\r\n");
hudakz 0:f7514c3f33b6 241 pc.printf("\r\n");
hudakz 0:f7514c3f33b6 242 }
hudakz 0:f7514c3f33b6 243
hudakz 0:f7514c3f33b6 244
hudakz 0:f7514c3f33b6 245
hudakz 3:9b11b0e69ff4 246