KeypadShield

 1#include <ItemList.h>
 2#include <LcdMenu.h>
 3#include <MenuScreen.h>
 4#include <display/LiquidCrystalAdapter.h>
 5#include <input/AnalogButtonAdapter.h>
 6#include <renderer/CharacterDisplayRenderer.h>
 7
 8#define LCD_ROWS 2
 9#define LCD_COLS 16
10
11std::vector<const char*> colors = {"Red", "Green", "Blue", "Orange", "Aqua", "Yellow", "Purple", "Pink"};
12std::vector<uint8_t> nums = {5, 7, 9, 12, 32};
13
14// Initialize the main menu items
15// clang-format off
16MENU_SCREEN(mainScreen, mainItems,
17    ITEM_BASIC("Keypad demo"),
18    ITEM_LIST("Color", colors, [](const uint8_t color) { Serial.println(colors[color]); }),
19    ITEM_LIST("Num", nums, [](const uint8_t num) { Serial.println(nums[num]); }, 0, "%d", 0, true),
20    ITEM_BASIC("Example"));
21// clang-format on
22
23// Construct the LcdMenu
24LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
25CharacterDisplayRenderer renderer(new LiquidCrystalAdapter(&lcd, LCD_COLS, LCD_ROWS), LCD_COLS, LCD_ROWS);
26LcdMenu menu(renderer);
27
28AnalogButtonAdapter ButtonBackSpace(&menu, A0, 20, BACKSPACE);
29AnalogButtonAdapter ButtonUp(&menu, A0, 100, 20, UP);
30AnalogButtonAdapter ButtonDown(&menu, A0, 250, 20, DOWN);
31AnalogButtonAdapter ButtonBack(&menu, A0, 400, 20, BACK);
32AnalogButtonAdapter ButtonEnter(&menu, A0, 640, 20, ENTER);
33
34void setup() {
35    Serial.begin(9600);
36    renderer.begin();
37    menu.setScreen(mainScreen);
38}
39
40void loop() {
41    ButtonBackSpace.observe();
42    ButtonUp.observe();
43    ButtonDown.observe();
44    ButtonBack.observe();
45    ButtonEnter.observe();
46}