Based on TaskManagerIO. Interchange between PCF8574, MCP23017, 74HC595, and regular pins (or even ports) changing only one line of code. Fully debounced switches and matrix keypads (KeyboardManager) on any IO device (including on DfRobot) and one or more rotary encoders (even over i2c) that require no extra components in most cases and an EEPROM abstraction that works with AVR & I2C AT24x ROMs.