From blwiki
Jump to: navigation, search


MyMenu Card



MyMenu is a self contained menu system with these features:

  • 2-wire I2C (VCC, GND, CLK, DATA) interface
    • Selectable I2C address in range 0x20-0x27 (resistor install option)
  • Interrupt output line on button press
  • 5 Way Keypad (Up, Down, Left, Right, Select)
  • OLED connection - mounts OLED to card and shares I2C connection to Host
  • 3 LEDs
  • 49x49mm card with (4) 4-40 mounting holes

MCP23008 I2C Port Expander

GPIO Port Map

  • GP0 - LED D3
  • GP1 - LED D2
  • GP2 - LED D1
  • GP3 - Select button 0 = pressed
  • GP4 - Right button
  • GP5 - Down button
  • GP6 - Up button
  • GP7 - Left button

OLED Display

  • On ebay...
  • Another on bay
  • There are several versions
  • MyMenu requires
    • 4-pin I2C version
    • Rev X1-X3 requires pin Ordering VCC, GND,

Rev X3 Connectors

The card has a 5-pin, 0.1" spacing connector. The connector has I2C connections (CLK and DATA) plus an Interrupt line.

  1. GND
  2. VCC
  3. SDA
  4. SCL
  5. INT

The card has a 4-pin, 0.1" spacing connector for daisy-chaining. The connector has I2C connections (CLK and DATA).

  1. GND
  2. VCC
  3. SDA
  4. SCL

Arduino Libraries

  • The Display library is decoupled from the MyMenu library and requires a separate install

MyMenu Card Library/Examples

  • MyMenu library on GitHub
    • Can download the ZIP file and use the ZIP library installer
  • Card requires the Arduino Adafruit MCP23008 library
    • Needs to be installed separately from the MyMenu library
    • MCP23008 is the I2C interface chip that communicates with the buttons and LEDs
    • Tested with Adafruit MCP23008 library version 1.0.1
    • Driver is used to talk to the buttons/LEDs on the MyMenu card
    • Driver can be installed from the Arduino IDE - search "Adafruit MCP23008"
  • MyMenu card example code

Display Library - V2 Version

  • V3 Version uses Oli Kraus' u8x8 library (part of u8g2 library)
  • Oli Kraus' u8g2 OLED library
  • Library can be installed through Arduino IDE
  • Optional Land Board Menu System Code for OLED Displays - uses u8g2
    • Sketch uses 8,354 bytes (25%) of program storage space. Maximum is 32,256 bytes.
    • Global variables use 780 bytes (38%) of dynamic memory, leaving 1,268 bytes for local variables. Maximum is 2,048 bytes.

Display Library - Older Version (Deprecated)

Other libraries - Not Recommended for New Designs

Revision History/Checkout Notes

X4 Version Changes

  • Same netlist
  • Fixes I2C silkscreen issues from X3


X3 Version Changes

  • Added a second I2C port for daisy chain of Host I2C
  • Changed host I2C pinout to G/V/SDA/SCK
    • Silkscreen is wrong
    • Board actually matches Sensor Shield SCK/SDA order
  • Added selection resistors R10/R11 (Vcc) and R20/R21 (GND) for OLED power/ground pins
    • Install 0 Ohm resistors/leave open
  • Added silkscreen for MCP23008 address marking 0x2_
  • Reordered reference designators for easier assembly


X2 Version Changes

  • Moved LEDs to the top of the board
  • Created OLED module and moved mtg holes
  • Moved keys right

X2 Checkout

  • Works well
  • Recycled MCP23008 and OLED from the X1 prototype
  • OLED holes line up nicely
  • Got MyMenu Arduino library working
  • Uses Adafruit_MCP23008 library
  • 400 KHz operation
  • 2.2K pullup resistors on I2C lines


  • Clock on top, data on bottom


  • Clock/data relative timing


  • Clock rise time


  • Clock fall timing


X1 Card

MyMenu Rev X1 Checkout Notes

MyMenu Assembly Sheet X1

Assembly Sheet

MyMenu Assembly Sheet