Обычно, если у Arduino не хватает портов то используют разного рода расширители на основе последовательных регистров 74HC164 или 74HC595. При этом для управления таким расширителем требуется в первом случае (HC164) 2 порта, а во втором - 3 порта, т.к. необходимо формировать еще и сигнал Latch.
Я провел небольшой ресерч на тему можно ли управлять такими регистрами используя всего лишь один порт. Идея схемы заключается в том, что "1" и "0" кодируются разной длительностью посылки. На приведенном ниже рисунке длительность "1" составляет 1мсек, а длительность "0" - 2 мсек. Вход инверсный. Y5 - формирователь входного сигнала, Y7 - лог."1"
Функционирование схемы понятно из следующиего рис. Видно, что при второй длительной посылке C1 успевает разрядится до 2в и в защелку попадает лог."0"
В случае если мы используем 74HC595, то нам необходимо сформировать так же сигнал для управления "защелкой" на выходе. Делаем согласно след. схеме.
Постоянная цепи R4C2 определяет макс. длительность между посылками, которую мы интерпретируем как завершение передачи
И эпюры сигналов, поясняющие принцип ее работы