Предлагаю вам такой вариант решения: использовать расширитель портов, например mcp23s17. Подключается либо по SPI, либо по I2C. Даёт дополнительно два порта по 8 ног. Есть отдельные пины для прерываний от каждого порта.
Плюсы:
Не надо постоянно сканировать 10 входов в ожидании нажатия. Не уверен, можно ли в avr сделать 10 отдельных прерываний на нужные кнопки, может и можно конечно. В варианте с расширителем порта у вас будет прерывание при изменении состояния любой из ног порта, в котором вы считаете с расширителя состояние всего порта разом. Там на самом деле несколько режимов работы прерывания, можно настраивать как удобнее. На мой взгляд удобнее, чем 10 отдельных ног анализировать.
Так же расширитель можно настроить и на выход и управлять чем угодно. Можно один порт сделать на выход, другой на вход. Можно ли настраивать режим работы для отдельных ног, на память не помню.
Соответственно с расширителем вы можете использовать любую ардуину, думаю spi и i2c есть во всех.
Только не забудьте, при подключении реле и подобных вещей применять соответствующее схемное решение, а не просто к порту подключать :)