2024-10-31 09:13:13 +00:00
# lcdMenu
2024-10-30 19:41:28 +00:00
2024-10-31 17:03:30 +00:00
A micropython library, which supports vertical and horizontal scrolling through menu items on both 2x16 and 4x20 liquid crystal displays
2024-10-31 17:07:00 +00:00
This project is the completely rewritten successor of my old (and now archived) [ProgramChooser ](/BlueFox/ProgramChooser ) library.
2024-11-12 21:17:06 +00:00
It is now production-ready (tested on 2x16 displays only at the moment.) ToDo: Make the README.md also seem production ready!
2024-10-31 17:03:30 +00:00
2024-11-13 20:59:07 +00:00
2024-10-31 17:26:16 +00:00
## Roadmap
2024-10-31 17:03:30 +00:00
2024-11-01 16:39:23 +00:00
- [x] forward, backward and select button
2024-11-12 20:26:34 +00:00
- [x] support for horizontal and vertical scrolling
2024-11-01 21:08:36 +00:00
- [x] support for both 2x16 and 4x20 LCDs
2024-11-01 16:39:23 +00:00
- [x] a reliable order of the menu items
2024-11-12 20:26:34 +00:00
- [x] good documentation for all of this (maybe through examples)
2024-11-01 16:39:23 +00:00
- [x] show an exit screen when a specific exit code is returned by a callback function
2024-11-12 21:15:15 +00:00
- [x] make the menu itself exitable (to enable stuff like submenus, etc.)
2024-10-31 17:26:16 +00:00
- [x] make the project a valid python package
2024-10-31 17:03:30 +00:00
2024-11-13 20:59:07 +00:00
## Gallery
Here are some of examples of how a lcdMenu will look, and to get those, simply append the `Code` column's contents to the following (considering you have the library "installed" as explained before. All the examples below use a 2x16 display.
```python
from lcdMenu import lcdMenu
from machine import Pin, I2C
from PCF8574T import I2C_LCD
prev_btn = Pin(13, Pin.IN, Pin.PULL_DOWN) # input of the first btn
next_btn = Pin(14, Pin.IN, Pin.PULL_DOWN) # input of the second btn
ok_btn = Pin(15, Pin.IN, Pin.PULL_DOWN) # input of switch
LCD = I2C_LCD(I2C(0, sda=Pin(8), scl=Pin(9), freq=400000),0x27,2, 16)
def first():
print("first() called! 1")
def second():
print("second() called! 2")
def third():
print("third() called! 3")
return True
menuItems = [("first item", first),
("second item", second),
("third item", third)]
button_mappings = {"prev_btn":prev_btn, "next_btn": next_btn, "ok_btn": ok_btn}
```
| Result | Code |
| --------- | ------- |
| ![No title, first item & cycling on -> up & down, vertical scrolling ](images/2x16-title-vertical-up-down-cycling.jpg ) | ```python
menu = lcdMenu(LCD, button_mappings, scroll_direction=False, cycle=True, hide_menu_name=True, name="Fullscreen!")
menu.setup(menuItems)
menu.run()
``` |
| ![No title, first item & no cycling -> only down, vertical scrolling ](images/2x16-no-title-vertical-only-down.jpg ) | |
| ![No title, middle item -> up & down, vertical scrolling ](images/2x16-no-title-vertical-up-down.jpg ) | |
| ![No title, last item & no cycling -> only up, vertical scrolling ](images/2x16-no-title-vertical-only-up.jpg ) | |
| ![With title, only one option, vertical scrolling ](images/2x16-title-vertical-no-options.jpg ) | |
| ![With title, first item & no cycling -> only down, vertical scrolling ](images/2x16-title-vertical-only-down.jpg ) | |
| ![With title, middle item -> up & down, vertical scrolling ](images/2x16-title-vertical-up-down.jpg ) | |
| ![With title, last item & no cycling -> only up, vertical scrolling ](images/2x16-title-vertical-only-up.jpg ) | |
| ![With title, middle item -> forward and backward, horizontal scrolling ](images/2x16-title-horizontal.jpg ) | |
2024-10-31 17:03:30 +00:00
## License
2024-11-12 20:26:34 +00:00
This project is licensed under the GPL-v3-or-later. A copy can be found [here ](LICENSE ).